Linux内核驱动模块如何添加math.h

news/2025/1/12 6:18:56/

结论

Linux内核空间无法调用C库函数并且禁用FPU,可以放弃了。

  • 原因:内核这么设计有利于上下文切换和调度。

解决方法

尝试过手动实现某些三角函数到我的文件中。发现只要涉及浮点数,虽然编译时不会error,但有一些warning如下:

  MODPOST 1 modules
WARNING: "__aeabi_f2d" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fcmplt" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fmul" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fdiv" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_f2iz" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fcmple" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fcmpge" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fsub" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_d2f" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_dmul" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_i2f" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fcmpgt" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
WARNING: "__aeabi_fadd" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!

最终加载驱动时会报错如下:

root@ATK-IMX6U:/work# insmod mpu6050.ko
mpu6050: Unknown symbol __aeabi_fadd (err 0)
mpu6050: Unknown symbol __aeabi_fcmpgt (err 0)
mpu6050: Unknown symbol __aeabi_i2f (err 0)
mpu6050: Unknown symbol __aeabi_dmul (err 0)
mpu6050: Unknown symbol __aeabi_d2f (err 0)
mpu6050: Unknown symbol __aeabi_fsub (err 0)
mpu6050: Unknown symbol __aeabi_fcmpge (err 0)
mpu6050: Unknown symbol __aeabi_fcmple (err 0)
mpu6050: Unknown symbol __aeabi_f2iz (err 0)
mpu6050: Unknown symbol __aeabi_fdiv (err 0)
mpu6050: Unknown symbol __aeabi_fmul (err 0)
mpu6050: Unknown symbol __aeabi_fcmplt (err 0)
mpu6050: Unknown symbol __aeabi_f2d (err 0)

原因是:

当前使用Linux内核版本不支持ARM平台的相关运算,相同的内核代码在X86平台是没有问题的。


http://www.ppmy.cn/news/768160.html

相关文章

Linux驱动开发——正点原子IMX6ULL核心板ADS1256驱动开发

正点原子IMX6ULL核心板ADS1256驱动开发 一、修改设备树文件 查看正点原子IMX6ULL核心板和底板原理图,决定与 icm20608 共用 ecspi3。 找到 “imx6ull-alientek-emmc.dts” 和 “imx6ull-14x14-evk.dts”,在 “&iomuxc”下修改 “pinctrl_ecspi3”…

i.MX6ULL驱动开发 | 29 - 使用USB WIFI网卡(RTL8188EU)

一、USB无线网卡 插到电脑上看下型号是Realtek RTL8188EU版本: 二、添加驱动到Linux中 1. realtek驱动源码 使用正点原子资料包中的源码: 2. 删除内核自带的RTL8192CU驱动 根据正点原子教程描述,linux内核自带的驱动经过测试不稳定,所以手动添加驱动源码。 修改文件…

【Linux驱动开发】LCD 驱动实验

一、简介 Framebuffer 设备,Framebuffer(帧缓冲),简称 fb。 LCD 对应的设备文件是 /dev/fbX(X0~n)。在 Linux 中应用程序也是通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。因为虚拟内存的存在,驱动程…

正点原子imx6ull 4.3寸RGBLCD 800*480 ATK-4384触摸屏驱动芯片GT1511或GT9147问题

以前原子的触摸屏的触摸芯片是gt9147的,教程里的也是gt9147的驱动,后来,大概在2021年5月份前后,原子的4.3寸屏换了触摸芯片了,触摸芯片型号是gt1151的。所以,后期买屏幕的小伙伴可能拿到屏幕的芯片不是gt91…

STM32MP157A驱动开发 | 04 - Linux DRM显示驱动框架

Linux中主流的显示框架有两种:DRM框架和FB框架。 DRM框架:Direct Rendering Module,可以统一管理GPU显示FB框架:Frame Buffer,不能处理基于3D加速的GPU显卡 一、DRM框架简介 1. 整体架构 DRM框架包含两部分&#x…

STM32MP157驱动开发——字符设备驱动

一、简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备…

使用正点原子的U-boot驱动TN92

目录 TN92不能正常显示的原因:改进措施: TN92不能正常显示的原因: 使用正点原子的U-boot源码配合TN92 LCD显示屏进行实验,发现显示屏花屏,不能正常使用。在对比TN92显示屏的原理图和正点原子7寸LCD显示屏的原理图后发…

linux 字符设备驱动实战

文章目录 字符设备1、加载卸载模块2、字符设备相关结构体2.1、file_operations 结构体2.2、cdev 结构体2.3、cdev 系列函数常使用模板如下 3、注册设备号常使用模板如下 4、自动创建节点4.1、首先要创建一个 class 类4.2、创建一个设备device_create常使用模板如下 5、私有数据…