邮箱:zhuimengcanyang@163.com 痴爱嵌入式技术的蜗牛
分类: 嵌入式
2015-06-23 16:40:43
建立一个干净的内核源码树,为后面学习和测试LDD的例程搭好编译环境。
前一篇讲了在安装redhat,并且升级后,发现找不到共享文件夹,甚是不爽啊。
现在安装一个ubuntu,当然这纯属折腾。如果已经有了内核源码树,就可以开始学习LDD3的例子了。
发现这几天安装linux系统上瘾了。哈哈。继续折腾吧,少年....
a. 什么是内核源码树?
b. 为什么要安装内核源码树?
c. 如何当前运行的内核是2.6.22, 内核树是2.6.31,那么编译出来的驱动模块可以在当前的内核(2.6.22)下运行吗?
查阅了很多资料,理解如下:3. 如何自己手动建立对应的内核源码:
从内核树的形式上看,内核树与内核源码的目录结构形式是相同的,都是由各个层次的文件目录结构组成;各个不同的内核源码树所定义的接口肯定是不一样的。
从内核树的功能上看,内核树中含有编写或编译Kernel程序或驱动时所需要的一些内核函数库以及定义好 的一些数据结构,数据类型等等。说的通俗一点,相当于你在编译C语言的时候,要用到的库一样,这个库就是内核源码树,只不过这个树,在2.6版本中构造模块必须显式提供。当你在进行kernel编程或者是编写linux设备驱动时都需要用到这里面的一些资源,并且我们写好的驱动程序 时,也需要用到内核树来编译。
仔细阅读在《LDD3》的第二章P21,下面的一段话:
“不管内核来自哪里,想要为2.6.x内核构造模块,还必须在自己的系统中配置并构造好内核树。这一要求和先前版本的内核不同,先前的内核只要有一套内核头文件就够了。但因为2.6内核的模块要和内核源代码树中的文件连接,通过这种方式,可得到一个更加健壮的模块装载器,但也需要这些目标文件存在于内核目录树 中。这样,读者首先要准备好一个内核源代码树。”
这段话说出了2.4和2.6两种版本的驱 动模块的编写的一个不同之处。我现在使用到是ubnutu,所以下面我将以ubuntu为例来构建内核树。如果你安装到是ubuntu 10.04或者是11.04的话,默认已经安装了内核树,可以到 /lib/modules/$(uname -r)/build查看 。如果没有,就需要重新构建。
我现在的系统,输入命令:
#uname -r
2.6.31-14-generic
查看内核源码树是否存在,输入命令:
#ls /lib/modules/$(uname -r)/build
arch crypto drivers fs init Kbuild lib mm net scripts sound tools usr
block Documentation firmware include ipc kernel Makefile Module.symvers samples security source ubuntu
所以在我的系统里是已经有对应的内核源码树了。
改天有空再弄。