最近开始着手学习linux 内核编程,作为初学linux ,内核编译可谓是第一步,中间我也是碰见不少问题,下面将我的的编译过程贴出来,给大家做一个参考
1.首先,我们需要安装一切必要工具,为了一下方便,先切到root 用户
apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig要调用的)
libqt3-headers (make xconfig要调用的)
其他工具在升级过程中可以按提示安装
2.下面就要准备好需要的内核源码,可以在https://www.kernel.org/pub/linux/kernel/ 找到你想要的版本我的是linux-3.18.12.tar.gz
3.下载好后移动到一个空间较大的地方(至少10G),因为中间会生成大量中间文件,容量不够的话编译肯定失败!我就是开始不够后来有给虚拟机添加了一块磁盘
这里我放在/work/sourcecode/下
4.解压源码文件 tar -zxvf linux-3.18.12.tar.gz 若你下的是.tar.bz2需要tar -jxvf 文件名 的方式来解压
5.配置 这里就是定制内核的功能的,作为新手,建议还是默认即可。
make menuconfig 这是图形配置界面 直接save exit
6.开始编译安装新内核
make //此过程会相当漫长,大概2-3个小时吧
make modules //编译模块
make modules_install //安装模块
make install //安装内核
最后创建 initrd文件:
mkinitramfs -o /boot/initrd.img-3.18.12 //这个是系统启动是需要的
7.将新内核和System.map移动到/boot下
# cp /work/sourcecode/linux-3.18.12/arch/x86/boot/bzImage /boot/vmlinuz-3.18.12
# cp /work/source/linux-3.18.12/System.map /boot/System.map-3.18.12 //注意上边的目录根据自己实际而定
# cd /boot (进入boot目录)
# rm –rf System.map (删除原来的连接)
# ln -s System.map-2.6.18 System.map (重新建立连接)
8.修改grub启动管理器
#vim /boot/grub/grub.cfg //不同的系统可能位置不太一样,但是大部分都是这个位置
menuentry 'Ubuntu 14.04,Linux 3.18.12' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 501d3a42-1d52-4438-99bf-e679da605867
linux /boot/vmlinuz-3.18.12 root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro quiet splash
initrd /boot/initrd.img-3.18.12 //一定要确保以上两个文件存在否则无法启动
}
//这一步一般可以先复制原来内核的启动代码,然后吧后两行的路径改成新内核的就可以了。。。。。
还有你需要设置default = 0 目的是不让默认启动 set timeout = 10目的是10s的等待时间
ok现在重启吧
接下来很可能会出现save up waiting for root device 的错误而进不去新内核
不要着急 选择就内核进入,然后打开命令行
depmod -a
update-initramfs -k 3.18.12 -c
这个也许又会提示你不存在什么文件,无需理会,再次重启 成功进入了。。。。。恭喜你!!!
//以上过程若提示缺少什么工具,,直接安装即可!!!
以上过程主要参考两个帖子
http://www.cnblogs.com/devil-91/archive/2012/07/23/2605568.html
http://www.blogjava.net/badboyryan/archive/2007/04/27/114044.html