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编译内核 (13)3.7建立文件目录 (15)3.8编译动态载入内存的模块 (15)3.9拷贝到/lib/modules/2.6.10中 (16)3.10安装新内核 (17)3.11解决BusLogic错误 (17)3.12生成initrd.img文件 (17)3.13升级内核 (18)4. 课程设计总结与体会 (19)参考文献 (19)⒈引言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 Linux2.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 menuconfigX 图形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 supportExt2 extended attributesExt2 POSIX Access Control ListsExt2 Security LabelsExt3 journalling file system supportExt3 extended attributesExt3 POSIX Access Control ListsExt3 Security LabelsJBB (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 devetc libmnt procroot sbintmp usrvar表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内核进行裁剪,定制一个适合自己的内核。