linux内核编译过程的最终总结版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本以2.6.5内核为例,虽然2.6的内核编译有更为方便的过程,但这里还是按照最经典的方式,这样最保险。一些过程说明经过了本人的精简,相关的疑问请自行用网络搜索答案,只保证本人看的懂;)一些设置按照自己的情况调整,不要完全照搬。对于编译内核造成的损失(比如LP跑了,再也不回来),本人不负任何责任:)仅供参考。

1.download linux-

2.6.5.tar.gz

2.cp linux-2.6.5.tar.gz /usr/src

3.cd /usr/src

4.mv linux linux_old

5.tar xvzf linux-2.

6.5.tar.gz

bzip2 -d linux-2.6.5.tar.bz2

tar -xvf linux-2.6.5.tar

或者tar jxvf linux-2.6.5.tar.bz2

6.cd /usr/include

rm -rf asm linux scsi

ln -s /usr/src/linux/include/asm-i386 asm

ln -s /usr/src/linux/include/linux linux

ln -s /usr/src/linux/include/scsi scsi

7.cd /usr/src/linux

make mrproper (检查有无不正确的.o文件和依赖关系,使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。)

8.make config 或

make menuconfig (推荐)或

make xconfig

选择完返回MainMenu,选择save and exit,退出配置窗口并关闭超级用户终端。现在可以退出xwindows了,回到文本环境(这样做可以加快内核编译速度)执行最后操作

9.make dep

10.make zImage

若想做成启动盘的形式可make zdisk,若kernel大于512K,应用make bzImage (推荐)

11.make modules make modules_install depmod -a

12.cp /usr/src/linux/arch/i386/boot/zImage /boot (用的是make zImage) 或cp /usr/src/linux/arch/i386/boot/bzImage /boot (用的是make bzImage)

13.修改lilo.conf 或grub.conf(添加)

image=/boot/zImage(或bzImage)

label=new

root=...

14. lilo & grub

lilo -v 使改动生效。建议保留旧内核的项目,避免编译失败。通常grub 配置文件在下面三个地方(根据发行版的不同):

/etc/grub.conf

/boot/grub/menu.lst

/boot/grub/grub.conf

15. shutdown -r now

如果你的kernel 支持内存镜像,就用mkinitrd 命令制作一个镜像文件,然后拷贝到/boot 路径下。要这么做,也要记得在make menu 的时候记得选择内核镜像ram image,并且不能安装为模块,否则initrd 就不会运作。生成映像文件,否则有时系统启动时会找不到/根分区。

initrd.img就是initrd-2.4.20-8.img文件的链接

#ln -s initrd-2.4.20-8.img initrd.img

有的时候mkinitrd 失败,只要加上:--without-scsi-module 就可以通过了。

把旧内核源文件下的.config文件拷贝到新内核源文件下,

如cp /usr/src/linux-2.4.22/.config /usr/src/linux-2.6.5/

然后在新内核目录下运行make oldconfig,如果想改动什么,可以

make menuconfig,但是一定要先make oldconfig。然后就编译内核,很容易:make bzImage make modules make modules_install make install 然后到/boot 看看是不是已经有新内核文件了,再看/boot/grub/grub.conf是否已经加载了新内核。shutdown -r now

cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.5(新内核的bzImage的位置也有可能在/usr/src/linux/i386/下)

cp /usr/src/linux/System.map /boot/System.map-2.6.5

make clean

没有make clean 之前,如果增加了新的模块,可以直接make menuconfig && make moduels && make modules_install,不需要全部重新来过。如果你以后还要利用这次编译的成果,也可以省略这一步,如果你想直接删除源代码目录,也可以省略这一步。

一些升级内核前的备份过程:

cd /boot/

mv System.map System.map.old

mv vmlinuz vmlinuz.old

cd /usr/src/

ln -s linux-2.6.5 linux

进入/usr/include目录下,将asm、scsi、linux三个目录改名

[root@localhost /usr/include]# mv asm asm.OFF

[root@localhost /usr/include]# mv scsi scsi.OFF

[root@localhost /usr/include]# mv linux linux.OFF

建立指向新内核的位置到第三步中被改名的原目录

[root@localhost /usr/include]# ln -s /usr/src/linux/include/asm-i386 asm

[root@localhost /usr/include]# ln -s /usr/src/linux/include/scsi scsi

[root@localhost /usr/include]# ln -s /usr/src/linux/include/linux linux

检验# ls /boot

如果看到了vmlinuz-2.6.0 和System.map-2.6.0 ,那么恭喜你,成功了!

如果你是用make install 安装的,还会看到个config-2.6.0 文件

cd /boot/

ln -s vmlinuz-2.6.5 vmlinuz

ln -s System.map-2.6.5 System.map

(上面的两步的作用是保护真正的内核镜像不受损坏)

vmlinuz是压缩的内核二进制可执行文件

#du -sh vmlinuz-2.6.5用来查看新的内核有多大

如果你的Kernel 配置支持Modules的话,解决那些问题是比较简单的

只要编译那些.o文件就可以啦.

比如我的声卡经常Irq 和IO 不对, 我就到/usr/src/linux/drivers/sound目录下

相关文档
最新文档