没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示


试读
25页
操作系统实验: 通过实验,熟悉Linux 操作系统的使用,掌握构建与启动Linux 内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。 1.向Linux 内核增加新的系统调用,系统调用名称和功能自行定义 2.Linux 新内核的编译、安装和配置 3.编写应用程序以测试新的系统调用并输出测试结果
资源推荐
资源详情
资源评论










课程实验报告
课 程 名 称: 操作 系统
实验项目名称: 向
Linux
内核 增加一个系统调用
专 业 班 级: x xxxxxxxxxxxxxxxxxxx
姓 名: x xxxxxx
学 号: xxxxxxxxxxxxxxxxxx
完 成 时 间: xxxx 年 xx 月 xx 日

实验题目:向 Linux 内核增加一个系统调用
实验目的: 通过实验,熟悉 Linux 操作系统的使用,掌握构建与启动 Linux 内核
的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系
统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩
展操作系统的功能。
实验环境: 电脑一台,已安装 Linux 操作系统 CentOS,GCC 或其他 C 语言编译环
境。
实验原理:
内核:内核是整个操作系统的最底层,它负责了整个硬件的驱动以及提供了各种
系统所需的内核功能,包括防火墙机制,是否支持 LVM 或 Quota 文件系统,以及进
程和内存管理和通信功能。其实内核就是系统上面的一个文件而已,它包含了驱动主
机各项硬件的检测程序与驱动模块。内核文件通常被放置在 /boot/vmlinuz 中。
(uname –r 命令:显示内核版本信息)
内核模块:由于现在硬件更新速度太快,如果我的内核比较旧,我换了新的硬
件,内核肯定无法支持,怎么办?重新拿一个新的内核来处理吗?内核编译的过程是
很麻烦的。为了这个缘故,Linux 很早之前就已经开始使用所谓的模块化设置了。
即将一些不常用的类似驱动程序的内容独立出内核,编译成为模块,然后,内核可以
在正常运行的过程当中加载这个模块到内核。这样,在不需要改动内核的前提之下,
只要编译出适当的内核模块并加载它, Linux 就可以使用新的硬件。模块被放置
在/lib/modules/$(uname -r)/kernel 中。
内核编译:内核其实是一个文件,由源代码编译而成的,开机读完 BIOS 并加载
MBR 内的引导程序后,就开始加载内核到内存当中,所以要将它编译成系统可以认识
的数据才行。
实验内容及操作步骤:
1. Linux 环境下的 C 或 C++编译和调试工具的使用
2. 向 Linux 内核增加新的系统调用,系统调用名称和功能自行定义
3. Linux 新内核的编译、安装和配置
4. 编写应用程序以测试新的系统调用并输出测试结果
操作步骤:
一、向 Linux 内核增加新的系统调用,系统调用名称和功能自行定义
注:文中 需在
Terminal
输入 的命令已用 蓝色 标记。
1、 先将内核源码文件 linux-2.6.33.3.tar.gz 文件拷贝到 CentOS 系
统中,我是直接用 U 盘拷贝的。
注意 : 如果系统提示不能进行相关的操作,就在要输入的命令之前加上 sudo,进
行 sudo 操作时就遇到了这种情况,下面先进行 sudo 权限的更改,将权限赋给我的
用户名 ann

2、 sudo 权限更改:
按照网上搜索到的步骤,进行下图所示操作:
更改 sudoer 文件中的代码:
这样就修改成功了!
3、 增加系统调用:
第一步:先将源代码文件 linux-2.6.33.3.tar.gz 拷贝到/usr/src 目录
然后在 Terminal 打开/usr/src 目录:cd /usr/src/
过程如下图:
然后进行解压:tar xvf linux-2.6.33.3.tar.gz
解压完成!如下图所示:

第二步:修改源程序,增加系统调用实现
sodu vi /usr/src/linux-2.6.33.3/kernel/sys.c
加入下面的函数:
asmlinkage int sys_helloworld(int number) //该函数名中有下划
线
{
printk("hello,world\n"); /sudo/printk()函数是系统内核的
输出函数,区别于 printf()。
return number;
}
如下图所示:
第三步:修改头文件,增加系统调用声明

vi
/usr/src/linux-2.6.33.3/arch/x86/kernel/syscall_table_32.S
如下图所示:
将 223 行.long sys_ni_syscall 改为.long sys_helloworld。
如下图所示:
第四步:修改系统调用表,注册系统调用
增加一行 #define __NR_helloworld 223 对应上面的 223
二、Linux 新内核的编译、安装和配置
下面的 1-4 步都是在/usr/src/linux-2.6.33.3 目录下运行。先跳转到该目录
下。
1、 输入命令:yum –y install gcc
安装成功,安装结果如下图:
2、 输入命令:make mrproper 清除内核中不稳定的目标文件,附属文件及内核
配置文件。
3、 输入命令:make clean 清除以前生成的目标文件和其他文件。
4、 输入命令:make menuconfig 配置内核,采用默认的内核配置即可。
剩余24页未读,继续阅读
资源评论


qq_29121329
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
