2.设备驱动程序和内核之间的插口
Linux系统和设备驱动程序之间使用标准的交互插口。无论是字符设备、块设备还是网路设备的驱动程序装卸linux系统,当内核恳求它们提供服务时,都使用同样的插口。
Linux提供了一种全新的机制,就是“可安装模块”。可安装模块是可以在系统运行时动态地安装和拆卸的内核模块。借助这个机制,可以按照须要在毋须对内核重新编译联接的条件下,将可安装模块动态插入运行中的内核,成为其中一个有机组成部份,或则从内核卸载已安装的模块。设备驱动程序或与设备驱动紧密相关的部份(如文件系统)都是借助可安装模块实现的。
在应用程序界面上,借助内核提供的系统调用来实现可安装模块的动态安装和拆卸。但一般情况下,用户是借助系统提供的插入模块工具和移走模块工具来装卸可安装模块。插入模块的工作主要如下:
(1)打开要安装的模块,把它读到用户空间。这些“模块”就是经过编译但仍未联接的.o文件。
(2)必须把模块内涉及对外访问的符号(函数名或变量名)联接到内核,即把这种符号在内核映像中的地址填入该模块须要访问那些符号的指令及数据结构中。
(3)在内核创建一个module数据结构,并申请所需的系统空间。
(4)最后,把用户空间中完成了联接的模块映像放入内核空间linux vi命令,并在内核中“登记”本模块的有关数据结构(如file_operations结构),其中有指向执行相关操作函数的表针。
如前所述adobe air linux,Linux系统是一个动态的操作系统。用户按照工作中的须要,会对系统中设备重新配置装卸linux系统,如安装新的复印机、卸载旧式终端等。这样,每每Linux系统内核初启时,它都要对硬件配置进行测量,很有可能会检查到不同的化学设备,就须要不同的驱动程序。
在建立系统内核时,可以使用配置脚本将设备驱动程序包含在系统内核中。在系统启动时对这种驱动程序初始化,它们可能未找到所控制的设备,而另外的设备驱动程序可以在须要时作为内核模块放入到系统内核中。
为了适应设备驱动程序动态联接的特点,设备驱动程序在其初始化时就在系统内核中进行登记。Linux系统借助设备驱动程序的登记表作为内核与驱动程序插口的一部份,这种表中包括指向有关处理程序的表针和其它信息。