Ubuntu 下编译内核笔记

Ubuntu 下编译内核笔记

本次笔记在参考了众多前辈的帖子和文章实验处理,当然要弄清内核的配置过程也是需要相当长的时间和耐心,这回先记录一下操作成功的步骤,待日后补充。

前提环境:Win7+VirsualBox+Ubuntu12.04

 

一,下载内核源码

  官网:https://www.kernel.org/,这里我下载的是最新稳定版本linux-3.12.6.tar.xz

  注意要在root角色下进行下面的操作

 

二,解压源码

1,把源码拷贝到/usr/src目录下

sudo cp linux-3.12.6.tar.xz /usr/src

2,解压源码

sudo tar -vxf linux-3.12.6.tar.xz

 

三,配置和编译

1,清理上一次编译残留的文件,第一次编译可以跳过

sudo make mrproper 
sudo make clean

2,制作配置文件

可以从拷贝系统的config文件,改成.config并拷贝到源码根目录,也可以运行

sudo make menuconfig

这里就是配置内核的选项菜单界面,可以根据你的需要,选择要加载的模块,裁剪内核。

如果要彻底弄清每一个选项,则需要更多的精力去研究了,http://lamp.linux.gov.cn/Linux/kernel_options.html,作者:金步国。我也正在研究这边文章中...

这里我直接ESC推出,选择保存,会生成.config默认原始的配置文件。

3,简化 kernel 的配置

这一步我是参考网上的帖子做的,据说Linux 2.6.32 开始引入了一个 make localmodconfig 用于简化 kernel 的配置。

sudo make localmodconfig

make localmodconfig 会执行 lsmod 命令查看当前系统中加载了哪些模块 (Modules), 并最后将原来的 .config 中不需要的模块去掉,仅保留前面 lsmod 出来的这些模块,从而简化了内核的配置过程。 

4,编译内核镜像

sudo make bzImage

5,编译模块

sudo make modlues

6,安装模块

sudo make modules_install 

7,安装内核

sudo make install

内核安装完毕,grub2会自动更新,会在/boot/grub/下更新grub.config代码。查看代码得知,加入了新的内核引导代码。

 

menuentry ‘Ubuntu,Linux 3.12.6‘ --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 f48e9fc9-9d77-4c7e-9897-6d493abe32c4
    linux    /boot/vmlinuz-3.12.6 root=UUID=f48e9fc9-9d77-4c7e-9897-6d493abe32c4 ro   quiet splash $vt_handoff
    initrd    /boot/initrd.img-3.12.6
}
menuentry ‘Ubuntu, with Linux 3.12.6 (recovery mode)‘ --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 f48e9fc9-9d77-4c7e-9897-6d493abe32c4
    echo    ‘载入 Linux 3.12.6 ...‘
    linux    /boot/vmlinuz-3.12.6 root=UUID=f48e9fc9-9d77-4c7e-9897-6d493abe32c4 ro recovery nomodeset
    echo    ‘载入初始化内存盘...‘
    initrd    /boot/initrd.img-3.12.6
}

 

 8.修改grub.cfg

这一步主要是为了重启的时候进入grub菜单,这样就可以选择进入那个内核了。此时机器上有两个内核,一老一新。

sudo gedit /etc/default/grub

修改这三句代码代码:

#############################
 此配置将影响菜单显示。若设置此选项,将在此时间内隐藏菜单而显示引导画面。
 菜单将会被隐藏,除非在此行开头加上一个 # 符号。(# GRUB_HIDDEN_TIMEOUT=0)。
 GRUB 2 第一次执行时将会寻找其他操作系统。若没有其他操作系统被检测到,菜单将会配置为隐藏。若辨认出其他操作系统,菜单将会显示。
 若是大于 0 的整数,系统将会依此配置的秒数暂停,但不会显示菜单。
 0 则菜单不会显示,也不会有延迟。
 使用者可以在启动时按住 SHIFT 键不放以强制显示菜单。
 启动过程中,系统将会检查 SHIFT 键状态。若无法辨识按键状态,会有一个短时间的延迟让使用者可通过按下 ESC 键来显示菜单
#############################

#GRUB_HIDDEN_TIMEOUT=0



#############################
true 不显示倒计时。屏幕将会是空白的。
false 在 GRUB_HIDDEN_TIMEOUT 中配置的时间,空白屏幕上会有一个倒数计时器。
#############################
GRUB_HIDDEN_TIMEOUT_QUIET=false 


#############################

此命令将顺从 GRUB_HIDDEN_TIMEOUT 配置,除非 GRUB_HIDDEN_TIMEOUT 被注释掉(#)。若 GRUB_HIDDEN_TIMEOUT 启用,则当菜单显示时,GRUB_TIMEOUT 将会只执行一次。
配置此值为 -1 将会导致菜单一直显示,直到用户选择。
GRUB 2 菜单默认为隐藏,除非其他操作系统被系统检测到。若没有其他操作系统,此行将会被注释掉,除非使用者修改它。为了在每次启动时显示菜单,去掉此行的注释并使用 1 或更大的值。

#############################
GRUB_TIMEOUT=10

 完成后记得运行命令:

sudo update-grub grub.cfg

 

 9,重启系统

sudo reboot

重启后直接进入启动选项菜单,即grub菜单,选择你要加载的内核。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。