在GNU/Linux系统上的驱动(指内核态驱动)是以内核模块(扩展名.ko)的形式存在,系统(udev)在检测到硬件后通过modprobe动态进行内核模块的安装和卸载。由于Linux内核的ABI并不是完全稳定的,所以通常不能只分发内核模块的方式直接发布驱动(因为这样不能保证兼容任何版本的Linux内核)。系统几乎所有开源驱动都是在编译Linux内核(linux-image)的时候一起编译出来(linux-modules),发布的时候也是捆绑发布的(但是你可以自己删减一些模块)。
目前的一种解决方法是通过dkms进行动态编译,发布驱动的时候自带一些源代码,然后针对每一个内核现场编译出内核模块来(因此需要在系统里安装Linux的头文件headers),dkms通常在内核版本升级的时候自动运行,由于Linux的API是比较稳定的,所以这种方法是比较普遍。(如nvidia闭源驱动,就是采用的dkms)


中文 

