在这里,以字符设备为例,分析其驱动程序的框架:
一、编写驱动程序的初始化函数
驱动程序的初始化在函数XXX_init()中完成,包括对硬件初始化、中断函数、向内核注册等。
a) 首先要理解硬件结构,搞清楚其功能、接口寄存器以及CPU怎么访问控制这些寄存器等。
b) 其次要明白如何把该设备驱动注册到内核中。设备驱动程序可以直接编进内核(在移植内核时,就将该驱动程序编译进内核),在系统启动的时候初始化,也可以在需要的时候以模块的方式动态到内核中去(使用insmod加载模块到内核中,而移除模块使用rmmod卸载模块)。每个字符设备或是块设备都是通过register_chrdev()函数注册,调用该函数后就可以向系统申请主设备号,操作成功后,该设备名就会出现在/proc/devices里。
此外,在关闭设备时,需要先解除原先设备的注册,而解除注册功能在XXXX_exit()中通过unregister_chrdev()函数实现,之后设备就会从/proc/devices里消失。