现在的位置: 首页 > 综合 > 正文

ubunt 编译内核树

2017年10月03日 ⁄ 综合 ⁄ 共 1458字 ⁄ 字号 评论关闭

很多书上编写内核时,需要有一个KERNELDIR宏指向内核代码的编译路径,经典的写法为:KERNELDIR ?=/lib/moudles/$(shell uname -r)/build。可是我们在ubuntu的文件系统中,却找不到这个路径。这是因为一般的ubuntu没有安装内核源代码树。很多人在make的时候,老是出错,这个原因占有很大的比例。下面是我在构建内核源码树这个问题上的一点个人总结:

    一:首先查看你的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键

抱歉!评论已关闭.