一、绪论:
Linux以其开源的开发方式赢得了越来越多人的关注,而作为操作系统的核心的内核尤为重要。
在linux的开发中采用了集市模型(bazaar,与cathedral--教堂模型对应)的版本控制方式,即Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(奇数)。下载内核版本请访问http://www.kernel.org。
Linux中定制内核为linux系统提供了更好的处理方式,可以根据用户自己的系统度身定制一个更高效,更稳定的内核。Linux下内核的编译模式有如下二种:直接加载到内核中(build-in)方式和动态加载到内核中(module)。前一种方式在内核启动时就可以支持相应部分的功能,这样的优点是方便、速度快,机器一启动,就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管是否需要这部分功能,它都存在(例如:Windows)。后一种方式则可以动态的加载和卸载,在需要模块进行处理时加载内核模块,使用完毕后则进行卸载,这样不会使得内核过分庞大,缺点是必需通过命令来加载。
二、本文的写作内容
本篇文章涉及的内容:
1. linux- 2.6.11 内核的编译过程
本篇文章不包含的内容:
1. 内核编译中模块功能选项说明
2. Linux内核编译中有关编译错误
三、文章正文
1. 下载linux 2.6.11 版本,在ftp://ftp.kernel.org/pub/中找到相关版本的压缩包 linux-2.6.11.tar.bz2
2. 将压缩包放到/usr/src/redhat/SOURCES/下,解压缩包:
$tar -xvf linux- 2.6.11 .tar.bz2
3. 在/usr/src/redhat/SOURCES/下得到解压后的文件linux- 2.6.11 ,在linux-2.6.11当前目录下进行编译,在进行以下几步之前,先要对linux- 2.6.11 中的一个头文件进行修改。
i 2c .h中对58,197行进行修改,修改内容如下:
extern int i 2c _transfer(struct i 2c _adapter *adap, struct i 2c _msg msg[],int num);
修改为:
extern int i 2c _transfer(struct i 2c _adapter *adap, struct i 2c _msg *msg,int num);
4. 清除当前目录下编译设置:
$make mrproper
该命令确保目录下没有相关的文件和配置,如果已经编译过linux内核,建议使用该命令
5. 配置内核模块的功能,有几种方式可以进行界面选择:
$make config(文本的配置方式,需要用户自己写配置文件)
$make menuconfig(文本选单的配置方式,在有字符终端下才能使用)
$make xconfig(图形窗口模式的配置方式,必须支持Xwindow下才能使用)
$make oldconfig(文本配置方式,在原内核配置的基础修改时使用)
这里推荐make xconfig方式,图形窗口的配置比较直观,对应每一项相应的配置时,有三种选择:
Y--该模块编译进内核
N--该模块不编译进内核
M--该模块编译成可加载内核模块
内核编译中各项模块功能的选择请参考其它文章(参见参考文献)。
6. 内核模块文件连接 :
$make
在进行该步时如果出现错误,而且这些错误支持的模块省略了对编译没有影响,可以去掉,在进行了修改之后要重新进行make。
7. 内核模块的编译 :
$make modules
8. 内核模块的安装 :
$make modules_install
9. 安装环境的安装 :
$make install
三、参考文献
文章名 |
作者 |
来源 |
Linux内核编译 |
b_2_bomber 6 |
http://www.linuxbbs.cn/TopicOther.asp?t=5&BoardID=71&id=424 |
Linux操作系统的内核编译内幕详解 |
|
http://school.21tx.com |
Linux内核完全剖析 |
赵炯 |
机械工业出版社 |
The Linux Installation HOWTO |
Eric Steven Raymond |
http://www.kernel.org |