我们在什么时候用到设备驱动?
在linux中所有设备都是以文件的形式出现的,称为设备文件。当要调用设备时就会调用相应的设备文件。也就是对相应的设备文件进行读写时就会调用到相应的设备驱动。(所谓设备驱动最主要的就是对设备文件的读写。)
程序怎么调用设备驱动?
当我们要进行设备读写时,我们要调用设备驱动,通过应用层的系统调用读写设备文件,具体过程是:
1……找到相应设备的设备文件,准备进行读写。
2……当要进行设备读写是,通过设备的主设备号找到将要调用的驱动。(没有编译进内核的函数会动态的通过一个宏来加载)
3……把应用层的读写等命令转换成设备驱动中相应的读写等命令。
4……进行设备文件的读写等操作,即实现设备的控制。
设备驱动中的函数是如何被调用的?
动态加载的设备驱动是以模块的形式装载在内核当中的。
模块初始化之后该模块才可应用。
模块初始化时也要向系统注册对应的数据结构(不同的驱动模块有不同的数据结构,视具体情况而定)
只有把函数的指针传递给对应的数据结构才会被系统识别,才可能被系统调用。(试验时数据结构的其他位置可以为空)
这是分析过程,函数是如何被系统识别的?
1……把写好的函数指针传递给模块中相应的数据结构;
2……把数据结构的指针再传递给注册函数。
3……注册函数向系统注册,注册之后就可以用了该数据结构中的函数了。(当然必须是所在的模块必须进行了初始化)
4……当该模块被调用时,进行模块的初始化(module_init();)这时才进行函数向系统的注册。
这样就可以调用驱动中相应的函数了!
阅读(1467) | 评论(1) | 转发(1) |