7. 配置您的内核
7.a. 时区
您首先需要选择您所在的时区以便系统知道它自己身在何处. 从 /usr/share/zoneinfo 中找到您的时区, 然后用 ln 作一个符号链接到 /etc/localtime:
代码清单 1: 设定时区信息 |
# ls /usr/share/zoneinfo (假设您打算用 GMT 时间) # ln -sf /usr/share/zoneinfo/GMT /etc/localtime |
7.b. 安装源码
选择一个内核
所有发行版 (distributions) 的核心便是 Linux 内核. 它是处于用户程序和系统硬件直接的一层 (layer). Gentoo 提供了数个内核源码以供选择. 可用内核列表及其详细描述请参看 Gentoo 内核指引.
对于 x86 的系统, 我们有 vanilla-sources (linux 开发者们开发的默认内核源码), gentoo-sources (打过性能增强补丁包的内核源码), gentoo-dev-sources (打过性能增强补丁包的 2.6 内核), gs-sources (针对服务器应用打过补丁包的内核), development-sources (普通的 2.6 内核), ...
如果您进行的是无网络安装, 您的选择便局限于 CD 中所提供的内核. 2004.2 版本中提供了:
- gentoo-sources
- vanilla-sources
- gentoo-dev-source
- development-sources
选择一个内核源码并用 emerge 安装它:
代码清单 2: 安装内核源码 |
# emerge gentoo-sources |
这时看看 /usr/src 目录, 您应该能见到一个名为 linux 的符号链接指向您的内核源码:
代码清单 3: 查看内核源码的符号链接 |
# ls -l /usr/src/linux lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.4.26-gentoo-r6 |
如果不是这样 (换句话说, 该符号链接指向了另一个内核源码), 请先将其修正再继续后面的步骤:
代码清单 4: 修改内核源码的符号链接 |
# rm /usr/src/linux # cd /usr/src # ln -s linux-2.4.26-gentoo-r6 linux |
下面开始编译您的内核源码. 您可以使用 genkernel 来自动帮您完成这一工作, 它会编译一个和 LiveCD 所用的一样的通用型 (generic) 内核. 不过我们首先要介绍 "手动" 配置的方法, 因为这是优化您系统环境的最佳路径.
您要乐意手动配置内核, 请阅读默认: 手动配置. 您要想用 genkernel, 则请看替代: 使用 genkennel.
7.c. 默认: 手动配置
简介
手动配置内核通常被视为每个 Linux 用户最难过的一关. 事实非也 (Nothing is less true) -- 在配置过几个内核之后, 您恐怕连它难在哪儿都忘了 ;)
不过呢, 有一件事是确切的: 在您开始配置内核之前, 您必需清楚地了解自己的系统. 许多信息可以从 /proc/pci 中查看到 (如果有 lspci 的话, 也可以通过它来查看). 您还可以用 lsmod 来查看 LiveCD 都使用了那些模块 (这会是一个不错的提示以助您决定启用那些内核选项).
现在, 去到您的内核源码所在目录, 并运行 make menuconfig. 这将启动基于 ncurses (ncurses-based) 的配置界面:
代码清单 5: 调用 menuconfig |
# cd /usr/src/linux # make menuconfig |
您将看到几部分配置内容. 我们会首先列出一些必需启用的选项 (不启用的话, Gentoo 可能无法工作或工作异常).
启用必要的选项 (Activating Required Options)
首先, 启用试验性的代码/驱动. 您需要这个, 否则一些很重要的代码/驱动都不会出现 (Cure: 即在后面的配置选项中找不到它们):
代码清单 6: 选上试验性 (experimental) 的代码/驱动 |
Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers |
确保您的内核是针对正确的处理器类型 (processor family) 进行编译的: (Cure: intel 的 cpu 可别编了个给 amd cpu 用的内核)
代码清单 7: 选上合适的处理器类型 |
Processor type and features ---> (根据您的系统而定) (Athlon/Duron/K7) Processor family |
下面到 File System (文件系统) 部分, 选择必要的文件系统支持. 请不要将它们编译成 模块形式, 否则您的 Gentoo 系统将无法挂载您的分区. 另外还要选上 Virtual Memory (虚拟内存), /proc file system (进程文件系统), /dev file system (设备文件系统) + Automatically mount at boot (启动时自动挂载文件系统):
代码清单 8: 选择必要的文件系统 |
(2.4.x 内核) File systems ---> [*] Virtual memory file system support (former shm fs) [*] /proc file system support [*] /dev file system support (EXPERIMENTAL) [*] Automatically mount at boot [ ] /dev/pts file system for Unix98 PTYs (2.6.x 内核) File systems ---> Pseudo Filesystems ---> [*] /proc file system support [*] /dev file system support (OBSOLETE) [*] Automatically mount at boot [*] Virtual memory file system support (former shm fs) (按您系统所需选取下例选项) <*> Reiserfs support <*> Ext3 journalling file system support <*> JFS filesystem support <*> Second extended fs support <*> XFS filesystem support |
如果您的 BIOS 无法处理大容量硬盘, and you jumpered the harddrive to report a limited size, 您需要启用下面这一选项以便您能够访问整个硬盘:
代码清单 9: 选上 autogeometry resizing 支持 |
(仅对 2.4.x 内核) ATA/IDE/MFM/RLL support ---> IDE, ATA and ATAPI Block devices ---> <*> Include IDE/ATA-2 DISK support [ ] Use multi-mode by default [*] Auto-Geometry Resizing support |
如果您用 PPPoE 来连接因特网, 或是拨号上网, 则需要在内核中启用如下选项:
代码清单 10: 选上必要的 PPPoE 驱动 |
(对于 2.4.x 内核) Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports (对于 2.6.x 内核) Device Drivers ---> Networking support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports |
另外有俩压缩 (compression) 选项以及 PPP over Ethernet 选项选上无妨, 却也不是必需的. 它们仅在配置了内核 模式的 PPPoE (kernel mode PPPoE) 之后会被 rp-pppoe 用到.
如果您需要 PPPoE 支持, 请记得同时在内核中选上对您的网卡的支持.
如果您有一个支持超线程 (HyperThreading (tm)) 的 Intel 的 CPU, 或者您的机器上有多个 CPU, 则需要选上 "Symmetric multi-processing support":
代码清单 11: 启用 SMP 支持 |
Processor type and features ---> [*] Symmetric multi-processing support |
内核配置完毕之后, 请继续编译安装.
编译安装
您的内核经已配置完毕, 下面我们要做的是编译和安装它. 退出配置界面并执行 make dep && make bzImage modules modules_install:
代码清单 12: 编译内核 |
(对于 2.4 内核) # make dep && make bzImage modules modules_install (对于 2.6 内核) # make && make modules_install |
编译完成之后, 将内核映象文件拷贝到 /boot 下. 从这里开始, 我们假设您装的是 2.4.26 版本的 gentoo-sources. 给您的内核映象文件起一个您觉得合适的名字并记住, 因为随后配置启动器 (bootloader) 时会用到它.
代码清单 13: 安装内核 |
# cp arch/i386/boot/bzImage /boot/kernel-2.4.26-gentoo-r6 # cp System.map /boot/System.map-2.4.26-gentoo-r6 |
一些情况下, 把内核配置拷到 /boot 下也是颇为明智的:) (Cure: 总之找个地方保存好当前的内核配置, 下次再编译或想调整内核配置, 你就可以以它为基础进行, 而不必一切从头开始)
代码清单 14: 备份您的内核配置 |
# cp .config /boot/config-2.4.26-gentoo-r6 |
下面继续安装各个 (separate) 内核模块.
7.d. 替代: 使用 genkennel
如果您正在阅读这一部分, 说明您决定选择我们提供的 genkernel 脚本来为您配置内核.
目前您的内核源码树已经安装完毕, 现在您可以用我们的 genkernel 来为您自动地编译内核. genkernel 会创建一个和 LiveCD 所用的配置几乎一样的 (nearly identically) 内核. 这意味着当您用 genkernel 来编译内核后, 您的系统在启动时会以我们的 LiveCD 那样的方式进行硬件检测和识别. 由于 genkernel 不需要您进行任何手动配置内核的动作, 所以这对于不乐意编译自己内核的用户来说是一个理想的方法.
下面我们看看怎样使用 genkernel, 首先 emerge 它:
代码清单 15: 安装 genkernel |
# emerge genkernel |
现在, 运行 genkernel all 以编译内核. 不过请留意一点, 由于 genkernel 会编译一个几乎支持所有硬件的内核, 所以这一过程会需要相当多的时间!
需要指出的是, 如果您的启动分区用的不是 ext2 或 ext3 文件系统, 那么您就需要用 genkernel --menuconfig all 来手动地在内核中 (编译进内核而非编译成 模块) 加入对所用文件系统的选择.
代码清单 16: 运行 genkernel |
# genkernel all |
genkernel 完毕后, 将创建一个内核, 一堆的模块, 以及一个 initial root disk (Cure: 从 Gentoo 论坛上看到的信息让我觉得这里似乎应该是 initial RAM disk, 要了解 initrd, 请看 "Initial RAM Disk HOWTO") (initrd). 我们随后文档中配置启动器时将用到内核与 initrd. 请记下内核与 initrd 的名字, 因为在您写启动器的配置文件时就得用到. initrd 会在系统启动后立即开始硬件检测工作 (正如 LiveCD 那样).
代码清单 17: 查看已创建的内核映象与 initrd |
# ls /boot/kernel* /boot/initrd* |
下面让我们再做一步以让系统和 LiveCD 更像 -- 安装 hotplug. initrd 是用来检测启动系统所必需的硬件的, 而 hotplug 则用以检测此外的一切. 我们输入下面的命令来 emerge 并启用 hotplug:
代码清单 18: emerge 并启用 hotplug |
# emerge hotplug # rc-update add hotplug default |
7.e. 安装各个 (separate) 内核模块
安装额外的模块
一般情况下, 您需要为您系统中的其他硬件 emerge 相应的 ebuilds. 下面列出您可选用的一些内核相关 (kernel-related) 的 ebuild:
Ebuild | 用途 (Purpose) | 命令 |
nvidia-kernel | 为 xorg-x11 提供 NVIDIA 图形加速 | emerge nvidia-kernel |
nforce-net | 针对 NVIDIA NForce(2) 主板上集成的网卡 (ethernet controller) | emerge nforce-net |
nforce-audio | 针对 NVIDIA NForce(2) 主板上集成的声卡 | emerge nforce-audio |
e100 | 针对 Intel 的 e100 高速网卡 (Ethernet Adapters) | emerge e100 |
e1000 | 针对 Intel 的 e1000 千兆级网卡 (Gigabit Ethernet Adapters) | emerge e1000 |
emu10k1 | Creative Sound Blaster Live!/Audigy 支持 | emerge emu10k1 |
ati-drivers | 为 xorg-x11 提供 ATI Radeon 8500+/FireGL 图形加速 | emerge ati-drivers |
ati-drivers-extra | ATI 的一些带图形界面的工具 | emerge ati-drivers-extra |
请留意, 其中有些 ebuild 涉及数量庞大的依赖关系. 您可以使用 emerge --pretend 来查看一个 ebuild 被 emerge 时都有哪些其他的软件包会被作为依赖包安装进来. 我们以 emu10k1 为例:
代码清单 19: 查看会被安装的软件包列表 |
# emerge --pretend emu10k1 |
如果您见到不乐意安装的软件包, 您可以用 emerge --pretend --verbose 来查看在计算依赖关系时都用了哪些 USE 参数:
代码清单 20: 查看 USE 参数的使用情况 |
# emerge --pretend --verbose emu10k1 ... [ebuild N ] media-sound/aumix-2.8 +gpm +nls +gtk +gnome +alsa -gtk2 |
上述例子中, 您会发现 emu10k1 的依赖包之一 (aumix) 用了 gtk 和 gnome 俩 USE 参数, 这会让 gtk 也一同编译进来 (而 gtk 本身依赖于另一庞然大物 xorg-x11). (Cure: 也就是说, 装这么一个 emu10k1 的话, 以这种 USE-flags 设置, 你就需要同时装上 xorg-x11, gtk... 足以折腾你不少的时间!)
如果您不想这些东西都编译的话, 取消所有的 USE 参数, 如:
代码清单 21: 取消 (diselected) 所有的 USE 参数来 emerge emu10k1 |
# USE="-gpm -nls -gtk -gnome -alsa" emerge --pretend emu10k1 |
如果结果让您满意, 把 --pretend 去掉以便真正地开始安装 emu10k1.
配置模块
要想能自动加载一些 模块, 您得把它们列在 /etc/modules.autoload.d/kernel-2.4 (或 kernel-2.6) 文件中. 您需要的话, 还可以给 模块添加额外的参数 (add extra options to the modules).
运行下述的 find 命令以列出所有的模块. 请记得把 "" 替换成您刚编译的内核版本:
代码清单 22: 查看现有模块列表 |
# find /lib/modules// -type f -iname '*.o' -or -iname '*.ko' |
例如, 要自动加载 3c59x.o 模块, 编辑 kernel-2.4 或 kernel-2.6 把这一模块名字添上:
代码清单 23: 编辑 /etc/modules.autoload.d/kernel-2.4 |
(以 2.4 内核为例) # nano -w /etc/modules.autoload.d/kernel-2.4 |
代码清单 24: /etc/modules.autoload.d/kernel-2.4 或 kernel-2.6 |
3c59x |
现在运行 modules-update 以确认 (commit) 您对 /etc/modules.conf 文件的修改:
代码清单 25: 运行 modules-update |
# modules-update |
请继续下一章配置您的系统.