博客开通好久了,苦于自己正在看书巩固基础知识阶段,一直觉得自己没有写一篇博客的必要,毕竟不知道写些什么,看过两遍Linux设备驱动程序,有些感触,准备在第三遍回看时总结自己实践的经验写一些看书的体会吧,这篇就作为我的第一篇博文了。主要对一些设备驱动方面的概念做个总结,有新的概念将会填充进来,有需要改进的将予以修正。
模块初始化函数:在模块被加载时调用,主要为以后调用模块函数预先做准备,完成相关结构及设备的初始化。使用宏module_init(init_fun)进行声明,告知内核。
模块退出函数:在模块被卸载前被调用,完成与上面初始化函数相反的工作,使用宏module_exit(exit_fun)进行声明,告知内核。
内核空间:Linux内核运行在处理器的最高级别时的运行模式,可以运行所有操作。模块化代码运行于内核空间,扩充内核功能。
用户空间:Linux内核运行在处理器的最低级别时的运行模式,操作受限。
进程上下文:当应用程序执行系统调用时,运行模式将由用户空间切换到内核空间,此时称内核运行于进程上下文。
中断上下文:当硬件设备被中断挂起时,进入中断服务程序,这时,内核处在一个与所有金城武关的,专门的中断上下文中。
内核符号表:包含全局内核项的表,模块在装入内核后,它所导出的符号也会加入内核符号表,该内核符号表用于解析模块中未定义的符号。
主设备号与次设备号:主设备号标示设备对应的驱动程序,一般一个主设备号对应一个驱动程序;次设备号由内核使用,用于确定设备文件所指的设备。
字符设备与块设备最主要的区别:能否随机访问。能,为块设备,不能为字符设备。