编译内核

来源:互联网 发布:淘宝最贵的锅 编辑:程序博客网 时间:2024/06/07 06:01

内核编译实验环境: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

我下载的是

linux-2.6.38.8.tar.gz 

格式选择: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.csdn.net/zufeng_chen/article/details/5824544

ubuntu10.10下内核编译,解决开机启动出现Could not load /lib/modules/.../modules.dep的问题

http://blog.csdn.net/renclear/article/details/6461753