linux驱动编程为什么要编译内核源码树,为什么内核版本跟内核源码树还有不兼容的情况。
第一点,设备驱动程序是内核的一部分,在编写驱动的时候,必定会用到内核的头文件和库。在linux发行版里可能并没有这些东西。
第二个,就算linux发行版里有这些东西,然而不同的内核版本之间,那些接口和调用可能会有比较大的差异,因此必须要保证你的代码和某个特定的内核对应,这样编译出来的模块才可以(也是只能)在运行这个内核版本的Linux系统中加载,否则一个很简单的异常就会导致内核崩溃,或者你的代码根本无法编译通过(接口名变了)。
如果你只是想为内核编译第三方的模块,那么,你不需要下载内核源码。安装内核头文件包或许会更适合你。但是做嵌入式开发或者驱动开发,一个基本的Linux设备驱动开发环境由宿主机和目标机组成,宿主机就是用来做驱动开发工作的主机,目标机就是用来运行和测试设备驱动的主机。这就需要下载内核版本然后编译生成源码树(构造内核源码树,其实就是的过程),以准备好驱动编译所需要的头文件和库(PC上编译的时候,内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块)。