编译Linux内核报告.docx
《编译Linux内核报告.docx》由会员分享,可在线阅读,更多相关《编译Linux内核报告.docx(11页珍藏版)》请在冰豆网上搜索。
编译Linux内核报告
编
译
Linux
内
核
编译Linux内核
在linux操作系统环境下重新编译内核。
实验主要内容:
●查找并且下载一份内核源代码
●配置内核
●编译内核和模块
●配置启动文件
本次实验指导是在Ubuntu12.04(内核版本为3.2.0-23-generic-pae)的Linux系统里,下载并编译新的Linux内核源代码(鼓励选用最新版本,如3.14.4);然后,配置GNU的启动引导工具grub,成功运行编译成功的Linux内核。
实验指导
1.查找并且下载一份内核源代码
Linux受GNU通用公共许可证(GPL)保护,其内核源代码是完全开放的。
现在很多Linux的网站都提供内核代码的下载。
推荐使用Linux的官方网站:
http:
//www.kernel.org。
图1Linux的官方网站
在Linux下可以通过wget命令下载源代码:
$cd/tmp
$wgethttp:
//www.kernel.org/pub/linux/kernel/v3.x/linux-3.15.1.tar.xz
下载的内核源代码保存在/tmp目录下,文件名为linux-3.15.1.tar.xz。
2.解压内核源代码
将新的内核代码解压到/usr/src目录下,注意此处要用root身份。
对于xz类型的压缩包的解压方法:
#xz–dlinux-3.15.1.tar.xz
#tar–xvflinux-3.15.1.tar–C/usr/src
需要说明的是,其实还有许多网站保存此文件;它们采取的压缩方式可能不同,需要采用不同的命令进行解压。
3.配置内核
在编译内核前,一般来说都需要对内核进行相应的配置。
配置是精确控制新内核功能的机会。
配置过程也控制哪些需编译到内核的二进制映像中(在启动时被载入),哪些是需要时才装入的内核模块(module)。
首先进入内核源代码目录:
#cd/usr/src/linux-3.15.1
如果不是第一次编译的话,有必要将内核源代码树置于一种完整和一致的状态(如果是第一次可跳过此步)。
因此,推荐执行命令makemrproper。
它将清除目录下所有配置文件和先前生成核心时产生的.o文件:
#makemrproper
然后配置编译选项(此处使用原内核的配置文件,完整的配置命令看操作提示):
#cp/boot/config-3.2.0-23-generic-pae.config
该命令的作用是将原内核配置文件拷贝的当前目录下,并命名为.config。
若需要进一步修改配置请参照操作提示。
4.编译内核和模块
编译内核,就用:
#make
编译内核需要较长的时间,具体与机器的硬件条件及内核的配置等因素有关(采用VMWare虚拟机,需要约50分钟)。
完成后产生的内核文件bzImage的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是Intelx86型的,并且你将内核源代码放在/usr/src/linux目录下。
如果选择了可加载模块,编译完内核后,要对选择的模块进行编译,可用:
#makemodules
5.安装新内核模块和新内核
首先,用下面的命令将新内核模块安装到系统的标准模块目录中:
#makemodules_install
然后,建立要载入ramdisk的映像文件:
#mkinitramfs-o/boot/initrd.img-3.15.1
如果Linux系统安装在scsi磁盘上,这步是必须的,否则可以跳过。
如果你的linux不是ubuntu,而是其他发行版本,那么使用的命令可能不是mkinitramfs,但功能和用法类似。
第三,用下面的命令将新内核安装到系统中:
#makeinstall
通常,Linux在系统引导后从/boot目录下读取内核映像到内存中。
因此如果想要使用自己编译的内核,就必须用makeinstall命令将启动文件安装到/boot目录下。
6.了解grub配置启动文件
如果使用grub启动Linux,需要在grub.cfg中增加启动项(近几年Ubuntu发行版的启动文件为/boot/grub/grub.cfg文件)。
建议不要去编辑这个文件,因为这个文件是自动生成的。
sudomkinitramfs-o/boot/initrd.img-3.15.1
sudoupdate-initramfs-c-k3.15.1
sudoupdate-grub2//自动修改系统引导配置,产生grub.cfg启动文件
可以查看启动配置文件:
#more–d/boot/grub/grub.cfg
若文件中有如下内容,说明新内核启动项已添加成功。
menuentry'Ubuntu,withLinux3.14.4'--classubuntu--classgnu-linux--classgnu--classos{
Recordfailgfxmode$linux_gfx_mode
insmodgzioinsmodpart_msdos
insmodext2setroot='(hd0,msdos1)'
search--no-floppy--fs-uuid--set=rootccc4776d-a0ae-410b-9ffd-54eff9ca4f6d
linux/boot/vmlinuz-3.14.4root=UUID=ccc4776d-a0ae-410b-9ffd-54eff9ca4f6drofind_preseed=/preseed.cfgnopromptquiet
initrd/boot/initrd.img-3.14.4}
menuentry'Ubuntu,withLinux3.14.4(恢复模式)'--classubuntu--classgnu-linux--classgnu--classos{
Recordfailinsmodgzio
insmodpart_msdosinsmodext2
setroot='(hd0,msdos1)'
search--no-floppy--fs-uuid--set=rootccc4776d-a0ae-410b-9ffd-54eff9ca4f6d
echo'LoadingLinux3.14.4...'
linux/boot/vmlinuz-3.14.4root=UUID=ccc4776d-a0ae-410b-9ffd-54eff9ca4f6drorecoverynomodesetfind_preseed=/preseed.cfgnoprompt
echo'Loadinginitialramdisk...'
initrd/boot/initrd.img-3.14.4
}
7.重启系统查看效果
经过前边步骤,已编译了内核镜像且放到了指定位置/boot;也配置了/boot/grub/grub.cfg。
现在,可以重启主机系统,期待编译过的Linux操作系统内核正常运行!
#reboot重启系统
系统启动后,从启动菜单中选中新内核引导Linux(默认是从新内核镜像启动系统);进入后可以执行uname–r命令查看内核版本。
3、遇到的问题
1、刚开始安装Ubuntu时,中间有一步是试用Ubuntu还是安装Ubuntu,我不太理解,就试用,但是后来有自己分区,总是出现根源分区错误,然后我点击安装,他说安装会清空我的磁盘消息,我也不敢安装,不知道怎么办,后来,我请教同学后才知道,原来清空的是虚拟机的磁盘,点击安装就行了。
2、当虚拟机安装好时,却打不开,我找不到原因,安装好了怎么会打不开呢,原来是我那个ubuntu-12.04-desktop-amd64.iso还没有装进去,只是出现一个虚拟机的样子。
安装后正常启动!
3、一切安装准备做好了,开始进入实验环节,但是我找不到终端在哪,就XX一下,Ctrl加Alt加T就可以快捷打开终端了,我试试了,成功。
4、这个实验真是个费时间的工作,有时候要等一个多小时,在做的过程中,我忘记截图了,就只好又来一次,好累的!
四、实验心得
这次实验总体来说不难,自己在操作过程中遇到的困难,通过XX就可以解决,而且这次实验主要的就是时间问题,太耗时间了。
而且实验成功之后感觉自己真的学到了点东西,动手一步一步做出来特别有成就感,所以我要继续努力。