日期:2014-05-16  浏览次数:20736 次

linux内核编译过程的最终总结版
http://www.cnblogs.com/top5/archive/2011/03/04/1970645.html
 
参考了linuxsir和水母的linux版的精华区,本人不保留任何版权。
经过归纳整理,看看上面的就可以了,包括补丁如何打。具体的一些选项可以往下看,一些一看就懂的白痴选项,并没有选进来,因此适合对电脑软硬件都有所了解的人参考。
基本以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 就不会运作。生成映像文件,否则有时系统启动时会找不到/根分区。
mkinitrd /boot/initrd-.2.4.20-8.img 2.4.20-8
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 文件
c