|
|
本人有幸来此论坛,受益良多,为了感谢大家并将众人的经验在新的OS中发扬光大,利益后来者;特将我 的成功经验加以总结,供所有对内核编译望而却步的人参考~~
内核编译的原理性认识,建议参考北南的文章
步骤如下:
首先确认 ./usr/src/ 下面有自己的源代码,我的是 /usr/src/linux-2.4.31
(如果升级内核,则拷贝原光盘下面的 linux-2.6.13到主目录下,我的是 /root/linux-2.6.13,然后运行 installpkg kernel-source*.tgz. 由于编译方法一样,下面以2.4.31为例)
第二步,内核的配置
#cd /usr/src/linux*31
#make mrproper (如果初次编译,则此命令可以免了;如果以前编过多次,此命令最好还是运行一下,作用是清除当前目录下 *.o等文件)
#make xconfig (或者make menuconfig, make gconfig, make oldconfig)
手工配置各个选项,比如如果声卡出问题了需要编译内核,那么通常是通用设备,声卡,字符设备等,具体根据情况决定。各个选项有帮助文档可以参考,其实多经历几次,也就不会觉得难了。
选定结束后,注意保存,然后退出
第三步,
#make dep 我是这么干的,不管3721先make dependence一下
如果显示什么信息,不要管它。进入下一步
第四步,编译内核:
通用的办法就是:
#make && make modules &&make modules_install &&make install
按回车,让系统替你编译,你可以趁这段时间(较长)抽抽烟,喝喝酒...
第五步,如何使得新内核工作(一):
也是关键的一步,很容易出现错误,编译不成功,多半在这里没有处理好善后工作。
具体如下:
5-1:
首先确定 /root下有两个新文件 vmlinuz, System.map 。如果没有(多数没有,有时侯有;我也不清出,好象2.6×是有的),则手工拷贝: /usr/src/linux-2.4.31/arch/i386/boot/bzImage -->/boot/vmlinuz; /usr/src/linux-2.4.31/System.map-->/boot/System.map;
5-2:
#cd /boot
#mkinitrd -c -k 2.4.31 -m reiserfs (如果报错说没有 reiserfs module,则删去后面的 -m reiserfs也没有关系)
这时候注意看一看,是否有一个initrd.gz的文件,而且修改时间是不是刚才的时间。(很重要)如果不是,那么后面的就不能再看下去了,否则最后出现VFS错误。
但是我实验成功,估计你也会顺利通过的。
5-3:经过5-2后,确认是否有两个新产生的文件 vmlinuz, initrd.gz
如果有,那么修改lilo,具体见下一步
第六步,如何使得新内核工作(二)
#vi /etc/lilo.conf
加入下面一项:
(注意:是加入,原有选项不要删,以免失败后可以用原系统起动//由于这个原因 ,当初编译前,将原有的重要文件改名,以免覆盖---我前面省略了这些步骤的说明;不过按照我说的步骤一步一步过来,通常不保存也没有关系)
image = /boot/vmlinuz
initrd=/boot/initrd.gz
root = /dev/hda7 //这里要修改成你的根目录所在的分区,我的是/dev/hda7
label = Linux-new
read-only
为了方便理解,贴出我的lilo.conf片段如下:
# Windows bootable partition config begins
other = /dev/hda1
label = Windows
table = /dev/hda
# Windows bootable partition config ends
# Linux bootable partition config begins
image = /boot/vmlinuz
initrd=/boot/initrd.gz
root = /dev/hda7
label = Linux-new
read-only
。。。。
第七步,如何使得新内核工作(三)
在命令终端运行lilo命令
#lilo
为了避免忘记这关键的一小步,我专门作为一步(我就忘过一次,教训)
回车后,等他自动运行完以后,你就可以重新启动了。(当然还要注意,命令运行时没有出错信息,比如我就遇到过label=linux-2.4.31-new-hand,报错说名字过长 ) |
|