操作系统2内核修改与编译.docx
- 文档编号:16933913
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:18
- 大小:1.23MB
操作系统2内核修改与编译.docx
《操作系统2内核修改与编译.docx》由会员分享,可在线阅读,更多相关《操作系统2内核修改与编译.docx(18页珍藏版)》请在冰点文库上搜索。
操作系统2内核修改与编译
Linux内核编译:
1、编写目的2
2、任务概述2
2.1下载新内核2
2.2修改新内核系统调用2
2.3进行新内核编译2
3、操作步骤2
3.1查看当前系统的内核版本2
3.2下载新内核3
3.3解压新版本内核3
3.4安装必要工具5
3.5内核修改6
3.5.1添加新的系统调用6
3.5.2添加系统调用号6
3.5.3添加系统调用的处理函数7
3.6清除从前编译内核时残留的.o文件和不必要的关联8
3.7asm、linux和scsi等链接是指向要升级的内核源代码8
3.8配置内核,修改相关参数8
3.8.1配置内核参数8
3.8.2生成依赖信息,清除旧的编译结果10
3.9编译二进制内核映像文件11
3.10编译和安装模块11
3.10.1编译模块--------------------------------------------------------------------------------------11
3.10.2安装模块--------------------------------------------------------------------------------------12
3.11配置启动信息14
3.11.1配置启动信息--------------------------------------------------------------------------------13
3.11.2配置启动管理器-----------------------------------------------------------------------------13
3.12重启系统,查看内核版本15
4、测试新系统内核15
4.1编写测试程序16
4.2编译和运行测试程序--------------------------------------------------------------------------------17
5、实验总结17
1编写目的
在Ubuntu10.04的环境下,通过下载新的Linux内核版本,并修改新版本内核中的系统文件,然后编译、加载新内核,从而实现用户添加的系统调用。
2任务概述
2.1下载新内核
到官网下载最新的内核版本:
http:
//www.kernel.org/。
2.2修改新内核文件
通过修改syscall_table_32.S、unistd.h、sys.c三个文件,添加新的系统调用函数,用来判断输入的数字的奇偶性。
2.3进行新内核编译
修改新版内核后,进行编译、加载、运行,最后编写测试程序对添加的系统调用进行测试。
3操作步骤
3.1查看当前系统的内核版本
查看当前内核版本:
在终端使用命令:
uname–r
3.2下载新内核
在官网上下载最新内核,这里使用的内核版本是:
3.3解压新版本内核
将下载的新版本内核复制到/usr/src目录下
解压新版本内核:
linux-3.1.1.tar.bz2,在终端输入cd/usr/src进入src目录,再输入以下命令:
bzip2-dlinux-2.6.36.tar.bz2
tar-xvflinux-2.6.36.tar
解压完后发现目录下多两个文件,解压成功
使用命令:
ln–slinux-3.1.1linux,对文件稍微修改一下,对文件夹创建文件链接,可以利用该链接直接进入该目录(linux):
/usr/src/linux
3.4安装必要工具
在终端下输入命令:
sudoapt-getinstallbuild-essentialkernel-packagelibncurses5-devfakeroot
sudoaptitudeinstalllibqt3-headerslibqt3-mt-devlibqt3-compat-headerslibqt3-mt
安装结果如图:
下载完工具安装后执行一下更新:
apt-getupdate,如下图:
3.5内核修改
3.5.1添加新的系统调用
在文件:
usr/src/linux/arch//x86/kernel/syscall_table_32.S最后增加一个系统表项:
.longsys_mycall
3.5.2添加系统调用号
在usr/src/linux/include/asm-generic/unistd.h中添加:
#define_NR_mycall271
#defineNR_syscalls272
3.5.3添加系统调用的处理函数
在usr/src/linux/kernel/sys.c中添加以下处理函数:
函数源码如下:
(判断奇偶数)
asmlinkageintsys_mycall(intn)
{
if(n%2==0)
return1;
else
return0;
}
3.6清除以前编译内核时残留的.o文件和不必要的关联(如果以前没有进行过内核编译的话,则可以省略这步)
终端切换到:
cd/usr/src/linux
输入以下命令:
makemrproper
3.7asm、linux和scsi等链接是指向到新内核文件位置
为确保/usr/include/下的asm、linux和scsi等链接是指向要升级的内核源代码。
它们分别链向源代码目录下的真正的、该计算机体系结构所需要的include子目录。
执行以下代码:
#cd/usr/include/
#rm-rasmlinuxscsi
#ln-s/usr/src/linux/include/asm-genericasm
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
3.8配置内核,修改相关参数
3.8.1配置内核参数
y:
将该功能编译进内核。
n:
不将该功能编译进内核。
m:
将该功能编译成在需要时动态插入到内核中的模块。
单击“MainMenu”按钮,返回主配置窗口;
单击“Next”按钮,配置下一个配置项;
单击“Prev”按钮,配置上一个配置项。
选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于缩减内核,减少内核消耗的内存。
与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
终端下,修改路径为:
cd/usr/src/linux
使用图形界面命令:
makexconfig
1)文件系统
请务必要选中ext3文件系统,
Filesystems--->
[*]Ext3journallingfilesystemsupport
[*]Ext3SecurityLabels
[*]JBD(ext3)debuggingsupport
(一定要修改)
以上三项一定要选上,而且要内建(即标*).
网卡驱动:
DeviceDrivers--->
Networkingsupport--->
Ethernet(10or100Mbit)--->
<*>RealTekRTL-8139C+PCIFastEthernetAdaptersupport(EXPERIMENTAL)
<*>RealTekRTL-8139PCIFastEthernetAdaptersupport
声卡驱动:
DeviceDrivers--->
Sound--->
<*>Soundcardsupport
AdvancedLinuxSoundArchitecture--->
<*>AdvancedLinuxSoundArchitecture
<*>Sequencersupport
<>Sequencerdummyclient
<*>OSSMixerAPI
<*>OSSPCM(digitalaudio)API[*]OSSSequencerAPI
<*>RTCTimersupport
PCIdevices--->
<*>Inteli8x0/MX440,SiS7012;Ali5455;NForceAudio;AMD768/8111
OpenSoundSystem--->
<>OpenSoundSystem(DEPRECATED)
3.8.2生成依赖信息,清除旧的编译结果
配置内核后,返回命令窗口。
为确保关键文件,在正确的位置输入以下命令:
makedep(这一步不是必须的)
为确保所有有关文件都处于最新版本状态,需要输入命令:
makeclean
3.9编译二进制内核映像文件
在“/usr/src/linux”目录下建立二进制的内核映像文件,命令如下:
makebzImage
生成镜像文件过程:
3.10编译和安装模块
3.10.1编译模块
执行命令:
makemodules(接近2个小时)
3.10.2安装模块
执行命令:
makemodules_install(大概7分钟)
3.11配置启动信息和启动管理器
3.11.1配置启动信息
为了能够使用新版本的内核,我们还需要做一些改动:
#cp/usr/src/linux/System.map/boot/System.map-2.6.39
#cp/usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.6.39
#cp.config/boot/config-2.6.39
#mkinitramfs-o/boot/initrd.img-2.6.392.6.39
下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:
#cd/boot;rm-fSystem.mapvmlinuz
#ln-svmlinuz-2.6.39vmlinuz
#ln-sSystem.map-2.6.39System.map
3.11.2配置启动管理器
在终端输入以下命令:
sudoapt-getinstallstartupmanager
执行完之后,通过菜单栏中“System”“Administration”“StartUpManager”打开管理器
在管理器里选择已编译的新内核版本:
3.12重启系统,查看内核版本
重启系统后在终端键入命令查看内核版本:
uname–r
通过系统监视器查看内核版本信息:
到此,修改、编译内核完成。
4测试新系统内核
4.1编写测试程序
4.2编译和运行测试程序
期望运行结果:
在终端输入数字:
2
终端打印出:
Thenumberyousetisevennumber!
在终端输入数字:
7
终端打印出:
Thenumberyousetisoddnumber!
实际运行结果:
运行失败!
5实验总结
这次修改、编译内核过程经历了4次,最终的结果都是失败。
主要失败点是最后的测试程序调用不成功,其他的编译过程都没有什么太大的问题。
在每一次重新测试调用程序的时候心里都想着一定要成功,但结果每次都是事与愿违,每次都要重新再来。
内核编译是一个很耗时而且很费精力的过程,没几个小时根本做不出来,开着虚拟机还使得内存的使用率居高不行,当运行其他程序时还经常卡着。
为了达到目的,其它的什么都不管了,上网查找下出现类似错误的问题,试着去改进,但是还是运行不了程序,一直做到最后不够时间再来,只好把失败结果暂时放进文档上来,后面再继续修改。
从开始做到最后这段过程,熬过了很多令人厌烦的时间,尽管是这样,但对我本人来说也是一件好事。
它让我可以静下心来、认真的去做、去修改系统、了解系统。
虽然不能说了解大部分,但起码使自己有些了解。
这也是一件直到去做的事。
在后面的再修改、编译会继续把问题解决,让好自己尝一下成就感。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 内核 修改 编译