资源描述
Linux程序设计
课程设计报告
题目:linux内核裁剪的设计与实现
姓 名: xx
学 号: 123
专 业:
院 系:
指导老师:
完成时间:
目 录
⒈引言 1
⒉需求分析 1
2.1前期准备 1
2.2 开发工具 2
3.详细设计 2
3.1 内核和交叉编译环境的搭建 2
1.内核版本的选择 2
2.交叉编译环境的搭建 2
3.2导入内核并解包 3
3.3建立符号链接并进入工作目录 5
3.4启动内核编辑图形界面 5
3.5 配置系统内核 5
3.6编译内核 12
3.7建立文件目录 13
3.8编译动态载入内存的模块 13
3.9拷贝到/lib/modules/2.6.10中 14
3.10安装新内核 15
3.11解决BusLogic错误 15
3.12生成initrd.img文件 15
3.13升级内核 16
4. 课程设计总结与体会 17
参考文献 17
⒈引言
Linux是一类Unix计算机操作系统的统称,也是自由软件和开放源代码发展中最著名的例子。Linux作为一个免费、自由软件,内核版本不断升级。新的内核修订了旧内核的bug,并增加了许多新的特性。同时也使得Linux系统更加稳定、更加安全,进一步满足用户的功能需求。
Linux内核裁剪是根据用户的需要进行删除和保留相关的模块。Linux内核裁剪完成后在进行编译,使之后的Linux系统为用户所需要的操作系统。Linux内核升级是为了弥补较低版本的漏洞,使得Linux系统安全系数更高;另外使Linux系统的性能更稳定;最后是增加新功能,满足用户的功能需求。
本次课程设计是通过相关操作来实现将Linux内核进行裁剪和编译,并Linux2.4内核升级到2.6内核。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要根据自己的需要进行重新裁剪、编译内核以及内核升级。
⒉需求分析
2.1前期准备
本次实验所需使用的系统是Red Hat Linux,而Red Hat Linux是安装在威睿工作站中的。如图1.1所示:
图2.1 虚拟机中的Red Hat Linux
2.2 开发工具
Linux开发平台
3.详细设计
3.1 内核和交叉编译环境的搭建
1.内核版本的选择
本次实验选择的是2.6.10的内核
2.交叉编译环境的搭建
将gcc添加到Red Hat Linux中去,如图2.2.1和图2.2.2所示:
图3.1 添加gcc到系统中(一)
图3.2 添加gcc到系统中(二)
3.2导入内核并解包
先将带有内核的U盘切换到虚拟机中,在mnt目录下新建一个文件夹并命名为usb,利用fdisk -l命令查看U盘设备名,然后利用mount命令将U盘挂载到/mnt/usb中,将U盘中的内核复制到/usr/src目录下。在利用tar -xjvf对内核进行解压操作。具体操作如图3.1.1、图3.1.2和图3.1.3所示:
图3.3 挂载U盘
图3.4 内核解压(一)
图3.5 内核解压(二)
3.3建立符号链接并进入工作目录
建立内核解压后的linux-2.6.10的符号链接并命名为linux,进入到linux中。具体操作如图3.2.1所示:
图3.6 进入工作目录
3.4启动内核编辑图形界面
利用make mrproper来清理旧的编译生成的文件及其他配置等文件,利用make menuconfig来启动图形界面。具体操作如图3.3.1所示:
图3.7 清理环境并启动图形界面
3.5 配置系统内核
无论是内核裁减还是内核升级都要重新配置系统内核。共有三种方式来运行配置内核的命令:
设置屏幕的类型 命令
文本 make config
窗口菜单(NCurses) make menuconfig
X 图形 make xconfig
第1种make config是命令行方式,使用与修改都较为不便,一般不推荐使用。
第2种make menuconfig是窗口菜单方式,采用窗口菜单进行人机交互,并可随时获得帮助;它占用的内存较少,适合在字符终端下使用,如图3-1所示。
第3种make xconfig是图形用户界面,采用图形窗口按钮进行人机交互,整个设置界面简洁明了、使用非常方便且帮助文件也容易获取,适合在X Windows下使用。
这里使用第二种方式进行操作;
图3.8 进入配置内核界面
接下来在该界面上进行相关操作。
⑴ 通过上下左右键来选择Loadable Module support选项,enter。
图3.9 选择Loadable Module support选项
选上“Module unloading”和“Automatic kernel module loading”这两项。
图3.10 选择Loadable Module support选项
然后退出。
⑵ ①在Device Drivers--->Block Devices中选上“Loopback device support”;
图3.11 选择Loopback device support选项
②在Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;
图3.12 选择device mapper support选项
③Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”;
图3.13 选择Support for frame buffer devices选项
device mapper support
④Device Drivers --->USB support --->选上“USB Mass Storage support”;
图3.14 选择USB Mass Storage support选项
⑤Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32 PCI support
图3.15 选择AMD PCnet32 PCI support选项
⑶ ① File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
图3.16 ext2和ext3文件系统配置
② File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;
图3.17 进入DOS/FAT/NT Filesystems
图3.18 选择NTFS file system support选项
⑷ vmware下编译Linux内核,硬盘用的是scsi的,需选择以下三个选项:
① Device Drivers ---><*>SCSI device support ---><*>SCSI disk support;
图3.19 选择SCSI disk support t选项
② Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support
图3.20 选择BusLogic SCSI support选项
3.6编译内核
利用make bzImage来生成新的内核文件bzImage。具体操作如图3.5.1、图3.5.2和图3.5.3所示:
图3.21 编译内核
图3.22 内核编译成功
图3.23 查找内核所在位置
3.7建立文件目录
在/usr/src中新建一个文件夹fs,在fs中分别建立与Red Hat Linux相同的目录结构,详细建表如表3.6.1所示。具体操作步骤如图3.6.2所示:
目录名
目录名
boot
dev
etc
lib
mnt
proc
root
sbin
tmp
usr
var
表3.24 详细建立的目录
图3.25 详细建立的目录
3.8编译动态载入内存的模块
利用make modules将动态载入内存的模块编译成.o,然后再将多个模块链接为.ko。具体操作如图3.7.1和图3.7.2所示:
图3.26 编译动态载入内存的模块
图3.27 编译的结果
3.9拷贝到/lib/modules/2.6.10中
利用make modules_install命令,将7中生成的.ko文件拷贝到/lib/modules/2.6.10中。如图3.8.1和图3.8.2所示:
图3.28 拷贝文件
图3.29 拷贝结果
3.10安装新内核
利用make install命令来安装新的内核文件,但出现如图3.9.1所示的错误。
图3.30 BusLogic错误
3.11解决BusLogic错误
根据查阅参考文献,BusLogic错误主要是因为/lib/modules/2.6.10/drivers/scsi中缺少BusLogic.o所致,若/usr/src/linux/drivers/scsi中存在BusLogic.o则直接拷贝到/lib/modules/2.6.10/drivers/scsi中即可,若不存在则执行gcc -O2 -MODULE -D__KERNEL__ -I /usr/src/linux/include -c BusLogic.c命令生成BusLogic.o文件再拷贝。
3.12生成initrd.img文件
解决掉10中的问题后可以利用mkinitrd /boot/initrd-2.6.10.img /lib/modules/2.6.10命令来生成新的initrd.img。具体操作如图3.11.1所示:
图3.31 生成initrd.img文件
3.13升级内核
利用new-kernel-pkg --install --mkinitrd /usr/src/linux/2.6.10命令来升级系统内核,具体操作如图3.12.1所示:
图3.32 升级Red Hat Linux的内核
4. 课程设计总结与体会
本次的课程设计是分组进行的,实验内容是对Linux内核进行裁剪,定制一个适合自己的内核。在实验过程中我们组遇到了很多的问题,通过集体讨论,请教老师最后解决了一部分。虽然生成了新的内核文件,也生成成功了系统启动的其他两个文件initrd.img和System.map文件,但是由于缺乏对文件目录的了解以及如何使用grub来引导新的操作系统,所以是不怎么成功的。通过这次的课程设计我学会了很多,对一学期的Linux课程的学习进行了总结,将知识串联了起来,思路更加清晰了。
参考文献
[1] 汤小丹,等.计算机操作系统(第三版)[M]. 西安:西安电子科技大学出版社,2007.5
[2] 张小进.Linux系统应用基础教程[M]. 北京:机械工业出版社,2008.1
[3] 网上资料 2011.5.21
展开阅读全文