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