linux内核编译过程的最终总结版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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目录下