现在,我们已经把内核源程序升级到最新版本了,下面就让我们开始内核编译的旅程吧。
3.内核编译
准备工作
通常要运行的第一个命令是:
#cd/usr/src/linux-2.6.2;makemrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
配置核心
有三种方法配置核心:
makeconfig
makemenuconfig
makexconfig
三者的区别见书:
P22
运行makeconfig
HOSTCCscripts/fixdep
/bin/sh:
gcc:
commandnotfound
make[1]:
***[scripts/fixdep]Error127
make:
***[scripts/fixdep]Error2
运行makemenuconfig和makeoldconfig:
HOSTCCscripts/fixdep
/bin/sh:
gcc:
commandnotfound
make[1]:
***[scripts/fixdep]Error127
make:
***[scripts/fixdep]Error2
在该实验中我们无法通过其中一种进行配置!
!
这是我们第一次运用的linux-2.6.4内核产生的错误,后来通过老师了解到,内核要可以编译还需要与内核相应的其它支持,如果没有相应的软件支持,低版本不一定都可以升级到高一级版本。
所以我们后来就改用了linux-2.4.24内核。
我们通过其它方法接下来做
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。
它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。
如:
asm指向/usr/src/linux/include/asm-i386等。
若没有这些链接,就需要手工创建,按照下面的步骤进行:
#cd/usr/include/
#rm-rasmlinuxscsi
#ln-s/usr/src/linux/include/asm-i386asm
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
这是配置非常重要的一部分。
删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目录。
这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。
(这就是为什么我们上面又在/usr/src下多创建了个名为linux的链接)
配置
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#makeconfig(基于文本的最为传统的配置界面,不推荐使用)
#makemenuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#makexconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
这三个命令中,makexconfig的界面最为友好,我使用Xwindow,所以我运用
makexconfig命令
我们组其它成员,按要求,有各自用不同的命令进行配置
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
使用的是makexconfig,使用鼠标就可以选择对应的选项。
如果使用的是makemenuconfig,则需要使用空格键进行选取。
你会发现在每一个选项前都有个括号,但有的是中括号有的是尖括号,还有一种圆括号。
用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。
而圆括号的内容是要你在所提供的几个选项中选择一项。
(我们对在编译用makeconfig命令中产生的英文配置信息进行了查找,符在后面)
4.编译
makedep
makeclean
makezImage
(如上我们所述makedep的创建依赖性列表,并确定以何种顺序来招待核心修改的工作。
makeclean命令卸载用户所有不再使用的文件。
makezImage编译核心
5.安装
主要是对LILO进行配置,使其可以启动新的内核。
我们通过如下方法进行修改
cp./arch/i386/boot/zImage/boot/vmlinuxz-$VERSION
cd/boot
rmvmlinuz
ls–svmlinuz-$VERSIONvmlinuz
lilo–v
其中$VERSION代表内核的版本号。
这是通过修改LILO。
CONF文件来实现的!
还可以用Loadlin
把zImage文件复制到相应的DOS分区内重启系统
还可以用boot软盘
运行makezdisk来创建启动软盘
6编译和安装
只要核心配置完成之后,马上编译模块,在/usr/src/linux-2.6.2下使用如下命令:
makemodules
用root用户来安装模块,用
makemodules_install
这时模块就安装到/lib/modules下的某个目录中,目录名以核心的版本号来命名
接下来就要把模块加载入核心。
以上这两个文件是我们刚才编译时新生成的。
下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:
#cd/boot;rm-fSystem.mapvmlinuz
#ln-svmlinuz-2.4.0test8vmlinuz
#ln-sSystem.map-2.4.0test8System.map
然后修改/etc/lilo.conf:
#vi/etc/lilo.conf
增加如下一段:
image=/boot/vmlinuz-2.4.0test8
label=linux240
read-only
root=/dev/hda2
其中root=/dev/hda2一行要根据需要自行加以修改。
运行:
#/sbin/lilo-v
确认对/etc/lilo.conf的编辑无误,现在重新启动系统:
#shutdown-rnow
在机器重启后出现LILO时按TAB键,软件linux2.4.24,我们的新内核发挥作用
符录:
下面就让我们对常用的选项分别加以介绍:
1.Codematurityleveloptions
代码成熟等级。
此处只有一项:
promptfordevelopmentand/orincompletecode/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。
2.Loadablemodulesupport
对模块的支持。
这里面有三项:
Enableloadablemodulesupport:
除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Setversioninformationonallmodulesymbols:
可以不选它。
Kernelmoduleloader:
让内核在启动时有自己装入必需模块的能力,建议选上。
3.Processortypeandfeatures
CPU类型。
内容蛮多的,不一一介绍了,有关的几个如下:
Processorfamily:
根据你自己的情况选择CPU类型。
HighMemorySupport:
大容量内存的支持。
可以支持到4G、64G,一般可以不选。
Mathemulation:
协处理器仿真。
协处理器是在386时代的宠儿,现在早已不用了。
MTTRsupport:
MTTR支持。
可不选。
Symmetricmulti-processingsupport:
对称多处理支持。
除非你富到有多个CPU,否则就不用选了。
4.Generalsetup
这里是对最普通的一些属性进行设置。
这部分内容非常多,一般使用缺省设置就可以了。
下面介绍一下经常使用的一些选项:
Networkingsupport:
网络支持。
必须,没有网卡也建议你选上。
PCIsupport:
PCI支持。
如果使用了PCI的卡,当然必选。
PCIaccessmode:
PCI存取模式。
可供选择的有BIOS、Direct和Any,选Any吧。
Supportforhot-pluggabeldevices:
热插拔设备支持。
支持的不是太好,可不选。
PCMCIA/CardBussupport:
PCMCIA/CardBus支持。
有PCMCIA就必选了。
SystemVIPC
BSDProcessAccounting
Sysctlsupport:
以上三项是有关进程处理/IPC调用的,主要就是SystemV和BSD两种风格。
如果你不是使用BSD,就按照缺省吧。
PowerManagementsupport:
电源管理支持。
AdvancedPowerManagementBIOSsupport:
高级电源管理BIOD支持。
5.MemoryTechnologyDevice(MTD)
MTD设备支持。
可不选。
6.Parallelportsupport
串口支持。
如果不打算使用串口,就别选了。
7.PlugandPlayconfiguration
即插即用支持。
虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。
8.Blockdevices
块设备支持。
这个就得针对自己的情况来选了,简单说明一下吧:
NormalPCfloppydisksupport:
普通PC软盘支持。
这个应该必选。
XTharddisksupport:
CompaqSMART2support:
MulexDAC960/DAC1100PCIRAIDControllersupport:
RAID镜像用的。
Loopbackdevicesupport:
Networkblockdevicesupport:
网络块设备支持。
如果想访问网上邻居的东西,就选上。
Logicalvolumemanager(LVM)support:
逻辑卷管理支持。
Multipledevicesdriversupport:
多设备驱动支持。
RAMdisksupport:
RAM盘支持。
9.Networkingoptions
网络选项。
这里配置的是网络协议。
内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。
如果懒得看,使用缺省选项(肯定要选中TCP/IPnetworking哦)就可以了。
让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qosand/orfairqueueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。
10.TelephonySupport
电话支持。
这个是什么东东?
让我查查帮助,原来是Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。
记住,电话卡可和modem没有任何关系哦。
11.ATA/IDE/MFM/RLLsupport
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。
12.SCSIsupport
SCSI设备的支持。
我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。
13.IEEE1394(FireWire)support
这个是什么?
低版本的没有见过,看看帮助再说。
原来是要Fireware硬件来提高串行总线的性能,我没有,不选了。
14.I2Odevicesupport
这个也不清楚,帮助里说是这个需要I2O接口适配器才能支持的,在智能Input/Output(I2O)体系接口中使用,又是要硬件,不选了。
15.Networkdevicesupport
网络设备支持。
上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。
还好还好,里面大概分类了,有ARCnet设备、Ethernet(10or100Mbit)、Ethernet(1000Mbit)、WirelessLAN(non-hamradio)、TokenRingdevice、Waninterfaces、PCMCIAnetworkdevicesupport几大类。
我用的是10/100M的以太网,看来只需要选则这个了。
还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeckRTL-8139PCIFastEthernetAdaptersupport,为了免得麻烦,编译到内核里面好了,不选M了,选Y。
耐心点,一般说来你都能找到自己用的网卡。
如果没有,你只好自己到厂商那里去要驱动了。
16.AmateurRadiosupport
又一个不懂的,应该是配置业余无线广播的吧,没有,不要了。
17.IrDA(infrared)support
这个要红外支持,免了。
18.ISDNsubsystem
如果你使用ISDN上网,这个就必不可少了。
自己看着办好了。
19.OldCD-ROMdrivers(notSCSI、notIDE)
做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,反正我是用的IDE的CD-ROM,不选这个。
20.Characterdevices
字符设备。
这个内容又太多了,先使用缺省设置,需要的话自己就修改。
把大类介绍一下吧:
I2Csupport:
I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。
如果你要选择下面的VideoForLinux,该项必选。
Mice:
鼠标。
现在可以支持总线、串口、PS/2、C&T82C710mouseport、PC110digitizerpad,自己根据需要选择。
Joysticks:
手柄。
即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。
WatchdogCards:
虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。
如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。
有了这个文件,你就可以恢复系统到重启前的状态了。
VideoForLinux:
支持有关的音频/视频卡。
Ftape,thefloppytapedevicedriver:
PCMCIAcharacterdevicesupport:
21.Filesystems
文件系统。
内容又太多了,老法子,在缺省选项的基础上进行修改。
介绍以下几项:
Quotasupport:
Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
DOSFATfssupport:
DOSFAT文件格式的支持,可以支持FAT16、FAT32。
ISO9660CD-ROMfilesystemsupport:
光盘使用的就是ISO9660的文件格式。
NTFSfilesystemsupport:
ntfs是NT使用的文件格式。
/procfilesystemsupport:
/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则