科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道系统技术开发新篇章:编译linux内核 (11)

系统技术开发新篇章:编译linux内核 (11)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

[ ] Root file system on NFS # 如果前面没选择 kernel level autoconfiguration # 这个是看不见的。

作者:weizhishu 来源:chinalunixpub 2007年11月2日

关键字: 内核 开发 技术 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

[ ] Root file system on NFS

# 如果前面没选择 kernel level autoconfiguration

# 这个是看不见的。

# 如果您打算做 diskless client 的核心,这个一定要选。

# 但如果做为 dsiskless 的 server,那就不必了。

<*> NFS server support

# 这个是当然要选的,除非您单纯做 NFS client 。

[*] Provide NFSv3 server support

# 第 3 代的 NFS,可以用 TCP (以前用 UDP)。

<*> SMB file system support (to mount Windows shares etc.)

# 就算自己不用 Windows,相信还很多人在用,

# 不妨编为内建。

[*] Use a default NLS (NEW)

Default Remote NLS Option: "cp950" (NEW)

# 如果需要中文支援,不妨改为 cp950

NCP file system support (to mount NetWare volumes)

[*] Packet signatures

[*] Proprietary file locking

[*] Clear remove/delete inhibit when needed

[*] Use NFS namespace if available

[*] Use LONG (OS/2) namespace if available

[*] Lowercase DOS filenames

[*] Use Native Language Support

[*] Enable symbolic links and execute flags

# 所有 NCP 需要的,都是 novell 档案系统需要的,

# 如果您确定您不打算和 novell 连接,那就不用理会。

Partition Types --->

[*] Advanced partition selection

[ ] Acorn partition support (NEW)

[ ] Alpha OSF partition support (NEW)

[ ] Amiga partition table support (NEW)

[ ] Atari partition table support (NEW)

[ ] Macintosh partition map support (NEW)

[*] PC BIOS (MSDOS partition tables) support

[ ] BSD disklabel (FreeBSD partition tables) support (NEW)

[ ] Minix subpartition support (NEW)

[ ] Solaris (x86) partition table support (NEW)

[ ] Unixware slices support (NEW)

[ ] SGI partition support (NEW)

[ ] Ultrix partition table support (NEW)

[ ] Sun partition tables support (NEW)

# 上面只有一项是预设选择的,只要其它,您自己看著办吧。

Native Language Support --->

Default NLS Option: "big5-0" (NEW)

# 如果需要中文支援,不妨改为 big5-0

Codepage 437 (United States, Canada) (NEW)

Codepage 737 (Greek) (NEW)

Codepage 775 (Baltic Rim) (NEW)

Codepage 850 (Europe) (NEW)

Codepage 852 (Central/Eastern Europe) (NEW)

Codepage 855 (Cyrillic) (NEW)

Codepage 857 (Turkish) (NEW)

Codepage 860 (Portuguese) (NEW)

Codepage 861 (Icelandic) (NEW)

Codepage 862 (Hebrew) (NEW)

Codepage 863 (Canadian French) (NEW)

Codepage 864 (Arabic) (NEW)

Codepage 865 (Norwegian, Danish) (NEW)

Codepage 866 (Cyrillic/Russian) (NEW)

Codepage 869 (Greek) (NEW)

Simplified Chinese charset (CP936, GB2312) (NEW)

<*> Traditional Chinese charset (Big5) (NEW)

Japanese charsets (Shift-JIS, EUC-JP) (NEW)

Korean charset (CP949, EUC-KR) (NEW)

Thai charset (CP874, TIS-620) (NEW)

Hebrew charsets (ISO-8859-8, CP1255) (NEW)

Windows CP1251 (Bulgarian, Belarusian) (NEW)

<*> NLS ISO 8859-1 (Latin 1; Western European

Languages) (NEW)

NLS ISO 8859-2 (Latin 2; Slavic/Central European

Languages) (NEW)

NLS ISO 8859-3 (Latin 3; Esperanto, Galician,

Maltese, Turkish) (NEW)

NLS ISO 8859-4 (Latin 4; old Baltic charset) (NEW)

NLS ISO 8859-5 (Cyrillic) (NEW)

NLS ISO 8859-6 (Arabic) (NEW)

NLS ISO 8859-7 (Modern Greek) (NEW)

NLS ISO 8859-9 (Latin 5; Turkish) (NEW)

NLS ISO 8859-13 (Latin 7; Baltic) (NEW)

NLS ISO 8859-14 (Latin 8; Celtic) (NEW)

NLS ISO 8859-15 (Latin 9; Western European Languages

with Euro) (NEW)

NLS KOI8-R (Russian) (NEW)

NLS KOI8-U/RU (Ukrainian, Belarusian) (NEW)

NLS UTF8 (NEW)

# 上面这些,除了繁体中文和 ISO 8859-1 编为内建之外,

# 其它的我都选为模组了,也建议您如此。

# 要不然以後读到某些编码的文章,再回来重编可不好玩。

Console drivers --->

[*] VGA text console

[*] Video mode selection support

# 可以让您在核心开机的时候,设定显示解析度。

# 如果您认为没必要的话,第 2 个可以不要。

Frame-buffer support --->

# 这就是传说中的神情 FB 了!

# 据说可以让您在找不到最新 AGP 显示驱动程式的情况下,

# 仍能杀出条血路。不过,我没玩过~~ ^_^

Sound --->

Sound card support

# 强烈建议您改为模组,否则日後用不了 sndconfig 工具。

# 在 Linux 里面设定音效卡可没 windows 那麽容易哦!

C-Media PCI (CMI8338/8738)

[*] Enable legacy FM (NEW)

(388) FM I/O 388, 3C8, 3E0, 3E8

[*] Enable legacy MPU-401 (NEW)

(330) MPU-401 I/O 330, 320, 310, 300 (NEW)

[*] Enable joystick (NEW)

(2) Number of speakers 2, 4, 5, 6 (NEW)

Creative SBLive! (EMU10K1)

Creative Ensoniq AudioPCI 97 (ES1371)

100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16)

support (NEW)

AWE32 synth (NEW)

Yamaha FM synthesizer (YM3812/OPL-3) support

Yamaha OPL3-SA1 audio controller

Yamaha OPL3-SA2 and SA3 based PnP cards

Yamaha YMF7xx PCI audio (native mode)

[*] Yamaha PCI legacy ports support

6850 UART support

# 呵:这里的清单太长啦!不全部列出来了。

# 不过我发现,在编译 modules 的时候,会卡在 sound 上面,

# 您或许需要取消下面这些项目才能通过:

# < > ESS Technology Solo1

# [ ] Enable PSS mixer (Beethoven ADSP-16 and other compatibile)

# [ ] Have DSPxxx.LD firmware file

# 其它的,能模组就模组吧。

# 您要是使用 Creative 的原厂音效卡,成功的机会比较高。

# 如果花很多时间都搞不定那些奇怪的型号,我建议您换卡好了,

# 除非是内建的不能换。

USB support --->

<*> Support for USB

# 现在来说, USB 应该是标准了,

# 搞不好,这正是您升级核心的唯一理由呢!

[ ] USB verbose debug messages

--- Miscellaneous USB options

[ ] Preliminary USB device filesystem

--- USB Controllers

<*> UHCI Alternate Driver (JE) support

OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support

--- USB Device Class drivers

USB Audio support

USB Mass Storage support

[ ] USB Mass Storage verbose debug

[ ] Freecom USB/ATAPI Bridge support

[ ] Microtech CompactFlash/SmartMedia reader

USB Modem (CDC ACM) support

USB Printer support

--- USB Human Interface Devices (HID)

USB Human Interface Device (full HID) support

USB HIDBP Keyboard (basic) support

USB HIDBP Mouse (basic) support

Wacom Intuos/Graphire tablet support

--- USB Imaging devices

USB Kodak DC-2xx Camera support

USB Scanner support

Microtek X6USB scanner support

--- USB Multimedia devices

USB IBM (Xirlink) C-it Camera support

USB OV511 Camera support

USB Philips Cameras

USB SE401 Camera support

DABUSB driver

--- USB Network adaptors

--- USB port drivers

USS720 parport driver

USB Serial Converter support --->

--- USB misc drivers

# 原则一样:尽量模组化。

# 越新的核心,支援的 USB 越多,如果您找不到您的型号,那就等下一版本吧。

Kernel hacking --->

[ ] Magic SysRq key

# 破解核心?可不是当骸客啦,而是帮忙改良核心。

# 我绝对没这个能力,没办法啦...

---

Load an Alternate Configuration File

# 可以将您以前保存的设定叫回来。

Save Configuration to an Alternate File

# 可以将您的当前设定保存起来。

如果您使用的核心版本和我这里的不一样,那麽上面的选项和摆放位址或许都不一样,请您自己多加留意。

这里,我把我在 desktop 电脑上安装的 2.4.9 核心设定档放在 这里,您可以下载回去,解压後用 Load Configuration 的办法载入设定,再根据您实际的情形调整即可。注意哦:我的设定是有打开 NTFS 的读取模组,如不需要请取消,要不请参考前面的提示修改 /usr/src/linux/fs/ntfs/unistr.c 这个档,否则您会遇到错误。

当您完成选择之後,按‘Exit’退出,看到“Do you wish to save your new kernel configuration?”,确定您选择‘Yes’。

Tips:前面做了一大堆动作,无非为了一个目的:产生出 /usr/src/linux/.config 这个隐藏档。除了 menuconfig 之外,透过 oldconfig、config、xconfig 也都可以产生(或修改)这个档。甚至,您也可以直接从别的设定当复制过来,例如在原 CD 所带的 source 版本中,您可以在 configs 这个目录里面找到厂商所使用的预设值。当然,您如果会手工设定它的话,直接编辑也行(小心不要改错就是了。)

执行 ls /lib/modules 看看里面有没有一个目录和编译版本相同名字,如果有,用 ‘mv’命令将之改名,如: mv /lib/modules/2.4.9 /lib/modules/2.4.9.bck

然後再为 /lib/modules 、 /boot、和 lilo.conf 做一个备份: cp -af /lib/modules /lib/modules.bak

cp -af /boot /boot.bak

cp -af /etc/lilo.conf /etc/lilo.conf.bak

最後,请按顺序输入: make dep # 建立相依关系

make clean # 清除旧有的设定

make bzImage # 建立核心档 ( arch/i386/boot/bzImage)

make modules # 建立模组 ( drivers, net, fs, kernel, ... etc.)

make modules_install # 将模组安装至系统 (/lib/modules/2.4.9)

(注意:bzImage 的‘i’为大写)

Tips:上面的句子,您可以用一行代替: make dep clean bzImage modules modules_install 1>/dev/null

甚至,您还可以将 make 丢到 background 执行。不过,这通常在您比较确定核心没有问题的时候才使用。我是建议您手工的执行每个 make 命令,检查它的执行结果才进行下一个动作,如果有错误,解决之後才好继续。

在make modules_install 之前,请先将 /lib/modules/ 目录下面的相同版本子目录移除掉,或改名。

这个过程比较需时,荧幕上会迅速的略过许多信息,有兴趣可以看看,如果您不想看,那就将 STOUT 重导到 /dev/null 去,保留 STDERR 就好(不要说您不会做哦,否则请回去补习上一章的内容);或是分别将它们重导到档案去,在除错时参考。

如果有问题,您通常会卡在 modules 和 bzImage 上面,请仔细检查错误信息,然後根据信息进行修改,直到您再没看到错误为止。(有些警告信息是无须理会的,如果您碰到 Error 结尾的句子就要小心了,通常在最後面,如果看不见,那是好消息。)

当您 make bzImage 顺利完成之後,您应该会看到几行信息,告诉您核心的大小: Root device is (3, 6)

Boot sector 512 bytes.

Setup is 4648 bytes.

System is 936 kB

假如您碰到 warning: kernel is too big for standalone boot from floppy 的话,那就要考虑回去将内建的选项改为模组,或尽量减少。否则,您将不能为这个核心制作开机磁片,也不能运用下面提到的核心安装测试程序。

安装核心

不过,到此为止,我们只是将核心编译出来而已,接下来的是要将核心安装到系统上面去。

先将一张空白磁片放进软碟机,然後输入: make bzdisk

这可能需要一点时间,等完成之後,输入: reboot

这样会让机器重新启动,这时候,你要确定您的BIOS里面的开机顺序是以“A”(或 Floppy )为先,和确定磁片留在 Floppy Drive 里面。

我们这样做的目的,是用磁片测试一下新的核心是否工作。我强烈建议您先用磁片测试新核心,除非您编译出来的核心实在塞不进一张磁片中。如果不成功的话,您还可以取出磁片,用原来的核心来启动,然後再重新编译,再来反复测试。

Tips:如果您不能建立磁片开机(例如系统上根本没 floppy drive ),或是做出来的核心太大,塞不进 floppy 中,那您可以执行 make bzlilo 将新核心装到 / 目录去,然後参考後面的 lilo.conf 设定,将 image 指向 /vmlinuz ,并用新的 label (如 linux.new ) 来测试新核心。

然而,我发现,在一些新版的核心中(如 2.4.16),它在执行 make bzlilo 的时候,却是将 vmliuz 写到 /boot 目录中。这可要小心了:以为不小心会将旧的核心内容概掉!然则,请参考後面对手工方法来安装核心。

无论如何,保持一片旧的可开机的磁碟片、以及为 /boot 目录做备份,是一个非常明智的做法。

如果新的核心是没问题,也就是能用新核心的 floppy 开机的话,等我们重新登入系统後,再回到 /usr/src/linux 目录里面,然後执行: make install

这个动作和 make bzdisk一样,只不过将核心安装。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章