刚开始学学习LDD3,根据网上教程安装了2次linux源码树,第一次失败了,Ubuntu无法启动。第二次找到了问题,安装成功,写下次文章记录安装步骤。
安装环境:
虚拟机:VMware 14.0.0
系统:Ubuntu 12.04
1、使用虚拟机安装系统Ubuntu 12.04 这个很简单,网上教程很多。用时大约1小时。
2、准备linux源码文件:www.kernel.org可下载。
2.下载Linux的源码包www.kernel.org
我找到V2.6的下载地址是https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/
在这个里面选择一个版本下载,我下载的文件是:linux-2.6.38.tar.bz2
3、把文件复制到/usr/src/目录下 然后解压文件
name@Ubuntu:sudo tar -jxvf linux-2.6.38.bz2
4、编译内核。
name@Ubuntu:cd /usr/src/linux-2.6.38
name@Ubuntu:sudo make
编译错误一:
这时候可能会提示缺少config文件,可以将系统里的.config文件复制到2.6.38文件里。
#查看当前linux内核版本
name@Ubuntu:uname -a
#输出
name ubuntu 3.2.0.23 ...........
#内核版本为 3.2.0.23
通过uname-a 命令可查询当前的内核版本为3.2.0.24,然后进入/usr/src/linux-headers-3.2.0.23-generic-pae,把该路径下的.config文件复制到我们新的内核文件夹根目录下 cp /usr/src/linux-headers-3.2.0.23-generic-pae/.config /usr/src/linux-2.6.38
#复制.config文件至新内核根目录
#本机原先的内核源码目录 linux-headers-3.2.0.23-generic-pae
#新内核源码目录/usr/src/linux-2.6.38
cp /usr/src/linux-headers-3.2.0.23-generic-pae/.config /usr/src/linux-2.6.38
这时,再使用make命令(sudo make)
编译错误二:
该版本可能会提示错误
arch/x86/kernel/entry_32.S: Assemblermessages:
arch/x86/kernel/entry_32.S:1422: Error:.size expression does not
evaluate to a constant make[3]: ***[arch/x86/kernel/entry_32.o]
这个网上有解决办法。参照https://lkml.org/lkml/2011/3/20/49解决即可,当时没看明白。后来才反应过来 这时打补丁啊。
手动修改一下:
#打开文件entry_32.S
sudo gedit /usr/src/linux-2.6.38/arch/x86/kernel/entry_32.S
#在打开的文件中搜索END(ret_from_exception) 修改成 END(resume_userspace)
#在打开的文件中搜索END(apf_page_fault) 修改成 END(async_page_fault)
保存,使用make命令(sudo make)
等个两三分钟 没有报错,基本就没问题了,再等个1个小时就编译完了。
#(编译镜像)
sudo make bzImage
#(编译模块)
sudo make modules
#(安装模块)
#sudo make modules_install
#(安装)
#sudo make install
#进入目录/boot
cd /boot
#创建文件
sudo mkinitramfs -o /boot/initrd.img-2.6.38.4 /lib/modules/2.6.38.4/
#编辑grub.cfg文件
sudo gedit /boot/grub/grub.cfg
#搜索关键字menuentry
修改如下。
把原来的linux /boot/vmlinuz-3.2.0-23-generic-pae 修改成 linux /boot/vmliuz-2.6.38.
把原来的initrd /boot/initrd.img-3.2.0-23-generic-pae修改成initrd /boot/initrd.img-2.6.38
修改前 修改后见下图
修改前(/boot/grub/grub.cfg):
修改后(/boot/grub/grub.cfg):
重启系统
reboot
#重启后 使用命令查看当前内核
sudo uname -a