新增系统调用实验报告_第1页
新增系统调用实验报告_第2页
新增系统调用实验报告_第3页
新增系统调用实验报告_第4页
新增系统调用实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学号姓名专业、班电商1202实验地点指导教师万少华时间2014.4.9电商1202操作系统原理实验报告实验序号:02实验项目名称:Linux新增系统调用 一、 实验目的及要求v 加深对系统调用的理解,掌握增加与调用系统调用的方法v 掌握内核编译方法二、实验设备(环境)及要求1.windows操作系统2.vmW虚拟机3.linux- 2.6.28,linux-3.1-rc4.tar.gz三、 实验内容与步骤准备工作:下载linux-2.6.28的内核。在虚拟机设置与本机的共享文件夹,实验相关的都放到这里面。将新的内核拷贝到/home/cw/(因为如果直接拷贝到/usr/src/,后续系统调用时的

2、文件修改无法进行)。实验过程:(1) 首先获得root权限,方便后面的一系列操作,输入su,接着输入密码。跳转到/home/cw/目录输入ls查看文件,看到了linux- 2.6.28.tar.bz2,解压之,得到linux- 2.6.28这个文件夹获得Root权限解压解压过程 (其它乱七八糟的均为前几次实验的失败产物-3-)(2) 接着在文件夹中找到kernel/sys.c,arch/x86/kernel/syscall_table_32.S和/usr/src/linux-2.6.29.1/arch/x86/include/asm/unistd_32.h,拷贝到/home/cw/(因为解压后

3、的linux-2.6.28文件夹有权限限制不能直接修改)。在sys.c最后添加调用函数,在syscall_table_32.S后加系统调用号,在unistd_32.h添加声明。(3)将修改好的复制进/home/cw/linux-2.6.28/,再将整个文件夹复制到/usr/src/中复制文件这里是在删除前几次失败实验的东西。避免看花了眼。(3) 输入make mrproper清除以前编译的东西。接着输入make oldconfig.使用已有的配置。在make oldconfig时出错了!Unabletofindthencurseslibraries 于是在网上找到如下的解决方法: CentOS

4、:yum install -y ncurses-develUbuntu:sudo apt-get insatll ncurses-dev编译新内核配置成功又出错了!度娘了一下,原来是32位和64位在编译上的问题,我的centOS是64位的。 而内核的版本太早了。所以结论是再下一个新的内核重新做。由于前面的步骤基本上都一样,所以没有截图。64位在修改的文件上有一点不同:1)2) linux-3.1-rc4/arch/x86/include/asm/unistd_64.h可以看到原有的最后一个系统调用为: #define _NR_syncfs 344在后面添加自己的系统调用: #define _N

5、R_mycall 345同时,修改总的系统调用数: #define NR_syscalls 346 3)linux-3.1-rc4/include/linux/syscalls.h添加增加的系统调用的声明:asmlinkage long sys_mycall(int num);4) linux-3.1-rc4/kernel/sys.c添加系统调用函数: SYSCALL_DEFINE1(mycall, int, num) printk(This is my syscall from kernel.n); printk(current pid is: %d.n, current-pid); ret

6、urn (long)num; (4) 接着输入make编译内核,等了十多分钟。输入命令:make modules_install,又等了很久很久。(5) 输入命令mkinitramfs -o initrd.img-2.6.29.1 2.6.29.1在目录/usr/src/linux-2.6.29.1下生成一个压缩包一样的东西:initrd.img -2.6.29.1,拷贝到/boot 目录下。然后重启。(6) 我在win7系统中写了一个测试的小程序,拷贝到虚拟机的/home/cw/。(7) 使用GCC编译并执行。结果 四、 分析与讨论实验一遇到的问题与解决过程:a) 看完实验要求之后是一头雾水

7、,无从下手。试着装了虚拟机,然后又发现还要装linux系统,下好之后跟着网上的教程一步步的配置,一边弄一边感叹为什么我的电脑和网上的不一样!总之在安装和配置纠结了很久。b) 然后是在vi上编辑shell脚本,当时连VI怎么开都不知道,后来查到是ctrl+alt+F2,然后跟着教程做,结果在运行脚本的时候出错了,错误大概的意思是“找不到复制目录”。于是重新建了文件夹和文件,再次运行,还是同样的错误-3-。于是重头开始再做一遍,保存脚本的时候又出错了,错误大概意思是“该文件已经存在”。把该删的都删了,又重头开始做。终于,第三次成功了。c) 最后是在GCC上编译C程序,由于有了上一个问题的折磨对VI

8、熟悉了不少,这次顺利的一次性完成。实验二遇到的问题与解决过程:a) 由于一开始很多东西都不懂,随便下了个内核,结果找不到要修改的文件,只好重新下,又遇到编译的问题。再次重新做才成功。(这就是我的/usr/src/目录为什么会有这么多乱七八糟的东西)。b) 权限问题是导致这次实验的步骤变得如此繁琐的罪魁祸首。开始不懂root权限,仅仅是为了将文件拷贝进/usr/src/目录就用了一个晚上。而这最简单的一步,在我所看到的资料里都直接忽略了这个问题,以至于我纠结许久。c) 在实验过程中还出现了各种各样教程上没有出现的问题,比如说make menuconfig的时候没有进到目录,导致一直出错、没有装ncurses-dev、拷贝的时候漏了一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论