其实啥都不懂,因为师兄吩咐做一个小任务,需要先编译内核,所以就百度谷歌了一堆编译内核的文章,然后就开始了人生的第一次内核打补丁和编译Linux内核。
首先声明下面所使用的命令,如果不是root用户登录,需要在前面加sudo
1.下载最新Linux内核源码,我下了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这一项保 存,最后退出配置界面。
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】