操作系统试验一指导手册提示此文档只包含一些基本的试验提示.DOCVIP

操作系统试验一指导手册提示此文档只包含一些基本的试验提示.DOC

  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文档。上传文档
查看更多
操作系统试验一指导手册提示此文档只包含一些基本的试验提示

操作系统实验一指导手册 提示:此文档只包含一些基本的实验提示,很多地方仍然需要自己去思考去实现。有能力的同学可以忽略此文档。 Fedora 7虚拟机镜像的初始登录用户名:seu,密码:seu,root用户密码:seu。 实验1:Linux内核代码分析 解压内核 桌面上的linux-2.6.21.tar.gz是linux-2.6.21的内核代码压缩包,解压: $ cd Desktop $ tar zxvf linux-2.6.21.tar.gz $ cd linux-2.6.21 生成内核配置文件 将当前正在运行的内核对应的配置文件作为模板来生成.config文件,即将/boot目录下的已有的config文件复制到linux-2.6.21目录下 $ make mrproper $ cp /boot/config-`uname -r` ./config 第一个命令make mrproper用来保证内核树是干净的,如果内核第一次编译则可以省略。其中的uname –r命令可查看当前环境下的内核版本号。 更新config文件: $ make oldconfig 部分新配置项会提示用户选择,都选N或者缺省即可,完成后即可生成.config文件。 编译安装内核 在编译内核前,可以定义自己的内核版本号,在内核代码的根目录下有Makefile文件,例如将第4行改为: EXTRAVERSION = -seu 这样新内核版本号就是2.6.21-seu $ make all $ su # make modules_install # make install # make headers_install Make all的执行过程可能比较长。 如果三个命令均成功执行,可以观察引导程序grub的配置文件/boot/grub/menu.lst的内容,在hiddenmenu之后可以看到刚刚编译安装的内核版本,将hiddenmenu那一行注释或删除,方便直接操作菜单: #hiddenmenu或者hiddenmenu 然后重启系统: # reboot 重启后可以看到grub菜单已经包含了新编译的内核。如果新内核启动失败,一般是由于配置或者内核代码修改的有问题,选择原先的内核启动,再进行修改、编译。 实验2:新增系统调用 在文件arch/i386/kernel/syscall_table.S的尾部加上要新增的系统调用函数的名称,如下图中添加了psta系统调用,注释中的320表示它的系统调用号 在include/linux目录下添加头文件psta.h,比如(千万别忘记struct {…} 结尾的分号): 修改include/linux目录下的Kbuild文件,把psta.h文件加进去。 header-y += x25.h header-y += psta.h unifdef-y += acct.h 在kernel目录下新建文件psta.c,在该文件中实现sys_psta函数: 宏asmlinkage定义在linux/linkage.h中,表示函数的参数通过栈传递,而不是寄存器,所有的系统调用都遵循这种参数传递方式。在上面的函数返回之前,可以插入打印一句话到内核日志,方便后面验证执行结果。 printk(Hello world\n); 注意顶上包含下面头文件,实现了printk。 #include linux/kernel.h。 修改文件kernel/Makefile,使得psta.c在编译时可见: 另外,第2步中psta的实现不一定要在一个新文件中,例如文件kernel/sys.c也许是添加这个系统调用的合适位置,这样的话第3步就不需要了。 在include/asm-i386/unistd.h里加上系统调用号的宏定义: 其中NR_syscalls表示的值应该是最大的系统调用号加一。 修改include/linux/syscalls.h,加上函数sys_psta的声明。 先在头上加入结构体申明struct pinfo; 在该文件的头文件引用列表的末尾添加: 这算是pinfo结构体的实现。在函数申明列表的最后添加: 重新编译内核 在清理上次编译生成的中间文件之前,最好将配置好的.config文件备份至别的目录下以防删除,否则必须再执行实验1中的第2步配置.config文件。 $ make mrproper 在实验1中就已提到该命令,用于清理编译内核代码的中间文件,它也会删除.config文件。在清理执行完成后,将备份的.config文件复制回来。然后执行实验1中的第3步就可以编译安装新内核了。在这个过程里面可以换一个内核版本名称,以示区别,比如EXTRAVERSION = -seu2。安装好的内核必须reboot后才能生效。 以上6步成功执行后系统调用psta就

文档评论(0)

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

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

1亿VIP精品文档

相关文档