获取Linux内核
不要在超级用户权限下配置或构建Linux内核:由于旧的内核构建过程存在Bug,在使用超级用户权限构建内核时,会在/dev目录下生成一些垃圾文件,并可能会造成一些问题。因此,下载解压内核源码、配置并构建内核等操作都应在普通用户权限下进行,只有在安装新内核时的两三条命令需要在超级用户权限下运行
查看当前Linux内核版本
使用以下命令查看Ubuntu系统当前所使用的内核版本,以及已经安装的全部内核版本
|
|
使用以下命令查看当前的Ubuntu系统所支持的Linux内核版本
|
|
获取Linux内核源码
本示例选择使用linux-image-4.4.0-21进行演示
可使用wget或curl工具进行Linux内核的下载
|
|
解压获取的Linux内核源码压缩包
|
|
创建内核配置
内核配置应被保存在内核源码树顶级目录下名为.config的文件中,需要在构建内核前进行创建:
- 使用命令
cp /boot/config-$(uname -r) .config
将当前内核的配置文件拷贝出来 - 使用
make config
的命令行方式从头开始配置 - 使用
make deconfig
命令创建默认的内核配置 - 使用
menuconfig
命令修改内核配置
内核配置选项通常具有四个选项:
- y:直接构建为内核的一部分
- n:完全不构建到内核中
- m:构建成模块,在需要时加载
- ?:打印简短的描述信息并继续显示提示符
相应的menuconfig
使用方式如下:
- 通过键盘上的向上和向下按键选择要配置的菜单,“Enter"按键进入
- 选中后按下"Y"键就会将相应的代码编译进内核中
- 选中后按下"N"键就会取消编译相应的代码
- 选中后按下"M"键就会将相应的代码编译为模块
- 按两下"Esc"键退出,也就是返回到上一级
- 按下"?“键查看选中菜单的帮助信息
- 按下”/“键打开搜索框,可在搜索框输入要搜索的内容
本示例使用menuconfig
进行内核配置
|
|
控制台配置界面启动后可直接“Save”,随后保存即可,根目录下将生成.config文件(该文件默认隐藏,需使用Vim查看)
编译构建内核
可通过-j
选项利用多处理器计算机的全部计算能力,-j
选项后需附加一个两倍于系统中处理器数量的数字。如果-j
选项后不附加任何数值,内核编译程序将为每一个文件创建一个新线程,将导致计算机失去响应,因此建议-j
选项后附加具体的数值
|
|
故障处理
在遭遇错误故障后,安装所需依赖,并清理编译生成文件,并重新创建内核配置、编译构建
|
|
部分构建内核
若需有选择性的构建内核,则需要在命令中指明所需构建的文件夹,其中的M参数将使得构建编译该文件下的全部所需文件并链接成最终模块映像
|
|
此时构建独立目录时没有重新链接最终的内核映像,因此对于子文件夹的任何更改并未会影响最终内核映像,所以需执行下列命令,使得构建系统检查所有修改过的目标文件,并最终完成内核映像的链接
|
|
安装内核
几乎所有的发行版都提供了installkernel脚本,使得开发者无需做任何额外的工作即可自动的将内核安装到正确的位置并修改bootloader
使用以下命令安装所有构建编译好的模块,并将其置于新内核能找到的合适位置(lib/modules/kernel_version)
|
|
成功安装模块后,应当安装主内核映像
|
|
此时/lib/modules目录下已生成相应版本的目录
|
|
设置引导bootloader
GRUB是目前发行版中使用最多的Linux内核bootloader,需要将新内核的条目添加入GRUB文件中
|
|
手动选择启动项
如果升级的版本比当前内核版本高的话,默认新安装的内核就是第一顺序启动的,只需重启系统就行了,否则在开机时的引导界面需要手动选择启动项
|
|
设置“GRUB_TIMEOUT”值,并注释掉“GRUB_HIDDEN_TIMEOUT”
|
|
自动选择启动项
如果手动选择比较麻烦,可以修改配置文件使得开机自动进入指定启动项
通过以下命令查看新内核的编号,该内核位于gnulinux-advanced-9fff41cc-2c66-4fa7-9e5b-798f5cba683e目录下,内核编号为gnulinux-4.4.21-advanced-9fff41cc-2c66-4fa7-9e5b-798f5cba683e
|
|
随后将该编号设置为默认启动的操作系统,并更新GRUB(/boot/grub/grub.cfg是GRUB真正的配置文件,它在每次update-grub后自动生成,默认只读的,用户应该通过修改/etc/default/grub来间接地更改)
GRUB_DEFAULT应填入“gnulinux-advanced-9fff41cc-2c66-4fa7-9e5b-798f5cba683e>gnulinux-4.4.21-advanced-9fff41cc-2c66-4fa7-9e5b-798f5cba683e”
|
|
验证安装
|
|