📄 kernel-howto.txt
字号:
Kernel HOWTO 中译版 作者: Brian Ward [1]bri@blah.math.tu-graz.ac.at译者: [2]C.W.Huang & [3]Asd L. Chen v0.80, 26 May 1997. 翻译日期: 25-29 August 1997 _________________________________________________________________ 这是一份关於如何配置、编译、升级核心以及排难解纷的详细指引. _________________________________________________________________ 1. 简介 * 1.1 请先看此! * 1.2 文章风格说明 2. 重要问题与解答 * 2.1 不管怎麽样,核心到底是做什麽的? * 2.2 我为什麽要更新核心? * 2.3 较新的核心支援那些硬体? * 2.4 我需要那个版本的 gcc 或是 libc ? * 2.5 什麽是可载入模组? * 2.6 我需要多大的磁碟空间? * 2.7 这需要多久的时间? 3. 如何真正进行核心的配置? * 3.1 取得原始程式码 * 3.2 解开原始程式码的包装 * 3.3 配置核心 * 3.4 现在呢? (The Makefile) 4. 编译核心 * 4.1 清除与确认 * 4.2 编译时期 * 4.3 其他可以``make''的东西 * 4.4 安装核心 5. 修补核心 * 5.1 使用修补档 * 5.2 如果有错误发生 * 5.3 砍掉 .orig 档案 * 5.4 其它的修补档 6. 附加的套件 * 6.1 kbd * 6.2 util-linux * 6.3 hdparm * 6.4 gpm 7. 一些陷阱 * 7.1 make clean * 7.2 巨大或缓慢的核心 * 7.3 核心无法编译 * 7.4 新版的核心似乎不能启动 * 7.5 你忘了执行 LILO,或系统根本不能启动 * 7.6 系统表示 `warning: bdflush not running' * 7.7 系统说 undefined symbols 而且无法编译 * 7.8 无法让我的 IDE/ATAPI CD-ROM 正常工作 * 7.9 系统显示关於 obsolete routing requests 的奇怪讯息 * 7.10 防火墙功能无法在 1.2.0 上工作 * 7.11 ``Not a compressed kernel Image file'' (非压缩核心映像档) * 7.12 升级至 1.3.x 後在控制台终端机上的问题 * 7.13 核心升级後似乎无法编译东西 * 7.14 增加上限 8. 升级至 2.0.x 的注意事项9. 可载入模组 * 9.1 安装模组工具 * 9.2 与核心发行的模组 10. 其它配置选项 * 10.1 General setup (一般设定) * 10.2 Networking options (网路选项) 11. □诀和技巧 * 11.1 重导 make 或是 patch 指令的输出 * 11.2 条件式的核心安装 * 11.3 核心更新 12. 其它可能相关有用的 HOWTOs13. 杂项 * 13.1 作者 * 13.2 预定目标 * 13.3 贡献者 * 13.4 版权声明,许可,诸如此类的 _________________________________________________________________ 1. 简介 你是否需要阅读这份文件? 如果你有下列任何症状之一的话,是的: * ``哎呀!这套 wizzo-46.5.6 软体说它需要 1.8.193 版的核心,而我却仍然 只有 1.0.9 版!'' * 比较新的核心之一□面有你正好需要的一个设备驱动程式. * 你对於如何编译核心真的一无所知. * ``在 README 档案里面真的就是全部的资料了吗?'' * 你来,你试,它还是不动. * 你需要某事给予一直要求你为他们安装核心的人们. 1.1 请先看此! 这份文件中的某些□例假设你有 GNU tar,find 以及 xargs. 这些是 Linux 套 件里的标准工具,应该不是问题. 文件中也假设你知道你系统的档案系统架构, 如果你并不知道,最好赶快写下一份 mount 指令在系统正常运作下,所显示的结 果作为参考(或者是一份 /etc/fstab 的列表,如果你能够看得懂). 这些资讯很 重要,而且,除非你重新分割或加入新的磁碟,重新安装你的系统以及做诸如此 类的操作,否则它们不会变动. 本文写作时最新``产品''的核心版本号码是 2.0.30,也就是说本文的参考及例子 是对应於该版本的. 虽然我尝试让这篇文章尽量跟版本无关,核心却不断地在发 展中. 因此如果你取得一新的版本,它不可避免地会有一些不同. 当然,这应 该不会造成大问题,但它可能会制造一些混淆. 有两种版本的 Linux 核心原始码,``产品'' 与 ``发展中'' 的. 产品版本从 1.0.x 开始而且目前是以偶数编号发表的; 1.0.x 是产品,1.2.x 是产品, 2.0.x 也是.这些版本应该比较稳定,在发表时是没有臭□(bug)的版本. 发展 中的核心 (1.1.x, 1.3.x 等等) 是作为测试用的,给那些想要测试最新而且可能 有许多臭□的人用的. 已经警告过你了. 1.2 文章风格说明 看起来像这样 text 的文字或者是某样将出现你的萤幕上的东西,一个档名, 或 是某样可被直接键入的东西,像是命令,或命令的选项(如果你看的是纯文字档案 ,它看起来没什麽不同). 命令与其它的输入经常被框起来(用` '),这经常引起 典型的标点符号问题: 如果这样的项目出现在句子的最後面,人们时常会在命令 後面加上一句号 `.', 因为美国人的引号习惯将句号放入引号里面. 即使用常 识(而不幸的是,这假设了拥有此``常识''的人是习惯於美国式的引号)想也知道 应先将这标点去掉,但很多人总是忘记. 所以在此情形下我将句号放在引号外头 .换句话说,当我叫你要打 ``make config'' 时, 我会写 `make config',而 不是 `make config.'. 2. 重要问题与解答2.1 不管怎麽样,核心到底是做什麽的? 在 Unix 系统中,像是你的程式与硬体的一个仲裁者. 首先,它为所有执行中的 程式(程序)做记忆体管理, 并且确保它们都能够平均(或不平均,如果你愿意)的 分享处理机的运算资源. 此外,它还提供了一个良好的介面让刚刚提到的程式能 透过它与你的硬体沟通. 其实核心所处理的工作比这还要更复杂一些,不过这些基本的功能是最必要知道 的. 2.2 我为什麽要更新核心? 比较新的核心一般来说会提供更强的能力来与更多种奇奇怪怪的硬体沟通(也就是 说,它们拥有更多的设备驱动程式), 它们能够有更好的行程管理,它们能够执 行的比旧的版本更有效率,它们可能比旧的版本来的更稳定,而且它们修正了旧 版里的一些错误. 大部分的人是因为他们需要那些新的设备驱动程式以及错误修 正的部份而更新核心. 2.3 较新的核心支援那些硬体? 请看 [4]Hardware-HOWTO 文件. 另一个方法是,你可以查看 Linux 原始程式码 中的 `config.in' 档, 或者就在当你试著去 `make config' 时找出来. `make config' 将会让你看到标准的核心原始程式码支援的所有硬体,但这并不 是 Linux 所支援的全部硬体; 许多普通的设备驱动程式(像是 PCMCIA 驱动程式 以及某些磁带机的驱动程式)是个别维护及发行的可载入模组. 2.4 我需要那个版本的 gcc 或是 libc ? Linus 对这个问题的建议放在 Linux 原始程式的 README 档案□头. 如果你没 有该版本或是更新的版本,新版的 gcc 应该会告诉你是否需要更新 libc 的版本 . 这两个操作都不会有什麽问题,只要照著说明做就可以了. 2.5 什麽是可载入模组? 它们是核心的一部分(通常是设备驱动程式),但是并没有编译到核心里面去. 它 们被分别编译,然後几乎可以在任何时候将它们插入运作中的核心或从中取出. 由於它的便利性,这已经成为一种增加东西到核心里去的较好方式. 许多常用的 设备驱动程式,例如 PCMCIA 驱动程式以及 QIC-80/40 磁带机的驱动程式就是可 载入模组. 2.6 我需要多大的磁碟空间? 这与你系统的特殊配置有关.首先,压缩过後的 Linux 原始程式码在 2.0.10 版 时约占 6 MB. 许多站台在解压缩後仍会保留一份.解压缩以後这将占掉约 24 MB. 但这还不是全部 — 你将会需要更多的磁碟空间来实际编译这些东西. 这 与你配置多少东西到你的核心里头去有关.例如,在某部机器上,我有网路 ,3Com 3C503 的驱动程式, 并且配置了三种档案系统,而这全部共需要 30 MB .加上压缩过的 linux 原始程式码,这个配置大概需要用掉你 36MB . 在另外 一个系统上,不需要支援网路设备(但仍然需要支援网路),加上音效卡,结果吃 掉更多空间. 还有,一个新版本的核心几乎总是比旧版本的占更大的空间. 所 以,一般来说,如果你有许多种硬体设备的话,确定你有足够的硬碟空间来容纳 这个配置. (以今日的价格来说,对於储存空间的问题我不能不建议你再买一台 磁碟机.) 2.7 这需要多久的时间? 对大部份的人而言,答案是``很久''.你的处理机速度有多快,以及你拥有的记 忆体数量有多少将是决定所需时间的主要因素, 但是,在把多少东西配置到核心 里头去这方面还是可以做点努力. 在一台有 16 MB 记忆体的 486DX4-100 电脑 上,一个有五种档案系统、支援网路、以及音效卡驱动程式的 1.2 版核心可以在 二十分钟以内完成. 类似的配置,在一台 386DX/40(8 MB 记忆体)上大约需要要 1.5 个小时. 在编译核心时通常一些好的建议是去喝一点咖啡,看点电视,织些 毛线,或任何你喜欢的事. 如果你的机器真的很慢的话你也该换台较快的机器. 3. 如何真正进行核心的配置?3.1 取得原始程式码 你可以经由匿名 ftp 站从 ftp.funet.fi 的 [5]/pub/Linux/PEOPLE/Linus, 或 是其它 MIRROR 站取得.([译注] 台湾可从 [6]ftp.edu.tw 取得.) 档案名称一 般是以标记成 linux-x.y.z.tar.gz 为代表,其中的 x.y.z 是版本编号. 较新 的(更好的?)版本以及修补档一般是放在类似 `v1.1' 以及 `v1.2' 这样的子目录 下. 数字最大的是最新的版本,而且通常是``测试版'',也就是说如果你对 beta 或 alpha 版感到不安的话,你应该停留在主要的发行版本上. 强烈建议你去找 mirror 的 ftp 节点,而不要直接到 ftp.funet.fi 去! 底下是 一些 mirrors 以及其他节点的简要列表: USA: sunsite.unc.edu:/pub/Linux/kernelUSA: tsx-11.mit.edu:/pub/linux/sources/systemUK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernelAustria: ftp.univie.ac.at:/systems/linux/sunsite/kernelGermany: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/LinusGermany: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/LinusFrance: ftp.ibp.fr:/pub/linux/sources/system/patchesAustralia: sunsite.anu.edu.au:/pub/linux/kernel 一般来说,sunsite.unc.edu 的 mirror 站是很好找的. 档案 /pub/Linux/MIRRORS 包含了已知的 mirror 节点. 如果你没有办法上 ftp ,有 个存放 linux 的 BBS 系统列表会定期刊登在 comp.os.linux.announce 上,试 著到那边去找一下. 如果你想寻找一般的 Linux 资讯与套件,去 [7]http://www.linux.org/. 3.2 解开原始程式码的包装 确定你是以`root'的身份签入,然後 cd 到 /usr/src. 如果你安装 Linux 时已 经安装了核心原始程式码,在这个目录底下应该已经存在一个叫做 `linux' 的子 目录. 这是旧版的 linux 原始程式码.如果你还有磁碟空间而且想要玩得安全 一点,那麽你会想要保留这个子目录的. 有个好主意是根据你目前使用的核心版 本来修改这个子目录的名称. `uname -r' 这个指令将会告诉你目前的核心版本 . 所以,如果 `uname -r' 显示 `1.0.9',你就可以把 `linux' 改名(用 `mv')为 `linux-1.0.9'. 如果你是个鲁莽型的人,那就直接把这个子目录清除 掉. 无论是哪一种情况,反正只要确定在解开全部的原始程式码之前 ,/usr/src 目录下没有 `linux' 这个子目录就对了. 在 /usr/src 目录下,用 `tar zxpvf linux-x.y.z.tar.gz' 来解开原始程式码 的包装 (如果你拿到的是 .tar 的档案,後面没有加上 .gz,那就用 `tar xpvf linux-x.y.z.tar'). 你将会看到原始程式的内容飞逝而过.当它完成以後,在 /usr/src 将会出现一个新的 `linux' 子目录. cd 到 linux 目录下然後查看 README 档, 里面应该会有一段标题为 `INSTALLING the kernel' 或类似的文字 . 如果适当的话,先依照说明里的指示 — 建立该有的符号链结,移除过时的 .o 档案等等等诸如此类的工作. 3.3 配置核心 注意:这部份内容有些是重覆 Linus 的 README 档案中的相应章节或加以修订. 在 /usr/src/linux 下执行 `make config' 这个命令将会启始一个指令稿, 而 这个指令稿会问你各种问题.它需要 bash ,所以要确定 bash 是 /bin/bash ,/bin/sh 或 $BASH. 还有其它种 `make config' 的方式你可能会觉得更容易使用. 对那些执行 X Window 的人你如果有装 Tk 的话可以试著用 `make xconfig'. `make menuconfig' 是给那些有装 (n)curses 而且喜欢文字模式选单的人用的. 这些 界面有个明显的好处: 如果在配置过程中你不小心犯了错,可以简单地回去修正 . 你现在该准备好回答这些问题,通常用 `y' 或 `n' 就可以了. 设备驱动程式通 常会有一个 `m' 选项. 这表示``模组(module)'',表示说系统将会编译它,但 不会直接放进核心里,而是做为一可载入模组. 一个有趣的说法是表 示``maybe''.有一些很明显或是不重要的选项将不会在此加以说明. 请见`` [8]其它配置选项''一节对其中的简短说明. 在 2.0.x 或以後的版本中有一个 `?' 选项,提供了这个配置参数的简短描述. 这些资讯应该都是最新的. Kernel math emulation (核心的数学运算模拟) 如果你没有数学辅助运算处理机(你只有一台单纯的 386 或 486SX),那麽你在 这里要回答 `y'.如果你已经有数学辅助运算处理机却还回答 `y', 那也不必太 担心 — linux 还是会去使用它而忽略掉核心的模拟程式. 唯一的影响是编译出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -