linux实验_添加系统调用-完整版.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux实验_添加系统调用-完整版

实验一 添加一个新的系统调用 实验目的理解操作系统内核与应用程序的接口关系;加深对内核空间和用户空间的理解;学会增加新的系统调用。 实验内容与要求增加系统调用函数连接新的系统调用重建新的Linux内核用新的内核启动系统使用新的系统调用–xjvf LINUX_2_6_22_5.TAR.BZ2 解压缩源代码,命令执行完毕后,会出现/usr/src/linux-2.6.22.5文件夹 4.修改文件夹下的3个文件 第一,编辑/usr/src/linux-版本号/kernel/sys.c文件,添加函数: asmlinkage long sys_mycall(long number) { printk(“call number is %d\n”,number); return number; } 第二,修改/usr/src/linux-版本/include/asm-i386/unistd.h 添加一行#define __NR_mycall 324 到当前的最大系统调用号之后 ,比如原来最大的是323,在323的这一行之后 加上一行 #define __NR_mycall 324 修改#define NR_systemcalls 的值,改成原来的值+1,比如原来是324 改成325 第三,编辑/usr/src/linux-版本/arch/i386/kernel/syscall_table.S,在文件最后加上一行: .long sys_mycall 5.重新编译内核 在终端输入命令,进入源代码文件夹,cd /usr/src/linux-2.6.22.5 依次执行如下命令: make mrproper make clean make xconfig (自己配置内核,出现图形对话框后,直接点保存,关闭) make (耗时最长,大约20分钟) make modules_install (安装模块) 以上命令执行完毕后,会在当前目录下生成一个名为System.map的文件,会在/usr/src/linux-版本号/arch/i386/boot/下生成一个bzImage文件。 在终端执行以下命令: cp /usr/src/linux-版本号/arch/i386/boot/bzImage /boot/vmlinuz-版本号 (拷贝内核镜像) cp /usr/src/linux-版本号/System.map /boot/System.map-版本号 (拷贝符号表) cd /boot (进入/boot目录) mkinitrd initrd-版本号.img 版本号(如mkinitrd initrd-2.6.22.5.img 2.6.22.5) (生成临时根文件) 6.编辑启动配置文件grub 编辑/boot/grub/grub.conf 在grub.conf文件中,每一个title标签表示一个启动项,仿照第一段title的写法,编写新内核的启动项,其中kernel和initrd使用新拷贝过来的vmlinz—版本号文件和initrd-版本号.img文件。(可以先复制一段title的内容,修改title后面的启动名称,修改kernel 和 initrd 后面指定的启动文件,如下图所示,选中的内容是修改后的) 图1 原来的grub配置文件 图2 修改后的grub配置文件 7.重新启动系统,使用新生成的内核。 8.编写测试程序,测试新系统调用。 testcall.c int main() { syscall(324,100); /*324是新添加的系统调用号,100是参数*/ return 0; } 终端编译 gcc testcall.c –o testcall 运行 ./testcall 查看结果 :终端运行命令dmesg 会看到在最后一行输出 call number is 100 2.4内核下添加系统调用的方法(添加系统调用必须是root用户) 获得linux源代码 在linux系统的/usr/src目录下有系统的源代码。(如果没有,可以先下载,然后解压到此目录下),解压完毕后,源代码的目录就是/usr/src/linux-版本号 添加自定义的系统调用实现函数 编辑/usr/src/linux-版本号/kernel/sys.c文件,添加函数: asmlinkage long sys_mycall(long number) { printk(“call number is %d\n”,number); return number;

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档