目的
编写Linux驱动,必须要简历Linux内核源码树,建立源码树有助于我们更好的学习Linux,但是针对本机系统开发驱动是不需要创建源码树的。因为在/usr/src/目录底下会有本系统对应版本的头文件。本人目录下如图。其中linux-source-3.2.0.tar.bz2软连接指向对应的源码包(这是本人自己下载的)。好吧言归正传,下面分享一下如何构建源码树过程。
源码树创建过程
- 首先也是要执行uname -r查看系统内核版本~~当然了显示内容和上图中的文件夹名字相同的:3.8.0-29-generic
- 从终端查看可用源码包~~$apt-cache search linux-source 显示内容如图所示
分别显示了3.2.0源码和补丁(此处我的源码树早已创建好,现在只是叙述这个过程,记录下自己学习的点滴~~)。
- 下载源码,此处执行sudo apt-get install linux-source-3.2.0结果如下所示~~
由于我已经下载安装好了,所以此处我强制终止了此过程
- 解压源码包~~下载完成之后,我们会在/usr/src/目录底下看到我们的下载压缩包。执行解压命令解压包sudo tar -jxvf linux-source-3.2.0.tar.bz2
- 配置内核~~进入解压后目录,在编译源码之前我们还需要.config配置文件。通常的做法有:执行make oldconfig这样做就是执行了缺省配置(默认配置),这样可能导致内核不支持新功能,其实只要内核不安装这都是无所谓的。我的做法是拷贝系统安装时的配置文件到本目录下然后执行编译,这样做配置的内核和当前运行的内核差别最小。$sudo cp ../*generic/.config ./执行拷贝操作。
- 然后执行make,如果您的机器配置还不错那么可以尝试make -j4 开启多线程编译来提高速度。~~漫长的等待,然后执行make bzImage,结束之后在当前目录底下生成了vmlinux文件。。。其实这一步也不是必须的,因为我们的目的是构建内核源码树不是编译内核。~~这算是附加收获吧。
- 这一步才是我们必须要做的:~~ $sudo make modules 编译模块然后~~$sudo make modules_install进行安装,其实这也是一个漫长的等待,等待过后我们会在/lib/modules/目录底下看到我们的成果~~文件夹3.2.51.
- 想要编译针对3.2.0内核的驱动我们就会需要用到该目录下的build路径了。下篇便是编写简单的驱动来测试源码树
总结
源码树的构建是很久以前构建过的,以上的方法是通常的构建方式,其实我们有源码包,解压之后进入源码包或者拷贝.config或者执行oldconfig然后进行执行编译模块、安装模块取得的效果和上述方法是一样的。只是为了记录自己学习中的点点滴滴,请多多指教~~