==============================
2.6.36编译
=============================
6.36版本
对每一个配置选项,用户有三种选择,它们分别代表的含义如下:
<*>或[*]——将该功能编译进内核
[]——不将该功能编译进内核
[M]——将该功能编译成可以在需要时动态插入到内核中的代码
本实验在make menuconfig后,把ext2和ext3文件系统编译进内核。如果用户是在虚拟机下编译的,那么一般要把SCSI设备编译进内核。不是在虚拟机下编译的也可以把它编译进去,不会有什么影响的。
【4】编译内核
这步是时间最长的一个步骤,一般在3个小时左右。
编译内核只需在终端输入make,然后等待编译的完成。
【5】编译和安装内核模块
输入make modules_install,这步很快能完成。
【6】安装内核
输入make install
============================================================================
会调用update-initramfs,======>会调用mkinitramfs=========>生成initrd.img
==============================
root@localhost linux-2.6.32.7]# uname -a
Linux localhost.localdomain 2.6.18-194.el5PAE #1 SMP Tue Mar 16 22:00:21 EDT 2010 i686 i686 i386 GNU/Linux
====================================================================================
【7】生成启动(makeInstall 可以去掉下2步操作6.32版本)
依次输入:
sudo mkinitramfs -o /boot/initrd.img-2.6.36
// mkinitrad /boot/initrd.img 2.6.36(因版本而异)
// mkinitramfs 2.6.36 -o /boot/initrd.img
sudo update-initramfs -c -k 2.6.36
============================================
sudo update-grub2 //自动修改系统引导配置,产生grub.cfg启动文件。
六、讨论、心得
1、本次实验,共编译了两次内核,在第一次编译时,对内核的配置这块没有把ext2和ext3文件系统编译进内核,导致了编译完的内核无法成功启动。在第二次编译中,经过仔细的对内核的配置,把ext2和ext3已经SCSI编译进内核,终于成功了。这让我觉得内核编译后能否成功启动的关键是内核的配置。
2、编译后的每一个步骤执行后,可以通过查看相关目录是否生成了预期的文件来判断过程的正确与否。
3、Linux通过在系统引导后从/boot 目录下读取内核映像到内存中来完成启动。
4、initrd.img是Linux启动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模块,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其 它设备)。
如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。
5、grub.cfg文件保存着系统引导配置信息,记录着系统的启动项。新编译后的内核信息必须包含到该文件中,这样在系统启动时才会出现新的启动项的选项。
对于Redhat版本只需要以下步骤:
1.make mrproper(去掉相关联系的.o关系)
2.make clean(清除文件)
3.makemenuconfig (生成.config文件)
4.make
5.make modules install (生产模块安装)
6.make install(生产相关启动文件,grub自动生成)
make install
会调用update-initramfs,======>会调用mkinitramfs=========>生成initrd.img
====================================
menuconfig相关
=======================================
#make dep
#make clean
#make bzImage或make zImage
#make modules
#make modules_install
#depmod -a
make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
============================================================================================
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
High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。
MTTR (memory type range register)support------选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。同时用来启动pentinum pro和pentinum II 的特殊功能,如果你用的不是这类CPU就选N,否则也仅仅是使内核变大而已。
Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。
4. General setup
一般使用缺省设置就可以了。
Networking support:网络支持。必须,没有网卡也建议你选上。
PCI support:PCI支持。如果使用了PCI的卡,当然必选。
PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:热插拔设备支持。
PCMCIA/CardBus support:PCMCIA/CardBus支持。
System V IPC
BSD Process Accounting
Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。
Power Management support:电源管理支持。
Advanced Power Management BIOS support:高级电源管理BIOS支持。
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软盘支持。这个应该必选。
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。
10. Telephony Support
Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。
11. ATA/IDE/MFM/RLL support
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。
12. SCSI support
13. Fusion MPT device support
14. I2O device support
需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。
15. Network device support
网络设备支持。编译到内核里面好了,不选M了,选Y。
16. Amateur Radio support
配置业余无线广播。
17. IrDA(infrared)support
红外线支持。
18. ISDN subsystem
如果你使用ISDN上网,这个就必不可少了。
19. Old CD-ROM drivers(not SCSI、not IDE)
做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。
20. Character devices
字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:
I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。
Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
21. File systems
22. Console drivers
控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。
23. Sound
声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。
24. USB supprot
25. Kernel hacking
配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。 配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。 接下来是编译。
===================================
initrd.img错误修改
==================================
make install
会调用update-initramfs,======>会调用mkinitramfs=========>生成initrd.img
initrd.img是Linux启动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模块,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其 它设备)。
make install
会调用update-initramfs,======>会调用mkinitramfs=========>生成initrd.img
[root@localhost boot]# ls -s
总计 15636
76 config-2.6.18-194.el5PAE 952 System.map-2.6.18-194.el5PAE
8 grub 1304 System.map-2.6.32.7
2636 initrd-2.6.18-194.el5PAE.img 1304 System.map-2.6.32.7.old
2584 initrd-2.6.32.7.img 0 vmlinuz
104 memtest86+-1.65 1836 vmlinuz-2.6.18-194.el5PAE
120 symvers-2.6.18-194.el5PAE.gz 2356 vmlinuz-2.6.32.7
0 System.map 2356 vmlinuz-2.6.32.7.old
正常启动启动
编译后的报错
报错修改请看下一篇文章