⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipage3.htm

📁 操作系统课程设计
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD><TITLE>实验二 增加系统调用  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="Microsoft FrontPage 6.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY background=images/back.gif>
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=382 width=846>
<TBODY>
<TR>
<TD colSpan=2 height=46 vAlign=bottom width=909><font color="#3D5063" size="5">
实验二增加系统调用&nbsp; </font><FONT color=#3d5063 size=5 style="CURSOR: hand">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></TD></TR>
<TR>
<TD colSpan=2 height=305 width=909>
<p class="MsoNormal"><span style="font-family:宋体">
<font color="#3D5063">
题目:
掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。另编写一个应用程序,调用新增加的系统调用。</font></span></p>
<p class="MsoNormal" style="text-indent: -21.0pt; margin-left: 57.0pt">
<font color="#3D5063"><span lang="EN-US" style="font-family: Symbol">
<font size="2">¨</font><span style="font-style: normal; font-variant: normal; font-weight: normal; font-family: Times New Roman"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font></span></span><span style="font-family:宋体"><font size="2">实现的功能是:文件拷贝;</font></span></font></p>
<p class="MsoNormal" style="text-indent: -21.0pt; margin-left: 57.0pt">
<font color="#3D5063"><span lang="EN-US" style="font-family: Symbol">
<font size="2">¨</font><span style="font-style: normal; font-variant: normal; font-weight: normal; font-family: Times New Roman"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font></span></span><span style="font-family:宋体"><font size="2">实现的功能是:<span lang="EN-US">P</span>、<span lang="EN-US">V</span>操作。</font></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;</font></span></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;</font></span><span style="font-family:宋体"><font size="2">设计分析<span lang="EN-US">:</span>题目要求增加一个新的系统调用,其实现要用编译内核的方式。</font></span></font></p>
<p class="MsoNormal"><span style="font-family:宋体">
<font size="2" color="#3D5063">  </font></span></p>
<p class="MsoNormal" style="text-indent: 31.5pt"><span style="font-family:宋体">
<font size="2" color="#3D5063">编译内核需要遵循以下的步骤:</font></span></p>
<p class="MsoNormal" style="text-indent: 42.0pt"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">(1)</font></span><span style="font-family:宋体"><font size="2">配置内核<span lang="EN-US">—--</span>进入<span lang="EN-US">/usr/src/linux-2.4.20-8/</span>目录下使用<span lang="EN-US">make 
xconfig</span>命令进行配置,完成后保存并退出,此时应在<span lang="EN-US">/usr/src/linux-2.4.20-8/</span>下生成<span lang="EN-US">.config</span>文件。</font></span></font></p>
<p class="MsoNormal" style="text-indent: 42.0pt"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">(2)</font></span><span style="font-family:宋体"><font size="2">创建内核<span lang="EN-US">----</span>在<span lang="EN-US">/usr/src/linux-2.4.20-8/</span>目录下按顺序使用</font><span lang="EN-US"><font size="2">make 
dep ,</font></span></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">make clean,make bzImage</font></span><span style="font-family:宋体"><font size="2">命令编译生成内核<span lang="EN-US">bzImage</span>。接着把<span lang="EN-US">bzImage</span>从<span lang="EN-US">/usr/src/linux-2.4.20-8/arch/i386/boot/</span>目录下拷贝至<span lang="EN-US">/boot/</span>目录下。</font></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)</font></span><span style="font-family:
宋体"><font size="2">修改引导软件</font><span lang="EN-US"><font size="2">grub:</font></span></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>
</span><span style="font-family:
宋体"><font size="2">增加几行:</font><span lang="EN-US"><font size="2">title Red Hat 
Linux(2.4.20-8 new)</font></span></span></font></p>
<p class="MsoNormal" style="text-indent: 115.5pt"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">
root(hd0,7)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --</font></span><span style="font-family:宋体"><font size="2">随机子不同而变化 
</font></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
kernel/boot/bzImage ro root=hd7 --hd?</font></span><span style="font-family:宋体"><font size="2">应为老内核的启动盘</font></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)</font></span><span style="font-family:
宋体"><font size="2">重新启动,进入新内核进行测试。</font><span lang="EN-US"><font size="2">&nbsp;&nbsp;
</font></span></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;</font></span></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp; </font></span>
<span style="font-family:宋体"><font size="2">修改系统调用的步骤:</font></span></font></p>
<p class="MsoNormal"><font color="#3D5063"><span style="font-family:宋体">
<font size="2">    <span lang="EN-US">(1)</span>修改系统调用表,在文件<span lang="EN-US">arch/i386/kernel/entry.S</span>中添加</font><span lang="EN-US"><font size="2">:</font></span></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;. long SYMBOL_NAME(sys_myCopy)()&nbsp;&nbsp;
</font></span></p>
<p class="MsoNormal" style="text-indent: -63.0pt; margin-left: 63.0pt">
<font color="#3D5063"><span lang="EN-US" style="font-family:宋体"><font size="2">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)</font></span><span style="font-family:
宋体"><font size="2">定义系统调用号,在文件<span lang="EN-US">/usr/include/asm-i386/unistd.h</span>以及<span lang="EN-US">/usr/src/linux/include/asm-i386/unisd.h</span>中添加系统调用号</font><span lang="EN-US"><font size="2">:</font></span></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define __NR_myCopy&nbsp;&nbsp;&nbsp;&nbsp; 259 </font>
</span></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)</font></span><span style="font-family:
宋体"><font size="2">添加自己的代码,修改<span lang="EN-US">/kernel/sys.c</span>。添加的源代码如下:</font></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">/*myCopy*/</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">asmlinkage int sys_myCopy( char *in,char *out){</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; int infile,outfile;</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; char *buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; int count,n;</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; mm_segment_t fs;</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; count=32;</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp; </font></span></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp; fs = get_fs();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*</font></span><span style="font-family:
宋体"><font size="2">取现态</font><span lang="EN-US"><font size="2">*/</font></span></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp; set_fs(get_ds());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/*</font></span><span style="font-family:宋体"><font size="2">设核态</font><span lang="EN-US"><font size="2">*/</font></span></span></font></p>
<p class="MsoNormal"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">&nbsp;&nbsp;&nbsp; buf=(char*) 
kmalloc(count,GFP_KERNEL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*</font></span><span style="font-family:宋体"><font size="2">开辟内核空间</font><span lang="EN-US"><font size="2">*/&nbsp;
</font></span></span></font></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buf==NULL){</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printk(&quot;Not enough&nbsp; memory !&quot;);</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (2);</font></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">
<font size="2" color="#3D5063">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></p>
<p class="MsoNormal" style="text-indent: 21.0pt"><font color="#3D5063">
<span lang="EN-US" style="font-family:宋体"><font size="2">if((infile=sys_open(in,O_RDONLY,S_IRWXU))==NULL){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/*</font></span><span style="font-family:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -