[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
7. 配置内核
内容:
7.a. 时区
您首先需要选择您自己的时区,这样可以让系统知道它的位置在哪里。您可以在/usr/share/zoneinfo中找到您所在的时区,然后把它复制到/etc/localtime。请不要使用/usr/share/zoneinfo/Etc/GMT*下的时区,因为它们“名不副实”。例如,GMT-8事实上是GMT+8区。
代码 1.1: 设置时区信息 |
# ls /usr/share/zoneinfo
# cp /usr/share/zoneinfo/GMT /etc/localtime
|
7.b. 安装源码
选择内核
Linux内核是所有发行版的核心。它位于用户程序和系统硬件之间。Gentoo提供给我们几个可选的内核源码。完整的清单参见Gentoo内核指南。
基于MIPS的系统只能选择一个内核源代码mips-sources。这个补丁集和其他架构的补丁集是不同的,因为它有很多针对MIPS架构的补丁。
代码 2.1: 安装内核源码…… |
# emerge mips-sources
|
重要:
在Origin 200/2000、Indigo2 Impact (R10000)、Octane/Octane2和O2上,需要一个64位内核来启动系统。对于这些机器,你应该emerge kgcc64来创建一个交叉编译器来编译64位内核。
|
代码 2.2: 安装kgcc64…… |
# emerge kgcc64
|
当您查看/usr/src时,您将会看到一个叫做linux的符号链接指向您安装的内核源码。在我们这个例子中,安装的源码指向mips-sources-2.6.23.14-mips。您的版本可能有所不同,所以请你记住这一点。
代码 2.3: 查看内核源码符号链接 |
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.23.14-mips
|
现在是时候配置和编译你的内核代码了。
7.c. 内核编译与安装
介绍
前面,我们介绍过怎样手工配置内核源代码。但是因为我们支持的系统的数量太多,手工配置这里就不太现实了。本节向您展示了多种内核配置方法。
使用内核代码里的示例配置
很多受支持的系统都在内核源代码里有一个隐藏的示例.config。不过不是所有的系统都有。对于有的系统来说,可以使用下面表格里的命令来配置。
系统 |
配置命令 |
Cobalt服务器 |
make cobalt_defconfig |
Indy, Indigo2 (R4k), Challenge S |
make ip22_defconfig |
Origin 200/2000 |
make ip27_defconfig |
Indigo2 Impact (R10k) |
make ip28_defconfig
|
O2 |
make ip32_defconfig |
使用来自安装媒介的正在运行的内核的配置
所有的Gentoo安装镜像都提供一个内核配置文件,/proc/config.gz。很多情况下都可以利用这个配置文件。不过最好还是你的内核源代码和你正在运行的内核的源代码相差不多。要解开它,只需要像下面那样用zcat命令就可以。
代码 3.1: 从/proc/config.gz解出.config |
# zcat /proc/config.gz > .config
|
重要:
这个内核配置是netboot镜像用的。也就是它需要就近找到一个根文件系统,要么是initramfs里的一个目录,要么是一个initrd回环设备。所以当你运行make menuconfig时,不要忘记进到General Setup里禁用initramfs的选项。
|
硬件兼容性数据库
为了帮助用户找到可以用的设定,有人建立了一个硬件兼容性数据库。这个数据库列出了很多不同MIPS设备的支持,而且允许用户贡献他们知道可以用的内核配置。这个站点的地址是http://stuartl.longlandclan.hopto.org/gentoo/mips。
如果你觉得这个服务有用,欢迎你贡献你的笔记和.config文件,以使别人可以从你的经验中受益。不过要注意的是,从这个站点下载的任何配置文件都不能保证一定可用。
根据你的需要调整配置
当你找到一个配置之后,下载到你的内核源代码目录里,重命名为.config。在那个目录里,运行make oldconfig来更新配置文件,在编译开始前你还能定制这个配置文件。
代码 3.2: 编译内核 |
# cd /usr/src/linux
# cp /path/to/example-config .config
# make oldconfig
# make menuconfig
|
重要:
在Kernel Hacking部分,有一个选项叫“你正在使用交叉编译器么?”这个会告诉内核Makefile在编译内核时把“mips-linux-”(或者mipsel-linux-……等等)加在gcc和as前。这个选项应该被关闭,即时是在交叉编译时。如果你确实需要调用交叉编译器,请定义CROSS_COMPILE变量就像下面一节所演示的。
|
重要:
Octane系统上JFS和ALSA有一个已知问题,ALSA不能工作。鉴于JFS在MIPS上只是试验性质,建议目前不要使用JFS。
|
编译与安装
既然现在您的内核已经配置成功了,那么就是时候编译并且安装它了。退出配置界面并且开启编译进程:
注意:
在64位机器上,你需要指定CROSS_COMPILE=mips64-unknown-linux-gnu-(或者mips64el-...如果这是个little endian系统)来使用64位编译器。
|
代码 3.3: 编译内核 |
# make vmlinux modules modules_install
# make vmlinux modules modules_install CROSS_COMPILE=mips64-unknown-linux-gnu-
# make vmlinux modules CROSS_COMPILE=mips64-unknown-linux-gnu-
# make modules_install INSTALL_MOD_PATH=/somewhere
|
重要:
当为Indy、Indigo2 (R4k)、Challenge S和O2编译64位内核时,请使用vmlinux.32目标,而不要用vmlinux。否则,你的系统将不能启动。这样做因为PROM不支持ELF64格式。
|
代码 3.4: 使用vmlinux.32目标 |
# make vmlinux.32
|
当内核编译完毕,把内核镜像复制到/.
注意:
在Cobalt服务器上,引导程序需要的是一个压缩了的内核镜像。复制到/boot之后记得用gzip -9来压缩一下内核镜像.
|
代码 3.5: 安装内核 |
# cp vmlinux /boot/kernel-2.6.23.14-mips
# gzip -9v /boot/kernel-2.6.23.14-mips
|
7.d. 内核模块
配置模块
您应该在/etc/modules.autoload.d/kernel-2.6中列出您需要自动加载的模块。如果您愿意,您也可以加上模块的选项。
要查看所有可用的模块,运行如下的find命令。不要忘记把“<kernel version>”替换成你刚编译好的内核版本:
代码 4.1: 查看所有可用的模块 |
# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less
|
例如,要自动加载3c59x.ko模块,编辑kernel-2.6文件然后写入模块的名字。
代码 4.2: 编辑/etc/modules.autoload.d/kernel-2.6 |
# nano -w /etc/modules.autoload.d/kernel-2.6
|
代码 4.3: /etc/modules.autoload.d/kernel-2.6 |
3c59x
|
现在请从配置您的系统一章来继续您的安装。
[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
本文档的内容遵循知识共享-署名-相同方式共享许可协议
|