📄 kernel-howto.txt
字号:
来的核心变大了(用掉更多的记忆体). 我听说数学运简模拟很慢; 虽然和本节无 太大关系,还是应该注意这对 X Window 系统的效率会有很大影响. Normal (MFM/RLL) disk and IDE disk/cdrom support (标准硬碟支援) 你在这里差不多都得回答 `y'.它代表的意思是核心将会支援标准的 PC 硬碟, 例如大多数人使用的 IDE 界面硬碟.这不包括 SCSI 设备的支援; 这将在後面设 定. 然後你会被问到关於 ``old disk-only'' 与 ``new IDE'' 驱动程式的事. 你应 该两者选一; 主要的差别是旧的驱动程式只支援单一界面两部磁碟机, 而新的驱 动程式支援第二界面及 IDE/ATAPI 光碟机.新的驱动程式比旧的大约多 4K, 而 且应该是``改良的'',也就是说除了可能包含些许错误之外,它应该会改善你的 磁碟效率,特别是如果你有较新的 EIDE 硬体的话. Networking support (网路支援) 原则上,如果你有连接网路,譬如说,你有 Internet 连线,或是你将使用 SLIP,PPP,term 或其它方式拨接到 Internet 上的话,回答 `y'. 然而,某些 软体套件(例如 X Window 系统)需要网路支援,即使你的机器并不真正连接到网 路上.这情形你也应该回答 `y'. 然後,你会被问到是否需要支援 TCP/IP 网路 ,如果你不十分确定,就回答 `y'. Limit memory to low 16MB (制记忆体在 16 MB) 可能会有一些不良的 386 DMA 控制器无法正确地定址到 16 MB 以上的记忆体位 址; 如果你的机器刚好有这种(罕见)情况时,那麽你也就只好回答″ y ″了. System V IPC 一个 IPC (行程内通讯,Interprocess Communication) 的定义就在 Perl 书中 的注解. 这并不大奇怪,一些 Perl 程式设计者用它来让行程之间互相沟通,就 像许多其它套件(最著名如 DOOM)一样. 因此除非你完全了解你在做什麽,不然 最好别回答 n. Processor type (386, 486, Pentium, PPro) (微处理机种类) (在较旧版本的核心中为: Use -m486 flag for 486-specific optimizations, 使用 -m486 旗标针对 486 做最佳化) 按照惯例地,这是对一特别的微处理机做某种最佳化; 核心仍可在其它晶片上跑 得很好,但可能会比较大些. 不过,在较新版本的核心上,已经不是这个样子了 .因此你应该正确地回答你要编译的微处理机种类. ``386'' 的核心可以在所有 的机器上工作. SCSI support (SCSI 的支援) 如果你有 SCSI 设备,那麽就回答 `y'. 接著会有提示要求更进一步的资讯,像 是你是否要支援光碟机,磁碟机,还有你使用的是那一种 SCSI 介面卡. 这部份 请参阅 [9]SCSI-HOWTO,有更详细的说明. Network device support (网路设备支援) 如果你有网路卡,或者你想要使用 SLIP,PPP,或是并列埠界面卡,那就回答 `y'. 接著会有提示问你使用的是那一种网路卡,或要使用那一种通讯协定. Filesystems (档案系统) 这将会有提示要你回答所要支援的档案系统种类,计有: Standard (minix) — 新的套件不再建立 minix 档案系统,而且很多人不使用它 ,但是把它配置在核心里仍然是个好主意. 某些``急救磁片''程式会用到它,而 且仍然有许多软碟磁片可能用 minix 档案系统,因为 minix 档案系统对於处理 软碟片方面较无问题. Extended fs — 这是扩充档案系统的第一版,现在已经不再使用.使用的时机是 ,如果你有需要,你就会知道的.如果你觉得怀疑,你就不需要它. Second extended — 这是现在新发行的套件所广泛采用的档案系统,你可能会有 其中一种,所以必须回答 `y'. xiafs filesystem — 这个档案系统曾经一度很普遍,但是在写这份文件时,我 已经不知道有任何人在使用它了. msdos — 如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割区,或是想将用 MS-DOS 格式化的软碟片挂进来的话,回答 `y'. ums-dos — 这种档案系统能使 MS-DOS 档案系统拥有更多像 Unix 的特性,像是 长档名等等.这对那些不使用 MS-DOS 的人(像我)并不是很有用. /proc — 另一种神奇的东西(我猜这个概念是无耻地从贝尔实验室里偷过来的). 它不是你硬碟分割区里的任何东西,而是核心与程序之间的档案系统介面.许多 程序工具(像 `ps')都会用到它. 有时可以试著用 `cat /proc/meminfo' 或 `cat /proc/devices'. 某些 shell (特别像是 rc) 使用了 /proc/self/fd (在 其它系统里叫做 /dev/fd) 来做输出输入动作. 你几乎应该回答 `y'; 许多重要 的 Linux 工具都依赖它来运作的. NFS — 如果你在网路环境下而且想要由 NFS 来使用其它机器的档案系统,回答 `y'. ISO9660 — 绝大部分的光碟片都使用这个档案系统.如果你有光碟机而且想在 Linux 下使用,回答 `y'. OS/2 HPFS — 在编写这份文件的时候,这个档案系统还只支援到 OS/2 HPFS 的 读取. System V and Coherent — 这是为 System V 以及 Coherent 系统的分割区而设 的(它们是另一种在 PC 上的 Unix 系统). 但是我不知道我需要那些档案系统! 好吧,键入 `mount'.它看起来会像这样: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) 仔细看看每一行;在 `type' 後面的那个字就是档案系统的格式. 在这个例子中 ,我的 / 和 /usr 分割区是 second extended 格式, 我使用了 /proc ,而且 挂有一张以 msdos (bleah) 为档案系统格式的磁片. 如果你有使用 /proc,可以试试 `cat /proc/filesystems'. 它会给你一份目前 使用的核心所支援的档案系统列表. 这配置并不常使用.不重要的档案系统会使核心显得臃肿; 参见可载入模组一节 的说明以避免此情况,以及`` [10]陷阱''一节说明为何臃肿的核心不好. Character devices (字元设备) 在这里,你将会发现许多设备名称,用来设定你的印表机,汇流排滑鼠,PS/2 滑 鼠(大部分笔记型电脑使用内建的 PS/2 滑鼠), 以及一些磁带机驱动程式,以及 其它的``字元''设备.当有合适的选项时,回答 `y'. 注意:Selection 这个程式使你可以在 X window 之外使用滑鼠在各个虚拟控制 台间做剪贴的动作. 如果你有串列滑鼠的话,这真的很棒,因为它与 X window 之间的沟通良好, 不过如果你用其它种类的滑鼠就需要点技巧了.Selection 曾 经一度是选择的配置配项,不过现在已经是标准了. 注意二: Selection 现在已经过时了.现在新的程式名叫 ``gpm''. 它能做更神 奇的事,像是转换滑鼠协定,处理多重滑鼠等…… Sound card (音效卡) 如果你想听到 biff 程式大叫的话,回答 `y'. 然後等一下会编译另一个配置程 式并详细询问你所有关於音效卡的问题. (注意: 当它问你是否安装完整版本的 驱动程式时,你可以回答 `n' 以减少你核心记忆体并只选用你真正需要的.) 如 果你有音效卡我强烈建议看一下 [11]Sound-HOWTO 以知道更多的细节. 其它配置选项 没有将所有的选项都列出来,因为有些经常改变,或是相当自明的(例如 3Com 3C509 support 就是编译这种特别乙太网路卡的驱动程式), 有一个十分容易理 解的所有选项列表(包括将它们放到 Configure 指令稿的方法)可在这个 URL 找 到(由 Axel Boldt [12]axel@uni-paderborn.de 所收集): [13]http://math-www.uni-paderborn.de/~axel/config_help.html 或经由匿名 FTP 站: [14]ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.y z.tgz 其中 x.yz 是版本号码. 其後来的核心中(2.0.x 及其後的),这已被整合到原始程式码中. Kernel hacking >这是从 Linus 的 README 里摘录的: ``kernel hacking'' 配置的细节通常会产生一个更大或是更慢的核心(或者是又 大又慢), 而且可能因为将一些常式配置成很活跃地去尝试中断一些不良的程式 码以便找出核心里的问题( kmalloc() ), 而使得核心变得比较不稳定.所以 要产生一个核心``产品''的话,你在这里应该回答 `n'. 3.4 现在呢? (The Makefile) 在你完成 make config 之後,应该会有一个讯息告诉你核心已经配置好了, 以 及要你去``check the top-level Makefile for additional configuration'' 等等讯息. 所以查看一下 Makefile.你应该不必改变它,但是看看无妨. 一旦新核心完成 ,你也可以用 `rdev' 指令来改变其中的选项. 4. 编译核心4.1 清除与确认 当用来进行配置的指令稿执行完成时,它会告诉你去 `make dep' 以及 `clean' . 所以要执行`make dep'.这将确保所有的相依关系,例如 include files 都 没问题. 除非你的电脑真的很慢,否则它不会花太久时间的. 完成後,在较旧 版本的核心中你还应该做 `make clean'. 这会清除核心编译的所有目的档以及 其它东西.在重建一个核心之前不要忘记这个步骤. 4.2 编译时期 在完成 `make dep' 及 `make clean' 工作之後,你现在可以执行 `make zImage' 或 `make zdisk' (这部份需要长时间). `make zImage' 将会编译核心 ,并且在 arch/i386/boot 留给你一个叫做 `zImage' 的档案.这就是新的压缩 核心. `make zdisk' 做的事也一样,但是它会把核心放到你所希望的磁片去, 只要把这张磁片放在 ``A:''. `zdisk'对於测试新核心很方便;如果它当掉(或 工作不正常),只要把磁片拿掉再用旧的核心启动即可. 如果你意外地删除了核 心或是什麽的,它也是个方便的启动办法. 当你把一台磁碟的内容倾倒到另外一 台去时,你也可以用它来安装新的系统(除了这些之外还有更多用途!) 所有近来的核心都是压缩过的,所以有个 `z' 在名字前面.压缩过的核心执行的 时候会自动将自己解压缩. 4.3 其他可以``make''的东西 `make mrproper' 将会做更广泛的 `清除' 工作. 这个动作有时候是必须的,所 以你可能会希望在每次修补的时候执行它. `make mrproper' 还会将你的配置档 案杀掉,所以如果你认为它重要的话应该先做一备份(在 .config). `make oldconfig' 会尝试由一旧的配置档案来配置你的核心.它会为你执行 `make config'. 如果你还未曾编译过核心或没有旧的配置档案,那麽你可能不 该做这个,因为你几乎确定会更改预设的配置. 参见可载入模组一节对 `make modules' 的说明. 4.4 安装核心 在你已经获得一个看起来能够照你希望运作的新核心之後,现在是安装它的时候 了. 大部份的人使用 LILO (Linux Loader) 来做这件事. `make zlilo' 将会 安装核心,然後对它执行 LILO,使你完成所有开机的准备, 但是这只有在 LILO 已经以下列这种方式配置好的时候才可以:核心为 /vmlinuz , lilo 在 /sbin 下,而且与你的 LILO 配置(/etc/lilo.conf)一致. 另一方面,你可能需要直接使用 LILO.这是一个相当容易安装的软体,然而,它 的配置档常使人困扰. 查看配置档(不是旧版的 /etc/lilo/config 就是新版的 /etc/lilo.conf),看看里面有些什麽. 它看起来像这样子的东西: image = /vmlinuz label = Linux root = /dev/hda1 ... 首先,`image =' 设定为已经安装的核心.大部份的人似乎都用 /vmlinuz. `label' 则是给 lilo 用来决定现在要启动的是那个核心或作业系统, 而 `root' 则是这个特别的作业系统的根目录 /. 备份一份旧的核心,然後将你做 的 zImage 拷贝进去(例如,如果你用 `/vmlinuz' 的话,就像这样 `cp zImage /vmlinuz'). 然後,执行 `lilo',但是在较旧的系统上,你可能必须执行 /etc/lilo/install 或甚至是 /etc/lilo/lilo -C /etc/lilo/config. 如果你想知道更多有关於 LILO 的配置,或是你并没有 LILO 但是你想要安装的 话, 从你喜欢的 ftp 节点取得最新的版本然後依说明行事. 要能够从硬碟启动你的旧核心其中之一的话(这是另一个在新核心出状况的情况下 保护你自己的方法), 把 LILO 配置档中所有的(包括) `image = xxx' 拷贝到档 案的最底端, 然後把 `image = xxx' 改成 `image = yyy' 其中的 `yyy' 是你 备份旧核心所存档的名字. 接著,把 `label = zzz' 改成像是 `label = linux-backup' 然後重新执行 lilo. 你可能得要加上一行 `delay=x',其中的 x 是以十分之一秒为单位的时间, 这是告诉 LILO 在启动前先等一下,所以你可 以中断它的执行(例如用 shift 键). 然後键入所备份的启动映像之 label (在 发生了某些令人不愉快的事情的情况下). 5. 修补核心5.1 使用修补档 核心的小幅更新是以修补档的方式发行.例如,如果你的版本是 1.1.45 , 而且 你注意到出现了一个 `patch46.gz' 可以用来升级它, 这代表你可以藉由使用这 个修补档将版本升级到 1.1.46. 你也许会想要先备份原始程式码(`make clean' 然後 `cd /usr/src; tar zcvf old-tree.tar.gz linux' 将会为你造出 一份 tar 压缩档,里面就是整个原始程式码与其档案架构). 现在接著继续上面的例子,假设你已经取得了 `patch46.gz' 并放在 /usr/src 下. cd 到 /usr/src 然後执行 `zcat patch46.gz | patch -p0' (如果并不是 压缩过的修补档,那麽就执行 `patch -p0 < patch46'), 你将会看到许多东西 飞逝而过(或是慢慢跳过,如果你的电脑真的很慢的话)告诉你它正试著修补程式 ,以及是否成功. 通常,这个过程快得无法仔细看清楚它的动作,所以你会无法 确定它到底有没有成功地执行. 所以你可能会想在 patch 指令中加上 -s 选项 ,告诉 patch 程式只报告错误讯息就好. (这样你就不会得到许多``嗨! 我的电 脑正在做某些改变!''的感觉,不过你可能宁愿这样…) 那麽就得找找看一些可能 不是那麽顺利的事.cd 到 /usr/src/linux 并找寻档名结尾为 .rej 的档案. 某些版本的 patch(比较旧的版本,它们可能是在比较早期的档案系统上编译的 )会把这些没有成功的操作记录在档名有 # 的档案里. 你可以用 `find' 来替 你找; find . -name '*.rej' -print 会将现行目录及子目录下所有具 .rej 结尾的档名印到标准输出. 如果一切正确无误的话,执行第三节跟第四节所讨论的 `make clean' ,`config' 以及 `dep'. 关於 patch 指令另外还有一些选项.如前所述,patch -s 将会抑制除了错误以 外的所有其他讯息. 如果你把核心原始程式码放在 /usr/src/linux 以外的地方 ,在该目录下用 patch -p1 也可以乾净俐落的执行修补任务. 其它的 patch 选 项在线上手册(man page)里都有很详细的描述. 5.2 如果有错误发生 (注意: 本节提到的大部份是指旧版的核心) 通常最常发生的问题是当 patch 修改一个叫做 `config.in' 的档案时,这个档 案看起来不怎麽对劲, 因为你修改了一些选项来配合你的机器.这个问题已经小
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -