|
***********************************************************************
*以下步骤有很多都是很初级的命令或解释,因为偶是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其实编译步骤里最难的就是内核参数的配置,我在这里耗费了很多时间, 更惨的是开始并没有认识到这一点,以为是那
[1] [2] [3] [4] 下一页
|