一:首先查看你的os(操作系统)版本:
root@pp:~# uname -r
2.6.38-13-generic /* 这是我显示的结果 */
二:如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录。进入这个目录,
从这里,可以看到两个版本的linux,一个是2.6.38-8,一个是2.6.38-13.还有就是linux-source-2.6.38文件夹以及一个bz2格式的压缩文件,这就是我们要最终的到的源码。但是ubuntu一般是不安装源码的。源码的获取方法为:
1:查看可以下载的源码包:shell命令为:sudo apt-cache search linux-source。如果网络和更新文件配置正常,会在终端中列举出可以下载的源码版本。
2:下载源码包到usr/src目录:命令为:sudo apt-get install linux-source 2.6.38 下载完成后,会在上面的目录中出现.bz2格式的压缩包。
3:解压到当前目录。shell命令为:tar jxvf linux-source-2.6.38.tar.bz2 解压后回生成新的目录linux-source-2.6.38。
4:运行 ls命令,会看到本节开头的画面。
三:构建内核源代码树
进入到linux-source-2.6.38这个文件夹,运行make oldconfig命令(或者menuconfig,xconfig等等),这里跟内核移植时构建内核的步骤差不多。保留系统配置,然后执行make命令。时间会比较长。然后执行make bzImage。成功运行后,会产生vmlinux文件,可以用ls -l命令查看其属性。
接着就是内核源码树的生成阶段了,依次运行命令:make modules; make modules_install命令,执行结束后,会在/lib/modules下生成新的目录/lib/modules/2.6.38/文件夹。如下图所示。编译内核时,会用到里面的build文件夹。这里面多了一个2.6.28,是因为我的ok6410开发板上装的是这个版本,我又把它的内核源代码树给编译了一遍。使用时要注意内核的版本要和系统的版本对应上,不然加载内核时会出现错误。
四:实例文件:至此,内核源码树编译完毕,可以编写驱动程序了,这里,我以OREILLY的LINUX设备驱动程序这本树中第20页的“hello world”演示:编写源代码文件和makefile,如下所示:
注意makefile里面的内核编译路径。运行make命令,会出现下图所示的编译过程。然后运行insmod和rmmod命令进行挂载和卸载。运行结果在文本控制台界面显示,可以按住ctrl+alt+F1进入文本控制台查看,或者在图形界面运行lsmod命令查看,格式为:lsmod |grep hello。或者在日志文件中进行查看。
五:注意事项:
要注意版本一致,不然会出先错误。
要注意makefile的格式,别忘了tab键