1.什么是驱动程序?
驱动程序是对硬件的具体操作,比如让LED的亮灭,在LCD上显示一个像素等,设计到对GPIO或者硬件的设置。
2.驱动程序如何加载进内核?
linux设备驱动是以内核模块的形式出现,Linux系统整体架构庞大,组价非常多,但是需要什么功能就重新编译内核,费时费力。linux提供一种模块机制,1.模块本身可以不被编译进入内核,控制内核映像的大小;2.一旦模块加载,就和编译进内核是一样的。
linux提供了模块程序结构
module_init(使用insmod调用)
module_exit(使用rmmod调用)
模块许可证声明(GPL)
模块参数(可选)
模块导出符号(可选)
模块作者等信息声明(可选)
3.驱动如何编写
框架+成员函数
4. 框架是什么?
首先,驱动最终通过与文件操作相关的系统调用或C库函数(本质也基于系统调用)被访问,而设备驱动的结构最终也是为了迎合提供给应用程序员的API。
其次,驱动工程师在设备驱动中不可避免地会与设备文件系统打交道,包括从Linux 2.4内核的devfs文件系统到Linux 2.6以后的udev。
Linux中文件操作的系统调用,包括创建、打开、读写和关闭文闭等操作
int creat(const char *filename, mode_t mode);
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int read(int fd, const void *buf, size_t length);
int write(int fd, const void *buf, size_t length);
int lseek(int fd, offset_t offset, int whence);
int clo