1、模块化设计
微内核和宏内核:操作系统内核的两种设计架构
(1)宏内核(Monolithic kernel):又称单内核,就是将各个模块整合在一起,例如:进程管理、线程管理、内存管理等等都运行在内核态,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,具备直接操作硬件的能力。
宏内核优点:具有非常高的执行效率和良好的操作系统资源管理能力。
宏内核缺点:由于大部分功能都在内核中实现,内核的代码量非常大,可靠性和安全性也存在问题。
(2)微内核(Microkernel):操作系统模块化,只有一个核心模块(微内核)运行在内核态,其它模块作为普通进程运行。
微内核优点:避免操作系统内核越来越大的问题,减小内核的复杂性,提高了内核的安全性,使内核更加稳定可靠。
微内核缺点:使用进程间通信等方式来实现其它功能,这些方式会降低系统的执行效率。
区别:宏内核将大部分系统功能直接实现在内核中,微内核只实现最基本的功能,其它功能通 过进程间通信来实现。Linux系统是结合了微内核与宏内核实现。
(3)静态模块化:在编译时实现可裁剪,但是想要功能可裁剪,需要重新编译。
(4)动态模块化:zImage不需要重新编译烧录,甚至不需要关机重启来实现模块的安装和卸载。
2 、Linux设备驱动分类
可分为字符设备驱动、块设备驱动、网络设备驱动三种。
(1)字符设备驱动:软件操作设备驱动时是以字节为单位进行的,如LED、LCD、串口等。
(2)块设备驱动:软件操作时是以块(多个字节)单位,常见的块设备驱动一般都是存储类设备,如硬盘、NandFlash等。
(3)网络设备驱动:专门为网卡设计的驱动模型。主要是实现API中与socket相关的函数。
3、驱动程序的安全性要求
常见驱动安全性问题如下:
(1)未初始化指针
(2)恶意用户程序
(3)缓冲区溢出
(4)竞争状态
4、Linux驱动常用的模块操作命令
(1)lsmod(list module),打印内核的模块列表
(2)insmod(insert module),向内核安装一个模块,如:insmod xxx.ko
(3)modinfo(module information),打印内核某个模块的信息,如:modinfo xxx.ko
(4)rmmod(remove module),删除某个模块,如:rmmod xxx
5、模块的版本信息
(1)insmod时模块的vermagic必须与内核的vermagic相同,否则会安装失败,报错信息:insmod:ERROR:could not insert module xxx.ko : invalid format
(2)模块的版本信息是为了保证模块与内核的兼容性。
(3)保证vermagic一致,编译模块时用到的内核源码需要与模块安装所运行的内核的源码一致。