一直在Android平台下做Kernel开发,对于Kernel的编译已经烂熟于心,
今天突然想自己编译一下PC上的Kernel,看起来过程类似,定制内核所需的也就是时间了。。。
废话少说,过程记录如下。
1. 本人的环境如下:
Ubuntu 13.04 虽然13.10已经发布了,但暂时还不想升级。。。
由于已经安装过了Android的开发环境,所以我已经不再需要安装其他环境即可编译内核。
Android开发环境的安装可以参考这篇文章: 重装Ubuntu13.04后需要做的事情
2. 下载Kernel源码
2.1 获取当前系统的内核版本
通过命令:
可以获取到当前系统的Kernel版本,如:
uname -srv
可以获取到当前系统的Kernel版本,如:
Linux 3.8.0-32-generic #47-Ubuntu SMP Tue Oct 1 22:35:23 UTC 2013
2.2 根据当前内核版本下载对应的内核代码
通过命令:
可以获取到对应版本的内核代码
sudo apt-get install linux-source-3.8.0
可以获取到对应版本的内核代码
3. 编译内核
3.1 获取当前系统的内核配置
通过命令:
可以将当前系统的内核配置copy到你的linux源代码目录下并重命名为.config
cp /boot/config-3.8.0-32-generic .config
可以将当前系统的内核配置copy到你的linux源代码目录下并重命名为.config
这个.config里面就是当前系统的内核配置。
通过命令:
make menuconfig
可以自己配置定制内核,menuconfig的用法非常简单,这里就不介绍了。
3.2 重新编译内核
通过命令:
可以实现6线程编译,最终得到内核镜像,保存为 arch/x86/boot/bzImage
make bzImage -j6
可以实现6线程编译,最终得到内核镜像,保存为 arch/x86/boot/bzImage
3.3 编译内核模块
通过命令:
可以实现6线程编译所有内核模块
make modules -j6
可以实现6线程编译所有内核模块
4. 安装内核
4.1 安装内核模块
通过命令:
可以安装刚刚编译出来的内核模块
可以安装刚刚编译出来的内核镜像
注意:
安装内核的命令会自动更新grub配置,执行完成后重启即可进入新内核。
如果新内核有问题,在启动时也可以选择使用旧内核启动。
- 使用命令:
sudo make modules_install
可以安装刚刚编译出来的内核模块
4.2 安装内核镜像
通过命令:sudo make install
可以安装刚刚编译出来的内核镜像
注意:
安装内核的命令会自动更新grub配置,执行完成后重启即可进入新内核。
如果新内核有问题,在启动时也可以选择使用旧内核启动。
5. 删除编译安装的内核
- 删除/boot 以及 /lib/modules 下新内核相关的文件或目录- 使用命令:
sudo update-grub即可更新grub启动菜单