21.Character devices
这是各种内核驱动程序的大杂烩。请确保启用 Virtual terminal 和 Support for console on virtual terminal,内核引导后出现的标准的基于文本的控制台需要它们。很有可能还需要启用 Unix98 PTY support。如果您希望使用并行打印机,请记住还要启用 Parallel printer support。其它所有选项通常是可选的。推荐采用“Enhanced real-time clock support”;通常需要 /dev/agpgart (AGP support) 和 Direct Rendering Manager 以利用 X 下丰富的 Linux 3D 加速功能(当您有ATI Rage 128、ATI Radeon 或 Matrox 等显卡时)。要想使 X 在加速方式中工作,除了简单地启用这些选项外还需要额外的配置步骤。
22.Multimedia devices
为捕捉audio/video用。
23.File systems
文件系统。内容太多了,建议在缺省选项的基础上进行修改。
介绍以下几项:
Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。
ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
NTFS file system support:ntfs是NT使用的文件格式,你要在linux下mount ntfs分区的话,就要选上它。记得在mount的时候,只有iocharset=cp936可以加上,codepage=936不能加。
/proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。
还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
24.Console drivers
控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。
25.Sound
声卡驱动。
26.USB supprot
USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。
至此,我们的配置工作就基本完成了。另外别忘了将你的配置保存到一个文件里,否则下次编译时又要重新配置。
四 编译和安装
现在就可以开始编译我们自己的内核了,不过这是一个比较耗时的过程,你可以准备一本自己喜欢的书或者一些好听的MP3来打发这些时间。
1.make dep
在编译内核之前,需要生成相关信息。在 /usr/src/linux 中通过运行 make dep 可以做到这一点。其任务是读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译哪些不需要。
2.make clean
作用是删除前面步骤留下的文件,以避免出现一些错误。这步不是必需的。
3.make zImage / make bzImage
这两个操作都可以实现完全编译内核,二者生成的内核都是使用gzip压缩的,使用其中之一就可以了,它们的区别在于 make bzImage 可以生成小一点的内核(因为其压缩率较高),而使用 make zImage 编译内核时有可能会出现system too big的错误提示。所以建议使用 make bzImage 命令。
编译完成后,新的内核也许会存放在/usr/src/linux/arch/i386/boot目录中。
4.make modules / make modules_install
这两个命令只有在前面的配置过程中回答 Enable loadable module support (CONFIG_MODULES) 时选了"Yes"才是必要的,但是即使在配置内核时没有启用任何模块,最好也不要省略这一步,养成编译 bzImage 后立即编译模块的习惯很有益处。make modules和make modules_install分别生成相应的模块并把模块拷贝到需要的目录中。(注意,这两步都是必需的)如果确实无模块编译,这个步骤会一闪而过。 编译完的模块你可以在/usr/lib/<kernelversion>目录中看到他们。
5.depmod -a
这个命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
编译工作到此结束。
五 为用新内核引导系统作准备
鉴于大家现在多使用GRUB,这里就只介绍 grub.conf 文件的修改。
在修改 grub.conf 文件之前,我们还有两个工作要完成,这就是将编译后新产生的两个文件复制到/boot目录下,我这里的操作在复制的过程中为两个文件改了文件名
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-new
cp /usr/src/linux/System.map /boot/System.map-new
(有人喜欢为这两个文件再做一个链接,方法是这样的:
ln -s vmlinuz-new tovmlinuz-new
ln -s System.map-new toSystem-new
如果你也做了链接,那么在下面的修改 grub.conf 文件的过程中请使用对应链接的文件名)
下面开始编辑 grub.conf 文件(vi gurb.conf)
你可以看到类似下面的内容
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
title RedFlag (2.4.26-version)
root (hd0,0)
kernel /vmlinuz-2.4.26 ro root=LABEL=/
initrd /initrd-2.4.26.img
经过我们的编辑,它应该像下面的样子(所有修改应按照自己的实际情况而定)
default=1
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
title RedFlag (2.4.26-version)
root (hd0,0)
kernel /vmlinuz-2.4.26 ro root=LABEL=/
initrd /initrd-2.4.26.img
title MyRF (new_kernel)
root (hd0,0)
kernel /vmlinuz-new ro root=/dev/hda3
initrd /System.map-new.img
保存并退出,最后我们要做的就是重启系统,看看我们自己的内核好不好用。
shutdown -r now(重启命令)
OK!我们的内核编译之旅到此结束,是不是圆满就要看你配置的内核了。
建议:最好不要删除/boot目录中的原有文件,也不要给他们改名。修改 grub.conf 文件时,最好保留原有选项,而只在原文件后添加新选项。这样即使新内核不能用,我们还可以使用原内核进行引导。
下面是网友遇到的问题及解决办法
系统:REDHAT 9 (2.4.20)升级2.6.9的内核.编译后无法启动,错误如下:
VFS:Cannot open root device "LABEL=/" or 0.0
> Please append a correct "root=" boot option
> kernel panic: VFS: Unable to mount root fs
解决方法:
1.如果/使用了EXT3文件系统,在内核中要加入对EXT3的支持
2.如果是IDE的硬盘必须要加载IDE的驱动
3.在block devices--RAM disk support中选取 Initial disk(initrd) support,有时在mount / 之前需要加载一些模块,这些 modules 被做到一个镜像文件--kernel-ver.img中,这个文件位于/boot.举例,如果EXT3是以模块加载的话,在mount /时就需要用到它,所以系统就在initrd.kernel-ver.img中寻找它.
使用命令 mkinitrd initrd.kernel-ver.img kernel-ver 可以生成initrd.kernel-ver.img
一些更正:
关于第二部分bz2包的解包命令,应当把
cat linux-x.y.z.tar.bz2 | bzip2 -d | tar -xvf
改为
cat linux-x.y.z.tar.bz2 | bzip2 -d | tar xvf -
关于第三部分内核配置的补充说明
我测试用的是2.6.13.2的内核,在配置过程中发现选项的顺序和文中的有些不同,而且有些选项进行了重新安排.在配置时应注意.文中我所建议的参考/boot目录中的config文件是可行的,其实它不但可行,而且也可以帮我们省些事.这个后面再说.另外,配置前先看看配置菜单开始部分的说明是明智的.
关于第四部分的
当我运行make dep时,只出现一个警告提示,说这不是必须的.我也没在意.make clean我没有用.
在我运行完make modules_install时,我看到第五步的depmod自动接着运行了.
2.6的内核最后一步好像与2.4的内核不同,当你运行完前面的步骤时,2.6的最后一步是运行
make install
这样你就不用进行第五大部分的操作了,但是它不会默认引导新内核,如果想默认引导新内核,需要把grub.conf中的default=1改为default=0,因为新内核的引导项是添加到前面的.
如果你是升级2.4的新内核,最后一步可能是运行
mkinitrd initrd-x.y.z.img x.y.z
用来生成.img文件,我举的这个是个例子,mkinitrd的用法是这样的
mkinitrd(make initial ramdisk images)
功能说明:建立要载入ramdisk的映像文件。
语法:mkinitrd [-fv][--omit-scsi-modules][--version][--preload=<模块名称>][--with=<模块名称>][映像文件][Kernel 版本]
好了,下面简单说一下我的实战过程
开始打算为红旗4.0升级内核,原内核2.4.20,但是出现一个奇怪的问题,make config,make menuconfig和make xconfig均不能运行,不知何故,搜索结果是中文网页中没见到类似问题,英文网页有类似问题,但还不知道如何解决.连配置都进行不了,还怎么往下进行,只得放弃.选用FC4做试验.
FC4运行make menuconfig正常,参照/boot下的config文件进行配置,但并没有进行完,原因是麻烦,于是找了个懒办法,将/boot下的config文件复制了一份到/usr/src/linux下,并改名为.config,然后使用make menuconfig的导入配置文件功能将这个.config导入,这个选项为倒数第二项,然后保存退出.之后依次运行 make bzImage
make modules
make modules_install
make install
在编译内核与模块的过程中会不时的看到警告,但仍能继续,并且现在也没什么影响(我现在用的就是新内核) 之后就是重启了,make install也会建立.img文件,不用在运行mkinitrd.我的系统重启之后就可以用新内核引导了.
通过这次编译,我更加确定成功的关键很大程度上取决于内核的配置,因为其它过程可以说没什么不同,你根本没机会做什么.如果配置没问题,但还是启动不了,那可能是启动项设置的问题,也就是grub.conf的问题,因为有时会有链接文件,或者因为文件名被改动而不能识别.这就要自己检查了.
再说点基于2.4内核系统升级的问题,看个例子吧
Redhat9,内核2.4.20版,升级到2.6.8.1内核。
1.下载内核并做安装准备
参考网上的一些文章,得知Redhat9要想成功编译2.6.8.1版内核需要升级两个工具:modutils和mkinitrd。找module-init-tools3.0版,升级:
# ./configure --prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf
由于modutils3.0和Redhat9自带的modutils2.4版不兼容,所以需要在make之前使用make moveold命令将Redhat9自带的modutils2.4版的文件改名为.old,这样使得即使在使用原有的2.4内核时modutils能够调用旧版本的modutils来工作。
新版的modutils不再使用/etc/modules.conf,而是使用/etc/modprobe.conf。
2.升级mkinitrd
mkinitrd-3.5.14-1的rpm包安装:
rpm -e --nodeps mkinitrd
rpm -i mkinitrd-3.5.14-1.i386.rpm
3.配置内核
4.编译内核
# make bzImage
# make modules
# make modules_install
# make install