现在的位置: 首页 > 操作系统 > 正文

ubuntu下重新编译内核

2017年09月09日 操作系统 ⁄ 共 2240字 ⁄ 字号 评论关闭

1.为什么要编译内核

     我们使用的内核好好的,为什么要重新编译安装内核呢?重新编译内核主要是为了:1.尝鲜,linux内核发展很快,一段时间就会发布新版本,增添新功能,但是相关linux的发行版本跟不上linux内核的,所以想第一时间使用新功能就需要重新编译内核;2.使用一些工具,如opfile、systemtap等工具,需要使用包含debuginfo的debug版本内核,而一般的发行版本不包含debuginfo,这时候需要重新编译内核;3.修改了内核代码等。

2.获取源代码

可以从linux网站下载源代码(kernel下载地址);要是只是想获取当前版本的linux内核,还可以通过apt-get来获取,具体为:
sudo apt-get install linux-source

获取到了linux源码(注意:apt-get安装的源代码在/usr/src/目录下),解压,具体为:

tar -jvf linux-source-3.11.0.tar.bz2

3.编译内核

下面就可以开始编译linux内核了,当然还需要安装一些工具:

sudo apt-get install libncurses5-dev

安装好后把原先系统的配置文件拷贝到当前源码目录,具体操作为:

sudo cp /boot/config-`uname -r` .config

然后根据需要打开内核的相关选项,可以通过make menuconfig还配置,我这边是要编译opfile和systemtap可以用的内核,还需要打开:

CONFIG_PROFILING=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_PCI_IOAPIC=y
CONFIG_DEBUG_INFO=y
CONFIG_KPROBES=y
CONFIG_RELAY=y

下面开始编译内核:

sudo make -j8 /* 多线程编译 */
等待内核编译完成后键入:sudo make modules

4.安装内核

模块和内核都编译完成后就要安装内核了,首先安装各个可加载模块:
sudo make modules_install
安装完模块后:sudo make install

这样就可以在/boot/目录下看到编译生成的内核,在/lib/modules下可以看到相关模块了。

在进行内核编译时,需要进行制作initrd.img.在Fedora下面一般是用mkinitrd,而在Ubuntu/Debian下是用mkintramfs,具体命令为:
sudo mkinitramfs -v 3.11.10.12 -o  /boot/initrd.img-3.11.10.12

5.修改grub

修改/boot/grub/grub.cfg文件,下面是grub.cfg中原有的一段:
<span style="font-size:14px;">menuentry 'Ubuntu,Linux 3.2.0-23-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root aaec6aa9-793a-4236-8d67-ed0e22e852c3
        linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=aaec6aa9-793a-4236-8d67-ed0e22e852c3 ro   quiet splash $vt_handoff
        initrd  /boot/initrd.img-3.2.0-23-generic-pae
}
menuentry 'Ubuntu,Linux 3.2.0-23-generic-pae (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root aaec6aa9-793a-4236-8d67-ed0e22e852c3
        echo    '载入 Linux 3.2.0-23-generic-pae ...'
        linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=aaec6aa9-793a-4236-8d67-ed0e22e852c3 ro recovery nomodeset 
        echo    '载入初始化内存盘...'
        initrd  /boot/initrd.img-3.2.0-23-generic-pae
}</span>

主要修改menuentry '...’,改成自己希望看到的引导信息;修改linux的vmlinuz名为自己编译生成的vmlinuz名;修改initrd.img为自己编译生成的;要能选择启动哪个内核,可以不修改原先的,在其后面再添加自己的menuentry ... {...}信息。第一次希望使用这种方法,有可能编译的内核无法启动。修改完后保存,reboot即可,至此更新内核已完成。现在的ubuntu make
install后就会帮你修改grub.cfg

抱歉!评论已关闭.