Gentoo Logo

[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


7. 配置内核

内容:

7.a. 时区

您首先需要选择您自己的时区,这样可以让系统知道它的位置在哪里。您可以在/usr/share/zoneinfo中找到您所在的时区,然后把它复制到/etc/localtime。请不要使用/usr/share/zoneinfo/Etc/GMT*下的时区,因为它们“名不副实”。例如,GMT-8事实上是GMT+8区。

代码 1.1: 设置时区信息

# ls /usr/share/zoneinfo
(假设您要用GMT)
# 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-……等等)加在gccas前。这个选项应该被关闭,即时是在交叉编译时。如果你确实需要调用交叉编译器,请定义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

(在target机器上交叉编译)
(根据实际情况修改mips64-unknown-linux-gnu-)
# make vmlinux modules modules_install CROSS_COMPILE=mips64-unknown-linux-gnu-

(当在另一个机器上编译的时候,比如x86机器,使用)
(下面的命令来编译内核并且安装模块到)
(一个特定的目录,以方便移动到目标机器里。)
# 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
(这将创建vmlinux.32――这就是你最终的内核)

当内核编译完毕,把内核镜像复制到/

注意: 在Cobalt服务器上,引导程序需要的是一个压缩了的内核镜像。复制到/boot之后记得用gzip -9来压缩一下内核镜像.

代码 3.5: 安装内核

# cp vmlinux /boot/kernel-2.6.23.14-mips

(Cobalt服务器――压缩内核镜像)
# 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

现在请从配置您的系统一章来继续您的安装。


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


打印

查看全部

更新于2009年 4月 15日

总结: Linux内核是任何一个发行版本的核心。这一章节将说明如何配置内核。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86开发人员

Tavis Ormandy
Gentoo Alpha开发人员

Jason Huebel
Gentoo AMD64开发人员

Guy Martin
Gentoo HPPA开发人员

Pieter Van den Abeele
Gentoo PPC开发人员

Joe Kallar
Gentoo SPARC开发人员

John P. Davis
编辑

Pierre-Henri Jondot
编辑

Eric Stockbridge
编辑

Rajiv Manglani
编辑

Jungmin Seo
编辑

Stoyan Zhekov
编辑

Jared Hudson
编辑

Colin Morey
编辑

Jorge Paulo
编辑

Carl Anderson
编辑

Jon Portnoy
编辑

Zack Gilburd
编辑

Jack Morgan
编辑

Benny Chuang
编辑

Erwin
编辑

Joshua Kinard
编辑

Stuart Longland
编辑

Tobias Scherbaum
编辑

Xavier Neys
编辑

Joshua Saddler
编辑

Gerald J. Normandin Jr.
审校

Donnie Berkholz
审校

Ken Nowack
审校

Lars Weiler
投稿

张乐
译者

杨珂
译者

叶宝泰
译者

杨小广
译者

vivian.ye
译者

余雷
译者

陈永骥
译者

王国辉
译者

娄东斌
译者

贾震
译者

余鈺炜
译者

陈代焱
译者

范华
译者

沈辰俊
译者

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Edurium
Copyright 2001-2010 Gentoo Foundation, Inc. Questions, Comments? Contact us.