您的位置:首页 > 运维架构 > Linux

linux 内核模块开发注意事项

2016-04-12 16:43 369 查看
最近开始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 互斥锁会造成休眠不能在中断中使用。

(未完 待续 时间不定)如有谬误,还请不吝指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 内核 工作