http://blog.sina.com.cn/s/blog_7e49bf5e0100y4sr.html
最近对linux内核进行了编译,并安装在了vmware上。linux内核:linu-2.6.29
操作系统:redhat 5
1.linux内核源码(如果没有,可以从www.kernel.ogr上下载)
2.将内核源码解压到工作目录(这个目录可以是任意的,但是路径不能带有空格)
tar jxf linux-2.6.29.tar.bz2
3.进入内核源码,使用命令(make distclean、make clean、make mrproper三个命令中的一个即可)
4.拷贝参考配置文件为内核目录下.config
cp /boot/config-2.6.18.53.e15 .config
5.配置内核
配置内核的方式有4种:
make config
make menuconfig
make xconfig
make oldconfig
这四条命令的区别如下:
make config是基于文本的最为传统的配置界面,即字符界面。比较适合在dos下使用。
make menuconfig:基于文本选单的配置界面,比较适合在终端字符下使用。
Make xconfig:基于图形窗口模式的配置界面,可以直接通过鼠标来选择。
Make oldconfig:只是对一些新功能进行配置。
6.编译内核镜像:make bzImage(bzImage位于arch/x86/boot/目录下)
问题:make bzImage提示如下错误(这个错误不是每个人都会遇到的,可以用gcc--help查看你的gcc版本,如果你的版本是4.6或者4.6之后的应该会有下面的问题,如果比4.6的早就不会出现这个问题):
gcc: 错误: elf_i386:没有那个文件或目录
make[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] 错误 1
make[1]: *** [arch/x86/vdso] 错误 2
make: *** [arch/x86] 错误 2
解决方法:
这个问题是由于 gcc 4.6 不再支持 linker-style 架构。将 arch/x86/vdso/Makefile 中,
以 VDSO_LDFLAGS_vdso.lds 开头所在行的 "-m elf_x86_64" 替换为 "-m64"。
以 VDSO_LDFLAGS_vdso32.lds 开头所在行的 "-m elf_x86" 替换为 "-m32"。
7.编译内核模块:make modules(源于启动的菜单型配置界面中选择<m>的项)
8.安装内核模块:make modules_install(代码会拷在/lib/modules/2.6.29目录下)
9制作initrd:mkinitrd initrd-2.6.29 2.6.29(如果是ubuntu,则使用mkinitramfs命令)
10.拷贝initrd和内核镜像到/boot
cp linu-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
cp initrd-2.6.29 /boot
11.修改grub的配置文件/etc/grub.conf
后面的四行是参照上面的修改的。
12.测试新安装的内核是否能用,使用命令reboot重启系统,按住空格键不放,直到进入grub界面