一旦你选择了一个站点,你需要寻找内核的源代码。他们被存放在目录:/pub/linux/kernel.每个内核随着一些文件被发行:
* linux-x.y.z.tar.gz
* linux-x.y.z.tar.bz2
* patch-x.y.z.gz
* patch-x.y.z.bz2
你将要下载linux-x.y.z.tar.gz文件到你的主目录。并且,你应该查找匹配你前面获得的补丁的版本。这些文件比较大(14MB或者更多),所以可能会花费一些时间。
6.解压ARM内核源代码
使用下面的命令解压你前面下载的源代码:
bash$ cd $HOME
bash$ tar zxvf linux-x.y.z.tar.gz
这样将会在你的home目录下面建立一个叫做linux或者linux-x.y.z的目录,进入那个新建立的母爱,然后应用补丁,如下:
bash$ cd linux-2.4.26
bash$ zcat ../patch-2.4.26-vrs1.gz | patch -p1
这些补丁具层次结构,所以你需要用正确的次序来应用他们。一般来说具有更多扩展名的补丁依赖于较少扩展名的补丁,例如,应用的时候,-rmk补丁可能会在-rmk-np补丁之前。
然后就可以准备配置内核源代码树了。
7.配置内核编译环境
一般地,内核编译系统为本地的体系结构编译内核。这在交叉编译的时候却是不适合的,所以你将需要修改顶级内核Makefile的两行。检查顶级Makefile,找到ARCH和CROSS_COMPILE的定义。在2.4.x内核中,它们看起来是这样的:
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
[...]
CROSS_COMPILE =
and on 2.6.x kernels:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
Edit these two lines to read:
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/bin/arm-linux-
把/usr/local/bin/arm-linux-替换成你的ARM Linux工具链的路径。
这样就完成了顶级内核makefile的配置。下一步就是配置内核编译选项,来选择你的平台需要的驱动。
在进行之前,你可能需要阅读linux/README和linux/Documentation/arm/README。所有这些文件提供了更多有用的信息,这些信息都是和你的版本号的内核相关的。
8.配置内核源代码
许多的'make'目标,这些目标允许为你编译源代码的特定的机器选择一些默认的选项。在2.6内核的版本中,这个就更简单了。
2.4内核的配置
对于2.4内核,使用_config格式,例如:
* a5k_config
* ebsa110_config
* netwinder_config
* rpc_config
* assabet_config
You should select one of these as the "basic" configuration as follows, and run make oldconfig immediately afterwards:
bash$ make netwinder_config
bash$ make oldconfig
The oldconfig step will prompt you for any new configuration options which may have been added since the default machine configuration file was submitted. It is normally safe to say 'N' to these new options.
Note: If you want to change the configuration via make xxx_config, please remove the file linux/.config immediately prior to executing this command.
2.6内核的配置
对于2.6的内核,过程很简单。使用_defconfig来选择机器,例如:
bash$ make netwinder_defconfig
在这种情况下,不需要指定独立的oldconfig步骤。
9.编译内核源代码:
如果你仅仅为了其他的一些程序安装内核源代码,那么你已经完成了。如果你想要编译一个新的内核,那么键入如下命令:
bash$ make clean
bash$ make dep
bash$ make zImage
bash$ make modules
最后两步命令将要实际编译内核以及内核的模块。
注意:对于2.6内核来说,make dep的步骤实际是不需要的。
10.安装内核
当内核被成功的编译完了之后,你应该得到内核的镜像了:arch/arm/boot/zImage.你下一步要做什么,依赖于你是否进行交叉编译。
如果你进行交叉编译,那么进入到"安装交叉编译内核"这一节。
如果你编译是本地的编译(例如在target上面为了target进行),那么继续。
11.安装本地内核
既然你打算更新系统文件了,那么你需要成为root用户,如下:
bash$ su
Password:
bash#
强烈建议为你当前的内核和模块保存一个备份。你需要做得是和机器独立的。注意,保存一个较好的先前的版本是很重要的,你可能需要回到原来的版本下工作。
下面是一个例子(对于2.4.3-rmk1内核):
bash# cd /lib/modules
bash# mv 2.4.3-rmk1 2.4.3-rmk1.old
bash# cd /boot
bash# mv vmlinuz vmlinuz.bak
bash# mv System.map System.map.bak
bash#
现在,安装新的内核:
bash# cd $HOME/linux
bash# make modules_install
bash#
这样将会拷贝模块到/lib/modules/x.y.z目录。下一步,安装内核镜像(一般是在/boot中):
bash# cd /boot
bash# cat $HOME/linux/arch/arm/boot/zImage >vmlinuz
bash# cp $HOME/linux/System.map .
bash#
注意,这里拷贝新内核镜像的命令是cat而不是cp.Unix一般不会给包含0数据的文件扇区分配文件系统的空间,而是在文件中创建"holes".有一些内核loader不知道文件有holes在其中,所以使用cat保证了这不会发生。
12.运行loadmap
Loadmap是Acorn机器上Linuxloader的一部分,和EBSA285机器使用EBSA235BIOS(有IDE硬盘)一样。对于其他机器,参考你机器上面的文档。
编辑loader配置文件/etc/boot.conf,这样你可以利用vmlinuz.bak或者vmlinuz镜像来启动。如果你把vmlinuz内核放在第一个位置,那么这就将成为内核loader使用的默认内核。
更多的信息,可以通过man boot.conf来找到。
bash# loadmap -v
bash#
更新maps.
这样就完成了,重启系统,可以加载你的新内核了!