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.
这样就完成了,重启系统,可以加载你的新内核了!
13.安装交叉编译内核
内核模块被安装到目标机器的/lib/modules/x.y.z目录,这个在主机系统中却一般是不同的目录。这个目录依赖于你的设置,但是我们称它为$TARGETDIR.
运行如下的命令把模块安装到$TARGETDIR:
bash$ make modules_install INSTALL_MOD_PATH=$TARGETDIR
bash$
这样将会把模块放到主机中的$TARGETDIR/lib/modules/x.y.z目录中这能够放到合适的文件系统中,或者复制到目标机器中。请注意,你千万不要把这些内核模块安装到主机的根文件系统中(例如忽略了INSTALL_MOD_PATH或者指定$TARGETDUR为'/'),既然他们和你的主机内核是不兼容的,这会导致你的主机系统无法启动。
内核在/RHOME/linux/arch/arm/bot/zImage中和$HOME/linux/System.map中的内核符号连接信息是可以利用的。确切地说,怎样安装这个,在本文档的讨论之外。
保持你的System.map文件的安全非常重要,-它包含了内核的符号连接信息,这些信息在你需要调试以及回馈问题报告的时候是需要的。 |