西南交通大学【操作系统实验6】

news2024/11/18 14:21:30

实验目的

学习如何产生一个系统调用,以及怎样通过往内核中增加一个新函数,从而在内核空间中实现对用户空间的读/写。学习重建内核。

实验内容

  1. (1)设计并实现一个新的系统调用pedagogictime() ,该函数通过使用一个引用参数的调用返回当前的系统时间。
  2. (2)编写一个用户空间程序来测试pedagogictime()。

实验环境

系统版本:Ubuntu 14.04 LTS

内核版本: Linux 3.2.0.29-generic

欲编译内核:Linux-2.6.32.60

实验步骤

解压内核:

内核文件在文件目录Documents下,将压缩包解压到/usr/src/目录下。

  1. oslinux@oslinux-virtual-machine:~$ cd Documents

//进入Documents目录下

  1. oslinux@oslinux-virtual-machine:~/Documents$ sudo cp linux-2.6.32.60.tar. bz2 /usr/src/

//将压缩包拷贝到/usr/src/目录下

  1. oslinux@oslinux-virtual-machine :~/Documents$ cd /usr/src/

//进入 /usr/src/目录下

  1. oslinux@oslinux-virtual-machine:/usr/src$ sudo tar -jxvf linux-2.6.32.60.tar.bz2

//解压压缩包

2.添加系统调用:

(1)编写系统调用服务例程

编写加到内核中的源程序,即将要加到一个内核文件中去的一个函数,该函数的名称应该是新的系统调用名称前面加上sys_标志。

注意要在/usr/src/linux-2.6.32.60/kernel/sys.c文件中添加源代码。

//用编辑器打开sys.c文件添加系统调用pedagogictime的代码

oslinux@oslinux-virtual-machine:~$ sudo gedit /usr/src/linux-2.6.32.60/kernel/sys.c

//添加到sys.c的最后一行,代码如下:

asmlinkage long sys_pedagogictime(struct timeval *tv)

{

if(likely(tv)) {

struct timeval ktv;

do_gettimeofday(&ktv);

if(copy_to_user(tv,&ktv, sizeof(ktv)))

return -EFAULT;

}

return 0;

}

(2)添加系统调用号

为了从已有的内核程序中增加到新的函数的连接,需要编辑两个文件:

在/usr/src/linux-2.6.32.60/arch/x86/include/asm/unistd_32.h中增加新的系统调用号

同时还要将宏变量NR_syscalls的值加1 ;

oslinux@oslinux-virtual-machine:~$ sudo gedit/usr/src/linux-2.6.32.60/arch/x86/include

/asm/unistd_32.h

(3)修改系统调用表

在/usr/src/linux-2.6.32.60/arch/x86/kernel/syscall_table_32.S中增加新的内核函数的指针。

oslinux@oslinux-virtual-machine:~$ sudo gedit /usr/src/linux- 2.6.32.60/arch/x86/kernel

/syscall_table_32.S

(4)重新编译Linux内核

在当前工作目录(/usr/src/linux-2.6.32.60)进入超级用户,才可以重建内核。

oslinux@oslinux-virtual-machine:~$ cd /usr/src/linux-2.6.32.60

oslinux@oslinux-virtual-machine:/usr/src/linux-2.6.32.60$ sudo –s

现在开始编译内核。编译内核的基本过程为:

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make mrproper

//清除依赖

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60#cp /boot/config-3.2.0-29-generic-pae .config

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make oldconfig

//更改配置(一直回车)

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make clean

//清除中间文件

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make bzImage

 //编译内核

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make modules

//编译内核模块

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make modules_install

//安装内核模块

root@oslinux-virtual-machine:/usr/src/linux-2.6.32.60# make install

 //安装内核

(5)启用新内核

重新启动ubuntu,开机时长按shift键直到进入启动加载页面,选择新编译的内核版本,按回车键确认选择并进入系统。

查看内核版本,是否为新内核版本:oslinux@oslinux-virtual-machine:~$ uname –a

(6)测试

编写测试程序,测试新的系统调用是否添加成功。

5.实验结果

结果展示

查看版本结果

在新版本内核下运行代码结果

结果解读

查看内核版本为新内核版本,说明内核切换成功。

运行测试程序调用新添加的函数,返回当前的系统时间。

核心代码

#include <sys/syscall.h>

#include <linux/unistd.h>

#include <stdio.h>

#include <sys/time.h>

#include <time.h>

main(){

    struct timeval tv;

    long tmp;

    tmp = syscall(337, &tv);

    if(tmp != -1){

        printf("First, user get tv_sec:%d\n", (int)tv.tv_sec);

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable diffusion的SDXL模型,针不错!(含实操)

与之前的SD1.5大模型不同&#xff0c;这次的SDXL在架构上采用了“两步走”的生图方式&#xff1a; 以往SD1.5大模型&#xff0c;生成步骤为 Prompt → Base → Image&#xff0c;比较简单直接&#xff1b;而这次的SDXL大模型则是在中间加了一步 Refiner。Refiner的作用是什么呢…

Base64编码和ASCII编码

1字节Byte 8比特bit 单位换算关系Byte1Byte 8bitKB1024ByteMB1024KBGB1024MB 网速中的Mbps和MB/s Mbps 1M bit/s 1024 K bit/s 1024 * 1024 bit/s MB/s 1024 KB/s 1024 * 1024 B/s 1024 * 1024 * 8 bit/s 所以&#xff1a;1Mbps 1/8 MB/s 1个bit&#xff0c;可以表示…

利用Python的NLTK库来查询指定单词的同义词

一、NTLK库介绍 NLTK&#xff08;Natural Language Toolkit&#xff09; 是Python中最为知名的自然语言处理&#xff08;NLP&#xff09;库之一&#xff0c;它提供了丰富的模块和数据结构&#xff0c;专门用于人类语言数据的统计自然语言处理。它包含了文本处理库用于分类、标记…

手机丢失不惊慌,华为手机已升级至楼层级设备查找!

出门总是丢三落四&#xff0c;手机丢了怎么办&#xff1f;不要怕&#xff0c;只要你的华为手机升级至云空间新版本&#xff0c;就可以进行楼层级设备查找&#xff0c;现在可以查看到具体的楼层了&#xff01; 之前有手机丢失过的朋友&#xff0c;肯定有相似的经历&#xff0c…

网页宽度现在右侧有一个竖条空白,怎么啦车网站都没办法完全铺满宽度,怎么回事怎么解决

问: 网页宽度怎么设置全覆盖 回答: 经过检查,发现 是这个网站的最外层html标签设置了宽度,所以导致,当我们删除html的宽度后就解决了这个问题.

【会议征稿,ACM出版】2024年粤港澳大湾区教育数字化与计算机科学国际学术会议(EDCS 2024,6月21-23)

人工智能、区块链、虚拟现实技术等新一轮技术革命正在推进社会结构变革&#xff1b;数字化转型正在重塑社会、劳动力市场和未来工作形式&#xff0c;其中关于教育领域&#xff0c;2019&#xff0c;2020的冠状病毒病大流行给全球教育带来巨大挑战&#xff0c;加速了教育数字化转…

海南聚广众达电子商务咨询有限公司打造一站式电商服务

在数字经济的浪潮中&#xff0c;电商行业蓬勃发展&#xff0c;各种平台和服务商如雨后春笋般涌现。其中&#xff0c;海南聚广众达电子商务咨询有限公司凭借其专业的团队和丰富的经验&#xff0c;在抖音电商服务领域独树一帜&#xff0c;成为业界的佼佼者。 海南聚广众达电子商…

Advanced Intelligent Systems 清华大学曲钧天团队设计了基于光纤传感技术的多模态触觉感知仿生机械手

随着软体机器人技术的发展&#xff0c;触觉感知在人机安全交互、可穿戴设备和医疗器械领域发挥着重要作用。如何用简单的系统集成更多的触觉感知、获取更多交互信息面临着诸多挑战。 近日&#xff0c;清华大学国际研究生院曲钧天助理教授团队在国际期刊Advanced Intelligent S…

python的resample()函数

介绍 在Python中,resample()函数是一个常用的工具,用于对时间序列数据进行重新采样。这个函数可以将时间序列数据从一个频率转换为另一个频率,比如将每天的数据转换为每月的数据。在本教程中,我将向你展示如何使用resample()函数,并解释每个步骤的具体含义。 整体流程 首先…

泉城济南的隐秘珍宝与山东旅游必去十大景点

泉城济南的隐秘珍宝与山东旅游必去十大景点 济南&#xff0c;这座历史悠久的城市&#xff0c;不仅以其丰富的人文底蕴著称&#xff0c;还拥有诸多引人入胜的自然景观。在这片华夏神州广阔的齐鲁大地上&#xff0c;济南特别以其“三无风景区”——无影山、无影潭、无影泉——而闻…

云联HIS系统源码,二级医院信息系统源码,支持云架构部署模式

采用java语言开发B/S广域互联模式&#xff0c;支持云架构部署模式&#xff0c;支持大数据分析技术&#xff1b;支持与医保平台接口、电子票据对接。 云HIS系统相关技术&#xff1a; 后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;Sprin…

Facebook商城号怎么做?思路与操作分析

2016 年&#xff0c;Facebook打造了同名平台 Facebook Marketplace。通过利用 Facebook 现有的庞大客户群&#xff0c;该平台取得了立竿见影的成功&#xff0c;每月访问量将超过 10 亿。对于个人卖家和小企业来说&#xff0c;Facebook Marketplace是一个不错的销货渠道&#xf…

电商项目-day02

文章目录 分析项目结构登录请求项目搭建Result总结 分析项目结构 语法的限制打开 端口修改 修改port 前端的入口工程是main.js 登录请求 早期的登录是使用session 称为 会话 也称为域 使用jwt进行验证 模块 spzx-partent 父工程 使用pom 其他的模块都是 jar包 项目搭…

《Brave New Words 》5.1 传递真相:偏见和虚假信息现状

Part V: Keeping Kids Safe 第五部分&#xff1a;确保孩子安全 Never travel faster than your guardian angel can fly. —Mother Teresa 永远不要比你的守护天使飞得更快。 ——特蕾莎修女 Distrust and caution are the parents of security. —Benjamin Franklin 不信任和谨…

LabVIEW轴承试验机测控系统

开发了一种基于LabVIEW软件开发的大功率风电机组增速箱轴承试验机测控系统。系统主要用于模拟实际工况&#xff0c;进行轴承可靠性分析&#xff0c;以优化风电机组的性能和可靠性。通过高度自动化的测控系统&#xff0c;实现了对试验机的精确控制&#xff0c;包括速度、振动、温…

白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务|

简介 基于Cloudflare Workers 搭建 Docker Hub镜像加速服务。 首先要注册一个Cloudflare账号。 Cloudflare账号下域名的一级域名&#xff0c;推荐万网注册个top域名&#xff0c;再转移到Cloudflare&#xff0c;很便宜的。 注意 Worker 每天每免费账号有次数限制&#xff0c;为…

48.HTTP 规范规定,跟随重定向时必须使用 GET 方法

起因&#xff1a; 今天在练习一个Django功能时&#xff0c;把form的method设置为POST&#xff0c;但是实际提交时&#xff0c;一直是GET方法。最后&#xff0c;从下面这张图发现了端倪&#xff1a; 第一次是method是POST方法&#xff0c;被重定向时&#xff0c;变成了GET。 继…

综合型驱鸟装置:光伏电站集束冲击波驱鸟器

光伏电站作为绿色、清洁的能源生产方式&#xff0c;正在全球范围内得到快速发展。在光伏电站的建设和运营过程中&#xff0c;鸟类活动所带来的影响逐渐凸显&#xff0c;成为电站管理者需要面对的重要问题。在此背景下&#xff0c;光伏电站驱鸟器的需求也不断增长。 目前市场上的…

echart盒子没有跟着当前div大小变化而自适应

一、问题描述 当echarts图表在一个盒子里的时候&#xff0c;盒子大小变化了&#xff0c;但是图表没有跟着自适应&#xff0c;比如这样&#xff0c;盒子变大了&#xff0c;但是图表没变化 二、解决方法 在盒子大小更改的同时&#xff0c;调用图表的resize方法&#xff0c;记…

RERCS系统开发实战案例-Part02 创建BOPF对应的业务对象(Business Object)

1、通过事务码 BOBF创建业务对象 2、输入debug&#xff0c;进入编辑模式新建BO对象&#xff1b; 选择对应的BO对象属性类别&#xff1a; 3、激活BO对象 接口页签&#xff1a; 属性页签&#xff1a;自动带出标准的常量 改接口类部分源码&#xff1a; 4、BO对象Node Elemen…