红联Linux门户
Linux帮助

linux配置多内核启动

发布时间:2008-09-03 00:24:46来源:红联作者:Inmaxen
在fedora下研究驱动的开发,所以想用一个标准的linux内核,于是尝试在fedora上构建多内核。经过昨天一天的尝试终于成功了。过程其实并不复杂。在这简要说一下,一来做个总结,二来或许能给其他人提供参考。

1、下载内核源码

从linux官方网站http://www.kernel.org上下载内核源码。我下的是linux2.6.20

下载后放在/usr/src/kernels下,fedora8 的usr/src下有kernels文件夹,一般直接放在/usr/src下

2、配置内核

根据你的pc实际情况配置,比较繁琐,一般大部分可以默认。我用的是虚拟机,其中关键几个设置参考了网上的一篇文章,如下:

配置内核选项。有点繁琐,~~希望一次成功哦~~。
# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18目录下)
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2)Device Drivers--->Block Devices中选上“Loopback device support”;
Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;
Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”;
Device Drivers --->USB support --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32 PCI support
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;
注意:
ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:
kernel panic : no init found ,try passing init = option to kernel.....
或者是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic - not syncing: No init found. Try passing init = option to kernel
(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
Device Drivers ---><*>SCSI device support (此项不选的话,下面两项就选择不上)
Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support

3、编译内核及内核模块

执行如下命令

$make dep

$make clean

$make bzImge //这个时间相对比较长,可以去外面转悠转悠再回来

$make modules

$make modules_install

有的教程会继续有make install这个命令是把内核自动安装到指定位置,是否会覆盖掉原内核我没有考证,但我执行这一步后,从启就进不了系统了,郁闷!

4、手动创建内核启动文件

主要是三个文件:bzImage-version,initrd.img-version,System.map-version

创建过程参见上一篇文章:内核启动的几个内核文件 不同内核的makefile不同所以文件生成的位置有所不同。

注意的是由于boot下有两组(多内核的话多组)内核启动的三个文件,最好加上version加以区分。

5、修改grub.conf或lilo

按照原grub.conf样式增加一个内核选项即可。

ok,到此为止,重启就会多出个内核选项,内核名可以在grub.conf中自己改。
文章评论

共有 1 条评论

  1. windycool 于 2008-09-16 21:19:15发表:

    你要编译的内核应该是linux2.6.20吧?差点误导了。。