第二章 从内核出发
获取内核源码
Linux内核官方网站:http://www.kernel.org 可以完整的压缩形式(tar创建的),也可以是增量补丁形式。 也可以使用git获取内核源代码,下面只是一个例子:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
更新分支:
git pull
安装内核源码
内核压缩有gzip和bzip两种形式
bzip解压命令:
tar xvjf linux-x.y.z.tar.bz2
GNU的zip解压命令:
tar xvzf linux-x.y.z.tar.gz
内核源码一般安装在/usr/src/linux目录下。不要把这个源码树用于开发,不要以root身份对内核进行修改。
补丁
应用增量补丁,从内核源码树开始,运行:
patch -pl < ../patch-x.y.z
编译内核
配置内核
在编译内核前,必须对其进行配置,对内核的功能进行选择和设置。 有许多工具用来简化这种配置。
1.命令行,逐一选择,耗时
make config
2.基于ncurse的图形化界面
make menuconfig
3.基于gtk+的图形工具
make gconfig
make defconfig
会基于体系结构创建一个默认的配置。 配置项被放在内核代码树根目录下的.config文件中,这个文件可以直接修改。 在配置新的代码树时,应该验证和更新配置:
make oldconfig
配置选项CONFIG_IKCONFIG_PROC把完整的压缩过的内核配置文件放在/proc/config.gz下:
zcat /proc/config.gz > .config
make oldconfig
配置好后,进行编译:
make
如果要加快速度的话,可以使用
make -jn
n是作业数,具体例子
make -j32 >/dev/null
内核信息输出
把垃圾信息重定向
make > .. /detritus
或者
make > /dev/null
安装新内核
内核编译好后需要进行安装,具体安装和体系结构即启动引导工具有关。 模块的安装是自动的,独立于体系结构的。
make modules_install
内核开发
内核开发与用户空间内应用程序的开发有很大区别,需要特别注意,
- 无libc库,无标准头文件
- GNU C
- 没有内存保护机制
- 难以支持浮点数
- 容积小而固定的栈
- 同步和并发
- 可移植
|