Ubuntu下编译Linux内核2.6.36-rc4


其实啥都不懂,因为师兄吩咐做一个小任务,需要先编译内核,所以就百度谷歌了一堆编译内核的文章,然后就开始了人生的第一次内核打补丁和编译Linux内核。

首先声明下面所使用的命令,如果不是root用户登录,需要在前面加sudo

1.下载最新Linux内核源码http://www.kernel.org/,我下了2.6.36-rc4版本

2.解压到/usr/src下

tar -jxvf linux-2.6.36-rc4.tar.bz2

为方便后续操作,将解压后的文件夹名字改为linux-kernel

mv  linux-2.6.36-rc4 linux-kernel

3.安装所需的软件包:       

apt-get install kernel-package libncurses5-dev fakeroot build-essential

4.配置内核

cd linux-kernel

make menuconfig

终端会弹出一个配置界面

注意主菜单最后有两项:load a kernel configuration...

save a kernel configuration...

先选第一项load ....,意思是,利用当前的内核配置详单来设置将要编译的内核,然后选save这一项保   存,最后退出配置界面。

Ubuntu下编译Linux内核2.6.36-rc4

Ubuntu下编译Linux内核2.6.36-rc4

5.给内核源代码打补丁(可选)

(我的补丁是师兄自己改的一个,所以出现的问题等,大家情况不一样,可以直接跳过此部分,另外有人是将打补丁放在配置内核之前的,我不知道两者是否顺序随便的)

cd /usr/src/linux-kernel

patch -p1 < ../cpufreq_stat.patch (或者patch -p1 -i ../cpufreq_stat.patch)

不过我打了补丁有错误,一个类似于“Hunk #3 FAILED at 2387”之类的消息。网上说这意味着不能正确地打上这个补丁,并且patch程序也不能模糊地通过。这将产生一个导致patch失败的.rej文件并且产生一个.orig文件把一些不能改变的原始内容显示给你。

不知道是不是这个原因导致的,师兄的补丁是这样产生的,他修改了2.6.32版本的cpufreq_stats.c,然后生成了一个patch,但是我的是2.6.36版本内核。不知道是不是这个原因,反正后来我用meld工具比较了师兄的2.6.32版本修改后的cpufreq_stats.c和2.6.36版本的cpufreq_stats.c文件,发现除了师兄修改部分,其他就查一个头文件包含,所以就加了那一行,直接替换了cpufreq_stats.c。

6.编译

执行:sudo make mrproper   (清除以前曾经编译过的旧文件,如果你是第一次编译,可不执行)

执行:sudo make     (编译,可以加-j4,如果你CPU是双核心,够牛的话,因为可以提高速度)

(编译的时候出错了,说是宏cputime64_add应该有两个参数,但实际只给了一个,原来是师兄把两个参数之间的逗号写错成了加号,修改后,重新编译)

(目前正在编译中。。很慢。。不知道结果如何,未完待续)

【然后:sudo make install

再:sudo make modules  (编译模块)

再:sudo make modules_install  (安装模块)

最后创建 initrd文件:

mkinitramfs -o /boot/initrd.img-2.6.36】

相关内容