操作系统中的内核分为单体内核(Monolithic Kernel)和微内核(Micro Kernel)两种。单体内核是一个相对较大的程序,而微内核是一个较小的程序。操作系统的大部分功能都运行在用户空间中。Linux是一个单体内核,分为5个子系统,整个内核在一个地址空间。这样增加一个设备就比较麻烦。由于设备需要在内核空间运行,因此需要重新编译内核。Linux通过使用内核可以根据需要将各部分放入内核。模块可以不编译到内核中。在系统中增加一个模块时,不需要重新编译整个内核,只需要编译模块,再将其插入到内核中。
通过编写设备驱动程序,可以给操作系统的内核提供唯一的接口用以访问设备,这样内核就可以不必知道硬件设备内部的复杂结构,只需调用驱动程序提供的简单接口就可以访问设备了。
为了便于驱动程序的开发和应用,POSIX标准规定了一整套标准的设备接口,把设备驱动程序与操作系统的I/O子系统隔离开来。操作系统(内核)如果需要访问设备,它调用I/O子系统提供的标准接口去访问设备驱动程序,而I/O子系统在完成这个任务时,无论是什么设备,都使用同一种调用方式进行操作。
Linux设备驱动属于内核的一部分。内核可以通过几种不同的方式来调用设备驱动程序。
●配置内核在引导时调用驱动程序,检查并初始化设备。
●I/O子系统调用驱动程序读或写数据。(www.xing528.com)
●用户可以发出控制请求,像打开或关闭设备一样。
●设备在I/O结束,或其他状态改变时产生中断。
内核模块是可以在系统运行时动态地安装和拆卸的内核功能单元。利用该机制可以根据需要在不必对内核重新编译链接的条件下,将内核模块动态插入运行中的内核,成为内核的一个有机组成部分,也可以从内核卸载已安装的模块。
在驱动程序的使用上,应用程序通过操作系统的接口访问驱动程序。一般地,应用程序运行在用户空间,操作系统运行在内核空间。但当应用程序访问驱动程序时,应用程序调用相应的接口,由此实现用户空间和内核空间的交互。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。