分享
 
 
 

在RedHat linux 8.0下完整详尽的内核编译步骤和说明

王朝system·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

在RedHat linux 8.0下完整详尽的内核编译步骤和说明

在RedHat linux 8.0下完整详尽的内核编译步骤和说明 ***********************************************************************

*以下步骤有很多都是很初级的命令或解释,因为偶是linux新手,

*在编译过程中走了很多弯路,花了大量时间找各种解决办法,所以

*把相应的命令都写了出来,希望对跟偶一样的才入门不久而又想

*编译内核的新手有所帮助!

*

* kilvon 05-Mar-2003

**********************************************************************

基本编译情况说明:偶目前的版本是: RedHat linux 8.0

(机器有双操作系统:linux和windows 2000)

内核版本是 2.4.18-14,硬件是笔记本compaq 的某一型号,

下载的内核版本是2.4.20(在www.kernel.org上可以找到),

推荐编译内核时使用高版本,而不是在以前的版本上编译,

原因见第7.1步的说明

在编译开始前,建议先在windows下用相关软件对硬件做一个

详细统计,包括硬件类型,厂家,芯片版本等等,特别是笔记本

和品牌机,因为二者很多部件都是OEM其它厂家的,并把它打印

出来以供配置内核时使用.(linux下也可以用:系统工具->

硬件浏览器来查看)

另外建议在身旁准备几张纸和笔,随时把你认为重要的信息记下来,

当然包括错误信息了,以帮助以后判断和解决问题.

1.将内核源码包linux-2.4.20.tar.bz2 copy至/usr/src目录下:

#cp linux-2.4.20.tar.bz2 /usr/src

#cd /usr/src

2.将指向以前内核版本的symbol link删除

#rm -f linux-2.4

3.用以下命令解开压缩包

#bzip2 -d linux-2.4.20.tar.bz2

#tar -xvf linux-2.4.20.tar

4.创建新的symbol link以链接到刚解开的源码所在目录

#ln -s linux-2.4.20 linux-2.4

5.进入到以后编译时用的工作目录虾:

#cd /usr/src/linux-2.4

6.该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语

言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互

倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这

些源码编译内核,那么一定要先运行本命令.

#make mrproper

7.为了不影响已经可用的内核(比如安装linux时装入的内核),现在需要

保存以前的可用的内核(以使得编译失败仍然可以"方便的"启动linux),

并且我们要对本次编译的内核标识一个容易辨认的标记,以下几步与

编译暂时无关.

7.1偶使用grub作为boot manager,所以要修改grub.conf文件,

#cp /boot/grub/grub.conf /boot/grub/grub.conf.bck

(建议有条件打印一份原始的grub.conf文件,原因见第7.4步)

#emacs /boot/grub/grub.conf

(emacs小提示: ctrl+ x +s 为保存结果,ctrl + x +c为关闭emacs,

删除n行文字为:先把光标放在要删除文字的起始处 ctrl + u,然后敲入要

删除的行数,比如4,最后ctrl + k)

下面是偶的grub.conf内容:

default=1

timeout=10

splashimage=(hd0,6)/grub/splash.xpm.gz

title Psyche (2.4.18-14 standard)

root (hd0,6)

kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8

initrd /initrd-2.4.18-14.standard.img

title Windows 2000

rootnoverify (hd0,0)

chainloader +1

注意kernel...和initrd...两条语句,因为要与以下改动对应:

#rm -f /boot/System.map

#rm -f /boot/vmlinuz

#cp /boot/System.map-2.4.18-14 /boot/System.map-2.4.18.standard

#ln -s /boot/System.map-2.4.18.standard /boot/System.map

#cp /boot/vmlinuz-2.4.18-14 /boot/vmlinuz-2.4.18-14.standard

#ln -s /boot/vmlinuz-2.4.18-14.standard /boot/vmlinuz

#cp /boot/initrd-2.4.18-14.img /boot/initrd-2.4.18-14.standard.img

(initrd只用了copy,因为偶是编译一个高版本的内核,而不是同一个版本

内核的重新编译,编译高版本的好处在于系统会建立另外的目录而不会

用新编译的(可能是错的)版本覆盖以前的版本,看一下/lib/modules目录

就明白了.)

7.2如何知道你的根目录"\"在哪个partition上? 命令为:

#df

以下是偶机器的部分输出:

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda8 4137264 2136592 1790508 55% /

...

看看你的系统根目录装在哪里很重要,因为后面你将会看到系统安装编译好的内核时在grub.conf插入的命令中root=LABEL=/ hdc=ide-scsi

可能会引发系统引导时的如下错误:

VFS: Cannot open root device "" or 00:00

Please append a correct "root=" boot option

Kernel panic: VFS: Unable to Mount root fs on 00:00

所以要在grub.conf里修改其命令为:root=/dev/hda8

7.3好了,做完这些准备工作后,我们要--

重启一下机器,:)不要急,应为要先确认7.1步的工作的正确性,以免把7.1错误

带入以后的步骤中.(编译内核一定要非常小心谨慎,不能急躁,否则,嘿嘿...)

7.4如果在重启过程中系统有问题,可以在grub的引导界面上临时改动grub引

导参数,相关命令有:

e -编辑引导命令

ESC键 -回到上级目录

o -插入一行命令

b -开始引导系统

d -删除一行

其实你可以把grub控制台上的命令都删了(只影响本次启动),然后按照

/boot/grub/grub.conf里的命令手工在grub控制台上敲进去,也是一样的效果.

7.5如果你能使用重新配置的grub命令正确启动系统,那么让我们开始真正的

编译工作吧!!!!

7.6先保证我们在编译的工作目录下:

#cd /usr/src/linux-2.4

然后编辑Makefile(这个文件是用来控制编译用的),找到这一行:

EXTRAVERSION =

修改为(以偶本次编译为例,也可以是任意的合法字符串,比如"-sema-v.4")

EXTRAVERSION = -kilvon.001

8.偶是在X Window下编译:

#make xconfig

8.1如果你是在文本模式下,用

#make menuconfig

8.2其实编译步骤里最难的就是内核参数的配置,我在这里耗费了很多时间,

更惨的是开始并没有认识到这一点,以为是那些命令的使用...所以,接着看吧:

8.3选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块(哪些较远?看各人对linux和操作系统概念的理解程度了,还有就是看所配置项的help),有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。下面对常用的选项分别加以介绍:

/1. Code maturity level options

代码成熟等级。此处只有一项:

prompt for development and/or incomplete code/drivers

如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须

把该项选择为Y了;否则可以把它选择为N。

/2. Loadable module support

对模块的支持。这里面有三项:

Enable loadable module support:

除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。

Set version information on all module symbols:

可以不选它。

Kernel module loader:

让内核在启动时有自己装入必需模块的能力,建议选上。

/3. Processor type and features

CPU类型,选项很多,不一一介绍了,有关的几个如下:

Processor family:

根据你自己的情况选择CPU类型。

High Memory Support:

大容量内存的支持。可以支持到4G、64G,一般可以不选。

Math emulation:

协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。

MTTR support:MTTR支持。可不选。

Symmetric multi-processing support:

对称多处理支持。除非你富到有多个CPU,否则就不用选了。

/4. General setup

这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:

Networking support:

网络支持,必须选,没有网卡也建议选上。

PCI support:

PCI支持,必选.

PCI access mode:

PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。

Support for hot-pluggabel devices:

热插拔设备支持,可选.

PCMCIA/CardBus support:

PCMCIA/CardBus支持,有PCMCIA就必选了。

System V IPC

BSD Process Accounting

Sysctl support:

以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。

如果你不是使用BSD,就按照缺省吧。

Power Management support:电源管理支持,可选上,特别是笔记本.

Advanced Power Management BIOS support:高级电源管理BIOD支持。

/5. Memory Technology Device(MTD)

MTD设备支持

可不选。

/6. Parallel port support

串口支持。如果不打算使用串口,就别选了。

/7. Plug and Play configuration

即插即用支持。选上吧,可以体验一下Linux下即插即用的感觉。

/8. Block devices

块设备支持,需要针对每个人的具体情况来选:

Normal PC floppy disk support:普通PC软盘支持,一般要选,我的没有,

就没选

XT hard disk support:

Compaq SMART2 support:

Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。

Loopback device support:

Network block device support:网络块设备支持。如果想访问网上邻居的

东西,就选上。

Logical volume manager(LVM)support:逻辑卷管理支持。

Multiple devices driver support:多设备驱动支持。

RAM disk support:RAM盘支持。

/9. Networking options

网络选项。这里配置的是网络协议。自己看吧.

除了肯定要选中TCP/IP networking外,其它看着办吧

/10. Telephony Support

Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务.详细情况可看看help内容.

/11. ATA/IDE/MFM/RLL support

这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省

的选项吧,偶有PCMCIA卡,各人机器情况不一样.

/12. SCSI support

SCSI设备的支持, 如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了.

/13. IEEE 1394(FireWire)support

偶的是灰的,不用操心了,:))

/14. I2O device support

在智能Input/Output(I2O)体系接口中使用,不会,用缺省吧.

/15. Network device support

网络设备支持。上面选好协议了,现在该选设备.

为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去当驱动了,

或者去www.mydrivers.com看看

/16. Amateur Radio support

没有,不选.

/17. IrDA(infrared)support

这个要红外支持,我的有.

/18. ISDN subsystem

如果你使用ISDN上网,这个就必不可少了

/19. Old CD-ROM drivers(not SCSI、not IDE)

专门为非SCSI/IDE口的光驱做的,但谁还在用那么老的东东啊,自己选吧.

/20.Input Core Support

这个选项很重要,除了joystick(游戏遥控杆)建议都选"m".切记!

/21. Character devices

字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改:

I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行

总线协议。如果你要选择下面的Video For Linux,该项必选。

Mice:鼠标。如果是笔记本,建议在Bus Mouse Support选上"y".

Joysticks:手柄。即使在Linux下把手柄驱动起来意义不大

Watchdog Cards:虽然称为Cards,这个可以用纯软来实现,当然也有

硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为

watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新

启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。

Video For Linux:支持有关的音频/视频卡。

Ftape, the floppy tape device driver:

PCMCIA character device support:

/22.Multimedia devices

为捕捉audio/video用,如果感兴趣看看help

/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

用缺省

/25 Sound

你用什么声卡?选选吧.

/26 USB Support

很重要,至少要选以下选项

Support for USB

UCHI Alternate Deriver (JE) Support

OCHI (Compaq,iMacs...

USB Audio...

USB MIDI...

USB Human Interface Device (full HID) support

HID input layer support

/dev/hiddev raw HID...

USB LCD device support

因为偶的硬件很多都要求USB HID 支持,所以这里选了不少

*如果有某些选项那不准,可以参考:

/usr/src/linux-2.4/Documentation/Configure.help

也可以search整个系统并看看相关的文字都在哪些文件出现:

#find /usr -name "*.*" -print -exec grep

-q -s mousedev {} \; -print

这个长命令很有用

8.4别忘了将你的配置保存到一个文件里,否则下次编译时又要重选!

Load Configuration from file

比如保存到/home/kilvon/conf/Kernel-kilvon.001

8.5用以下命令读取刚才的配置数据使之生效:

#make dep

#make clean

9.开始编译内核和模块

#make bzImage

#make modules

#make modules_install

10.将编译好的文件移到/boot下;如果上面某步有错,大部分情况是由于

配置内核选项时将一些当前版本只能编译为modules的选为编译到内核里,

我遇到好几次这样的情况.应为既然www.kernel.org发布一个稳定的内核,

(偶没down那些alpha,beta版)9成9可以成功的编译.

#move /usr/src/linux-2.4/System.map /boot/System.map-2.4.20-kilvon.001

#move /usr/src/linux-2.4/arch/i386/boot/bzImage

/boot/vmlinuz-2.4.20-kilvon.001

#rm -f System.map

#rm -f vmlinuz

#ln -s /boot/System.map-2.4.20-kilvon.001 /boot/System.map

#ln -s /boot/vmlinuz-2.4.20-kilvon.001 /boot/vmlinuz

11.作些收尾工作:

#new-kernel-pkg --install --depmod --mkinitrd 2.4.20-kilvon.001

--mkinitrd 作Initial Ramdisk的,可以直接敲个mkinitrd -h看看

--depmod 检查内核中有没有未解析的symbol

--install 在grub中安装一个启动选项

12.看看第7.2步的相关解释,现在请修改/boot/grub/grub.conf文件,

以下是修改后的grub.conf:

default=2

timeout=10

splashimage=(hd0,6)/grub/splash.xpm.gz

title Psyche (2.4.20-kilvon.001)

root (hd0,6)

kernel /vmlinuz-2.4.20-kilvon.001 ro root=/dev/hda8

initrd /initrd-2.4.20-kilvon.001.img

title Psyche (2.4.18-14 standard)

root (hd0,6)

kernel /vmlinuz-2.4.18-14.standard ro root=LABEL=/ hdc=ide-scsi

initrd /initrd-2.4.18-14.standard.img

title Windows 2000

rootnoverify (hd0,0)

chainloader +1

13.再好好检查一下/boot下的文件名是否敲对了(前面有好多的mv,cp动作)

[root@localhost boot]# ll

total 8880

5824 9月 6 04:53 boot.b

612 9月 6 04:53 chain.b

42150 9月 5 01:47 config-2.4.18-14

1024 3月 5 21:32 grub

130983 3月 5 03:49 initrd-2.4.18-14.img

130983 3月 4 20:21 initrd-2.4.18-14.standard.img

65499 3月 5 21:31 initrd-2.4.20-kilvon.001.img

473 3月 5 03:49 kernel.h

12288 3月 5 03:44 lost+found

23108 9月 6 22:05 message

21282 9月 6 22:05 message.ja

21 3月 5 03:49 module-info -> module-info-2.4.18-14

15436 9月 5 01:47 module-info-2.4.18-14

15436 3月 4 20:21 module-info-2.4.18.standard

16834 3月 5 21:17 MyKernelSetup-kilvon.001

640 9月 6 04:53 os2_d.b

28 3月 5 19:32 System.map -> System.map-2.4.20-kilvon.001

507814 9月 5 01:47 System.map-2.4.18-14

507814 3月 4 20:20 System.map-2.4.18-14.standard

588175 3月 5 21:24 System.map-2.4.20-kilvon.001

3236438 9月 5 01:47 vmlinux-2.4.18-14

31 3月 5 12:51 vmlinuz -> /boot/vmlinuz-2.4.20-kilvon.001

1125194 9月 5 01:47 vmlinuz-2.4.18-14

1125194 3月 4 20:19 vmlinuz-2.4.18-14.standard

1458790 3月 5 21:24 vmlinuz-2.4.20-kilvon.001

14.好了,来吧:

#reboot

15.如果有错无法启动,这回到grub控制台然后用以前的内核启动,还记得吗?前面第7步的"额外"工作将在这时为你节省大量时间...

16.如果系统可以启动到登录界面并可以登录,但启动过程中有Failed的项,查看:/var/log/boot.log或该目录下搜索一下,看看是什么问题,偶就遇到类似问题,

后来通过改变内核编译的配置而解决掉这些讨厌的红色文字,好了,就写到这里,已经是3月6号凌晨1点钟了,偶要睡觉了,明天还要上班.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有