- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学 号 姓 名 专业、班 电商1202 实验地点 指导教师 万少华 时间 2014.4.9 电商1202操作系统原理实验报告 实验序号:02 实验项目名称:Linux新增系统调用 实验目的及要求 加深对系统调用的理解,掌握增加与调用系统调用的方法 掌握内核编译方法 二、实验设备(环境)及要求 1.windows操作系统 2.vmW虚拟机 3.linux- 2.6.28,linux-3.1-rc4.tar.gz 实验内容与步骤 准备工作:下载linux-2.6.28的内核。在虚拟机设置与本机的共享文件夹,实验相关的都放到这里面。将新的内核拷贝到/home/cw/(因为如果直接拷贝到/usr/src/,后续系统调用时的文件修改无法进行)。 实验过程: 首先获得root权限,方便后面的一系列操作,输入su,接着输入密码。跳转到/home/cw/目录输入ls查看文件,看到了linux- 2.6.28.tar.bz2,解压之,得到linux- 2.6.28这个文件夹 (其它乱七八糟的均为前几次实验的失败产物-3-) 接着在文件夹中找到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/(因为解压后的linux-2.6.28文件夹有权限限制不能直接修改)。在sys.c最后添加调用函数,在syscall_table_32.S后加系统调用号,在unistd_32.h添加声明。 (3)将修改好的复制进/home/cw/linux-2.6.28/,再将整个文件夹复制到/usr/src/中 输入make mrproper清除以前编译的东西。make oldconfig.使用已有的配置。 在make oldconfig时出错了!Unable?to?find?the?ncurses?libraries 于是在网上找到如下的解决方法: CentOS:yum install -y ncurses-devel Ubuntu: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 __NR_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); return (long)num; } 接着输入mak输入命令:make modules_install 输入命令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 目录下。 使用GCC编译并执行。 分析与讨论 实验一遇到的问题与解决过程: 看完实验要求之后是一头雾水,无从下手。试着装了虚拟机,然后又发现还要装linux系统,下好之后跟着网上的教程一步步的配置,一边弄一边感叹为什么我的电脑和网上的不一样!总之在安装和配置纠结了很久。 然后是在vi上编辑shell脚本,当时连VI怎么开都不知道,后来查到是ctrl+alt+F2,然后跟着教程做,结果在运行脚本的时候出错了,错误大概的意思是“找不到复制目录”。于是重新建了文件夹和文件,再次运行,还是同样的错误-3-。于是重头开始再做一遍,保存脚本的时候又出错了,错误大概意思
文档评论(0)