Linux 操作系统与驱动的关系
应用程序——系统调用——内核空间——驱动程序——硬件
对于大多数操作系统都具有多任务的特性,驱动程序需要考虑并发、阻塞的问题
用户态和内核态,两者有一些指令运行上的限制,特殊指令只能在内核态运行。程序运行比如系统调用时需要先从用户态切换到内核态,调用结束后再切换回来,继续执行应用程序。
/*
driver module file
*/
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
int __init XXX_int(void)
{
// module download and start to work
return 0;
}
void __exit XXX_exit(void)
{
// module destory and end the work
}
module_init(XXX_init);
module_exit(XXX_exit);
注意事项:
1. 内核驱动程序无法访问C库
2. 驱动程序采用GNU C进行编译
3. 内核支持异步终端,抢占和SMO,注意同步和并发操作
4. 内核只有一个很小的定长的堆栈
5. 内核及驱动程序开发时缺少像用户空间那样的保护机制
6. 内核开发尽量用整形数据,避免用浮点型
7. 注意跨平台的可移植性,尽可能的做到兼容
8. 注意大小端的问题,Linux内核提供大小端的转化函数