linux 内核模块开发注意事项

来源:互联网 发布:mac一键翻墙免费2016 编辑:程序博客网 时间:2024/06/05 05:07

最近开始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 0
原创粉丝点击