内核编译实验环境:Ubuntu 10.04 内核版本 2.6.32-36-generic
过程概述:
下载源码:下载链接:http://www.kernel.org/pub/linux/kernel/v2.6/
配置内核:make menuconfig
编译内核:make bzImage
编译内核模块:make modules
安装内核模块:make modules_install
安装内核:make install
完成最后遗留工作
一、内核编译的准备工作:
1。使用root用户,方便以后操作
jb@jb-laptop:~$ su密码:
root@jb-laptop:/home/jb#
2。查看自己内核版本,以便选择新编译版本
root@jb-laptop:/home/jb# uname -r
2.6.32-36-generic
root@jb-laptop:/home/jb#
3。下载升级版本源码,供编译使用
下载链接:http://www.kernel.org/pub/linux/kernel/v2.6/
http://www.kernel.org
我下载的是
格式选择:gz和bz2
都可以,bz2的压缩程度高一点,只是解压缩命令不一样而已
4。解压缩源码
root@jb-laptop:/home/jb# tar -zxvf linux-2.6.38.8.tar.gz
如果是bz2格式的话使用 tar -jxvf linux.tar.bz2
5。复制源码到 目录/usr/src/下
root@jb-laptop:/home/jb# mv linux-2.6.38.8 /usr/src/
二、开始编译内核:
1。检查有无不正确的.o文件和依赖关系: make mrproper (其实这一步可以省略,因为是刚下载好的源码,一定是干净的;如果使用的是已经编译过的code,则需要做这一步)
2。配置Kernel选项:make menuconfig (这一步很重要,它决定了你可以个人定制化你的Kernel。当你使用menuconfig时,会有一些选择列出来) 主列表如下:
General Setup: 常规的配置,比如Kernel config, CPU Group,Aduiting等等
Loadable module support: 定制你要加载哪些modules
Enable the block layer: 主要是块设备和大文件的设置
Processor type and features: 处理器配置和定制化
Power management options: 电源管理的定制化,比如Hibernate这样的
Bus options: PCI总线的定制
Executable file formats: 主要是设置ELF的配置
Networking support: 定制网络选项,包括Wireless,Bluetooth和Network选项
Device Drivers: 定制你需要加载的设备驱动
Fireware Drivers: BIOS和EFI这样的固件驱动设置
File System: 文件系统的设置,包括EXT3, EXT4, FAT, CD/DVD...等等N种
Kernel hacking: 主要是设置Kernel debugging的,做内核调试会有用
Security options: 安全选项
Cryptographic API: 加密设置,包括MD5, SHA1, CRC等等N种加密算法的配置
Virtualization: 虚拟化设置
Library routines: 主要定制CRC校验的function
上面是16大项,每一项都有N多小项,说真的这个里面每一项都够研究一阵子的。不过对内核编译而言,你可以全部采用默认选项(会延长编译时间)。设置好了menuconfig,保存退出。
如果出现下面的错误:
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2
解决方案:
apt-get install libncurses5-dev
现在可以 make menuconfig 了
3。编译源码生成内核镜像:
make bzImage
该命令首先编译生成vmlinux,然后压缩生成bzImage(路径是 /usr/src/kernel-version/arch/i386/boot/ )
可以查看有没有bzImage生成
4。编译内核模块
make modules
5。安装内核模块
make modules_install
内核模块编译好后需要安装到Linux系统的相应目录中才可以使用,使用“make modules_install”命令安装内核模块。“/lib/modules/”目录用于存放Linux系统中的内核模块,内核的各个版本都在该目录下建有子目录用于存放内核模块。
该命令首先在/lib/modules/中创建一个以内核发行号为名称的目录,然后根据内核配置生成需要的模块
6。生成新内核
make install
把编译好的内核放入/boot中,会把vmlinuz和System.map复制到/boot目录下,并建立相关的链接
7。完成最后的工作
有些linux版本在make install之后会自动生成initd.img和修改引导程序文件grub.cfg,但是ubuntu10.04并不会,所以就得我们自己来搞定啦
首先是生成initrd.img。
mkinitramfs 2.6.38.8 -o /boot/initrd.img-2.6.38.8
如果系统提示没有安装mkinitramfs,那就apt-get install mkinitramfs
接着修改引导程序文件grub.cfg
update-grub2
尽量不要手动去修改grub.cfg文件,搞不好连电脑都启动不了
8。重启电脑
reboot
然后在grub引导界面上选择你的新内核
至此,所有的工作就搞定啦,体验你的新内核吧
三、参考链接:
System.map、vmlinuz、initrd.img的产生和作用
http://dogking.chinaunix.com/space.php?uid=22896670&do=blog&id=189483
内核编译之vmlinuz vmlinux system.map initrd
http://hi.baidu.com/masterfoo/blog/item/3cdd88aa312b91bdca130ca4.html
Linux内核编译步骤(基于Ubuntu10.04+2.6.35.2 Kernel)
http://blog.youkuaiyun.com/zufeng_chen/article/details/5824544