Linux内核模块/驱动编程基础

2014-11-24 07:48:49 · 作者: · 浏览: 2

Linux内核开发时需要注意以下几个问题:


1.不能访问C库,内核不能使用标准库。这个可以在编译链接内核以后从内核目录下的.vmlinux.cmd可以看出:arm-xxx-ld -nostdlib ... ... 。不过内核在lib下实现了部分常用的函数,如memset,strcpy这类函数,还有可能针对具体体系结构进行优化的代码,一般在arch/xxx/lib下。


2.内核编程使用的GNU C,而不是我们的标准C语言语法。看看内核的代码就知道。


3.因为是内核,所以其内存没有保护机制的。因为内核是在裸机上跑的,不像应用程序是在系统基础上运行的。这个搞过嵌入式开发的人都应该懂的。


4.要慎用内核栈,尽量用全局变量或者动态分配。因为内核栈被分配了比较小的空间,稍微大一点的数据就可能溢出,而且内核栈的底部保存着有关进程的信息。


5.不要轻易使用浮点数。


6.要注意同步和并发。多处理器,内核抢占,中断都有可能会产生竞争。


2.数据对齐。这个在ARM平台我们应该碰到过,不小心就有可能产生取数异常。ARM7,ARM9是不支持非对齐访问的,否则异常对待。新的ARMv7体系结构的芯片可以支持非对齐访问了。


3.字节顺序。主要是字中各种字节存放的顺序。有little-endian和big-endian。


4.使用内核定义的宏,不要使用魔幻数,不要对内核做任何假设。像使用HZ,PAGE_SHIFT来代替某些假的的数字。