1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 安装内核源码树
方法1:使用dpkg-dev + apt-get source安装内核源码树
在下载内核源码之前,先安装dpkg-dev
,其中包含你在Debian上生成源代码时需要的开发工具套件。不仅如此,dpkg-dev中还包含在用来解压Debian源码包并自动打补丁的工具dpgk-source
。
sudo apt-get install dpkg-dev
然后,运行以下命令下载完整的内核源码:
apt-get source linux-p_w_picpath-$(uname -r)
伴随着完整内核源码(linux_x.x.xx.orig.tar.xz
)的还有一些可用的内核补丁(linux_x.xx.x-xx.xxx.diff.gz
)和源码控制文件(linux_x.xx.x-xx.xxx.dsc
),这些都将被下载并存储到当前目录。在.dsc文件中会指出如何给内核源码打补丁。
当下载完成,以上的命令将会自动调用工具dpkg-source将下载的内核源码解压到当前的目录中,与此同时根据.dsc文件来下补丁。
上图中的linux-3.13.0
为打过补丁后的内核源码树。
方法2:使用git安装内核源码树
首先安装git(用于从git仓库获取源码)和lsb_release
(用于查询Ubuntu的codename):
sudo apt-get install git
sudo apt-get install lsb_release
然后下载内核源码树到本地:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-$(lsb_release -c | cut -f2).git
个git仓库的速度不是很给力,还是方法1的比较快,至少我这里这样的。最终会产生一个名为ubuntu-$(lsb_release -c)
的目录,在我这里是ubuntu-trusty
。
方法3:使用apt-get install
sudo apt-get install linux-source
完成后,源码会在目录/usr/src下。
3. 编译内核源码树
(1) 安装编译内核必须的开发包
sudo apt-get build-dep linux-p_w_picpath-$(uname -r)
(2) 内核的配置、编译。
我选择使用git下载的代码来编译,理由是我的代码变动可以通过git反映出来。切换到目录ubuntu-trusty
,依次运行下面的命令:
cp /boot/config-3.13.0-24-generic .config # 拷贝内核当前的配置文件
sudo make oldconfig # 在内核当前配置文件上做简单修改(一些不同于当前配置或没有的配置项)
sudo make -j8 # -j8参数可以加速编译,数字根据你自己电脑cpu的情况做出修改
完成编译后查看x86架构的boot目录以及源码根目录新生成的(部分)文件:
(3) 内核模块的安装、内核的安装,grub启动菜单的配置
sudo make modules_install # 安装内核模块
sudo make install # 安装内核:内核映像文件、内核符号表、内核配置文件、grub启动配置
完成内核的安装后可查看/boot/的文件列表,红色框选中的文件是新内核相关文件:
在重启之前,在Ubuntu 14.04.2下需要对grub做简单配置,因为在sudo make install
更新grub配置时,默认选择了新安装的内核,而且不显示grub菜单项,这意味着你无法选择启动的内核。此时,只需要对grub配置作简单修改就好,如下图将配置项GRUB_HIDDEN_TIMEOUT
注释掉:
接着运行命令 sudo update-grub
更新grub的配置文件/boot/grub/grub.cfg
,然后重启系统。
(4) 重启系统
sudo reboot
(5) 重启系统后,可查看当前的内核版本是不是自己编译的新的内核
嗯,没错,这就是我花了1个小时40分钟左右(大家的机器应该比我的速度更快,我用的一台公司老的笔记本)编译出的内核。
4. 后记
本篇从我几年前在51CTO写的一篇博客(原地址)搬迁过来。
参考资料:
install-full-kernel-source-debian-ubuntu
grub doc