OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8132|回复: 7

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

[复制链接]

5

主题

27

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-5-30
在线时间
19 小时
发表于 2021-2-26 09:55:34 | 显示全部楼层 |阅读模式
20金钱
编译内核模块的时候发现无法使用math.h如果代码里面包含了math.h 编译就会报错,无法找到文件
百度上说要在gcc参数里面增加 -lm选项 但是我不知道我们这个makefile要怎么添加
所以请教各位大佬

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2021-2-26 11:50:26 | 显示全部楼层
Makefile里边也是通过gcc去编译的呀
森罗万象
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2021-2-26 12:14:32 | 显示全部楼层
如果是加参数   gcc的时候  直接输入这个参数就可以了啊
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2020-5-27
在线时间
14 小时
发表于 2021-6-25 17:19:28 | 显示全部楼层
你好,你解决这个问题了吗
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-3-20
在线时间
7 小时
发表于 2022-4-21 14:31:52 | 显示全部楼层
请问解决了吗?我也有这个问题困扰
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2020-5-27
在线时间
14 小时
发表于 2022-4-26 13:28:39 | 显示全部楼层
EEAworker 发表于 2022-4-21 14:31
请问解决了吗?我也有这个问题困扰

Linux内核空间无法调用C库函数,可以放弃了。
内核这么设计是因为内核态下不能调用FPU加速计算,不利于上下文切换和调度。
实在要用的话,建议拷贝要用的函数到你的文件中。
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2020-5-27
在线时间
14 小时
发表于 2022-4-26 16:15:07 | 显示全部楼层
Linux内核空间无法调用C库函数并且禁用FPU,可以放弃了。内核这么设计有利于上下文切换和调度。
实在要用的话,建议拷贝要用的函数到你的文件中。
经过我的实验,手动实现某些数学计算,如三角函数计算,只要涉及浮点数,编译时不会error,有一些warning如下:
  1.   MODPOST 1 modules
  2. WARNING: "__aeabi_f2d" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  3. WARNING: "__aeabi_fcmplt" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  4. WARNING: "__aeabi_fmul" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  5. WARNING: "__aeabi_fdiv" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  6. WARNING: "__aeabi_f2iz" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  7. WARNING: "__aeabi_fcmple" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  8. WARNING: "__aeabi_fcmpge" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  9. WARNING: "__aeabi_fsub" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  10. WARNING: "__aeabi_d2f" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  11. WARNING: "__aeabi_dmul" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  12. WARNING: "__aeabi_i2f" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  13. WARNING: "__aeabi_fcmpgt" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
  14. WARNING: "__aeabi_fadd" [/work/coding/1_diy/22_dts_i2c_mpu6050/mpu6050.ko] undefined!
复制代码
最终加载驱动时会报错如下:
  1. root@ATK-IMX6U:/work# insmod mpu6050.ko
  2. mpu6050: Unknown symbol __aeabi_fadd (err 0)
  3. mpu6050: Unknown symbol __aeabi_fcmpgt (err 0)
  4. mpu6050: Unknown symbol __aeabi_i2f (err 0)
  5. mpu6050: Unknown symbol __aeabi_dmul (err 0)
  6. mpu6050: Unknown symbol __aeabi_d2f (err 0)
  7. mpu6050: Unknown symbol __aeabi_fsub (err 0)
  8. mpu6050: Unknown symbol __aeabi_fcmpge (err 0)
  9. mpu6050: Unknown symbol __aeabi_fcmple (err 0)
  10. mpu6050: Unknown symbol __aeabi_f2iz (err 0)
  11. mpu6050: Unknown symbol __aeabi_fdiv (err 0)
  12. mpu6050: Unknown symbol __aeabi_fmul (err 0)
  13. mpu6050: Unknown symbol __aeabi_fcmplt (err 0)
  14. mpu6050: Unknown symbol __aeabi_f2d (err 0)
复制代码
原因是,当前使用Linux内核版本不支持ARM平台的相关运算,相同的内核代码在X86平台是没有问题的。
回复

使用道具 举报

5

主题

27

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-5-30
在线时间
19 小时
 楼主| 发表于 2022-9-26 17:22:14 | 显示全部楼层
我考上研究生辣 发表于 2022-4-26 16:15
Linux内核空间无法调用C库函数并且禁用FPU,可以放弃了。内核这么设计有利于上下文切换和调度。
实在要用 ...

大佬 厉害啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 08:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表