linux 内核模块开发注意事项

最近开始Linux相关的工作

在写一个netfilter相关的内核模块,发现一些开发内核模块时要注意的问题,简记于此,如有谬误,还请不吝指正!


1、内核模块内不能使用stdlib,stdio等C标准库,内核在lib/string.c下实现了一些常用函数strcpy.memset之类的函数,这些是可以在内核模块内使用的。


2、内核不支持浮点运算,说是提高性能避免用户空间,内核空间切换时需要保存FPU。


3、内核模块内调用函数,函数参数大小不能大于1Kb(1024bytes); 模块内定义的函数局部变量大小不能超过1Kb(1024bytes);否则会报警告frame size larger than 1024bytes。


4、内核模块申请空间标志问题,在中断程序中申请内存使用GFP_ATOMIC标志,以避免休眠等待。


5、中断访问资源时,要用spin_lock 或其他并发控制机制,保护资源以免冲突,造成系统紊乱。中断中使用并发控制要避免造成休眠。如:mutex 互斥锁会造成休眠不能在中断中使用。



(未完 待续 时间不定)如有谬误,还请不吝指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值