欢迎来到天天文库
浏览记录
ID:18135210
大小:1003.38 KB
页数:7页
时间:2018-09-14
《邓 豪--操作系统原理实验报告一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux增加新的系统调用计科13011309050158邓豪实验环境:win7系统下的linuxUbuntu虚拟机镜像文件: ubuntu-12.04.3-desktop-i386.iso(安装在虚拟机中时分配1g内存,20g空间)实验内容:(1)linux内核源文件修改(包含添加自己的写的系统调用),编译,安装 (2)编译,运行一个程序检验是否能够成功调用添加的系统调用实验步骤:1.安装Ubuntu虚拟机,为了方便操作同时安装Vmwaretools1)开启虚拟机后挂载VMwareVMwareWorkstation文件夹中
2、的linux.iso.2)重启解压出vmware-tools-distrib,在终端运行指令sudosu,输入管理员账户与密码,成为超级用户,cd/桌面/vmware-tools-distrib,sudo./vmware-install.pl,出现[/USR/bin]之后一直开始按回车键直接按到/dev/sr0...停止为止reboot重启系统,便可以实现虚拟机与主机之间的文件共享。3)将从官网下载的内核移动到虚拟的桌面。在终端中输入sudonautilus以获得权限将内核的压缩包解压到usr/src文件夹中1)下载并安装用于源码配置
3、的工具在终端中输入sudoapt-getinstallbuild-essentialkernel-packagelibncurses5-dev2)修改源码,我们的目的是添加一个新的系统调用。先使用sudonautilus再打开/usr/src/linux-3.10/kernel/sys.c添加头文件#include文末添加自定义的系统调用函数:6)/usr/src/linux-3.10/arch/x86/syscalls/syscall_32.tbl(如果你的虚拟机是64位的,则需修改syscall_
4、64.tbl)在系统调用向量表里添加自定义的系统调用号(这个可以适当选取一个没有用到的号):7)/usr/src/linux-3.10/arch/x86/include/asm/syscalls.h在适当的位置添加系统调用函数声明:8)内核编译在终端中输入cd/usr/scr/linux-3.17.1依次进行:内核配置:sudomakeolddefconfig编译内核和模块:在Ubuntu下,安装kernel-package这个包之后,就可以使用make-kpkg来简化编译流程了。sudomake-kpkgclean(清理)sudom
5、ake-kpkg--initrd--append-to-version=wrm128kernel-imagekernel-headers(在版本后追加字符串wrm128,生成kernel-image和kernel-headers文件)。9)安装内核:编译完成后,在/usr/src/中会看到生成两个deb文件。执行以下命令进行安装:Sudodpkg-ilinux-image-3.17.1wrm128_3.17.1wrm128-10.00.Custom_i386.deblinux-headers-3.17.1wrm128_3.17.1wr
6、m128-10.00.Custom_i386.deb安装完成后reboot重启系统。键入命令:uname-a,查看一下现在的内核版本:10)测试系统调用在主文件目录(/home)下创建文件夹:mkdirtest进入/home/test/目录下,创建文件testHello.c:gedittestHello.c编写测试代码:在我的系统调用函数中有一个char*的字符串参数,故在调用时不仅要将系统调用号357传入,还要将char*的字符串传入。11)编译运行:进入/home/test/目录,执行命令:sudogcctestHello.c-o
7、testHello编译成功后,执行命令:./testHello12)查看内核日志查看系统调用在内核空间的运行情况,执行命令:dmesg系统调用完成!!不同的操作系统及内核版本的操作流程可能会有所不同,不能完全参照网上的教程,这个需要试验和摸索在完成实验之前失败过一次,在sudomake之后,出现了这样的结果连虚拟机都打不开,之后重新开始。虽然实验很麻烦,但还是学到了许多东西,比如一些用来获取权限的指令,一些对系统文件下载链接的修改等等,对系统调用也更加熟悉了。
此文档下载收益归作者所有