Chinaunix首页 | 论坛 | 博客
  • 博客访问: 808823
  • 博文数量: 281
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2770
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-02 19:45
个人简介

邮箱:zhuimengcanyang@163.com 痴爱嵌入式技术的蜗牛

文章分类
文章存档

2020年(1)

2018年(1)

2017年(56)

2016年(72)

2015年(151)

分类: 嵌入式

2015-06-23 16:40:43

1. 实验目的:
建立一个干净的内核源码树,为后面学习和测试LDD的例程搭好编译环境。
前一篇讲了在安装redhat,并且升级后,发现找不到共享文件夹,甚是不爽啊。
现在安装一个ubuntu,当然这纯属折腾。如果已经有了内核源码树,就可以开始学习LDD3的例子了。
发现这几天安装linux系统上瘾了。哈哈。继续折腾吧,少年....

2. 为什么要安装源码树?
a. 什么是内核源码树?
b. 为什么要安装内核源码树?
c. 如何当前运行的内核是2.6.22, 内核树是2.6.31,那么编译出来的驱动模块可以在当前的内核(2.6.22)下运行吗?
查阅了很多资料,理解如下:
从内核树的形式上看,内核树与内核源码的目录结构形式是相同的,都是由各个层次的文件目录结构组成;各个不同的内核源码树所定义的接口肯定是不一样的。
从内核树的功能上看,内核树中含有编写或编译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

所以在我的系统里是已经有对应的内核源码树了。

3. 如何自己手动建立对应的内核源码:
改天有空再弄。





阅读(1271) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~