目录

一、实验思路

二、准备工作——Linux内核编译步骤

1.实验环境配置

2.下载内核源码

3.解压缩内核源码文件

4.清除残留的.config和.o文件

5.配置内核

6.编译内核,生成启动映像文件

7.编译模块

8.安装内核

9.配置grub引导程序

10.重启系统

三、设计系统调用,返回指定进程的相关时间信息

1.分配系统调用号,修改系统调用表

2.申请系统调用服务例程原型

3.实现系统调用服务例程

4.重新编译内核

5.编写用户态程序测试新系统调用

四、函数详解

(1)find_get_pid(pid)

(2)pid_task()

(3)copy_to_user()

(4)list_for_each_entry(pos, head, member)

五、关于验收


一、实验思路

题目:返回指定进程的相关时间信息,如进程创建时间、进程在用户态及内核态的运行时间、进程的所有子孙进程在用户态的运行时间及在内核态的运行时间等。

本实验要求设计系统调用,而系统调用的实质是调用内核函数,于内核态中运行。 所以要先编译好内核,再来进行系统调用:

图2.1 实验流程

编译内核的步骤:

图2.2 编译内核步骤

二、准备工作——Linux内核编译步骤

1.实验环境配置

2.下载内核源码

点击进入Linux官方网站下载

3.解压缩内核源码文件

1.将下载的新内核压缩文件复制到/home中

2.进入压缩文件所在子目录

cd /home

3.分两步解压缩:

xz -d linux-6.0.8.tar.xz(别急,等着它运行完)tar -xvf linux-6.0.8.tar

运行完啦:

4.清除残留的.config和.o文件

注:一定要先进入linux-6.0.8子目录哟

不然会报错:

1.安装ncurses包命令(Ubuntu中为:libncurses5-dev):

apt-get install libncurses5-dev

2.在开始完全重新编译之前,执行如下命令来清除残留的.config和.o文件:

make mrproper

5.配置内核

运行命令:

make menuconfig

解决方法——依次执行如下命令:

apt-get install flexapt-get install bison

Do you want to continue?  y

然后再执行:make menuconfig

Save-Enter-OK-Enter-Enter,最后选择Exit,按下Enter键。

6.编译内核,生成启动映像文件

执行命令:

make -j32

来,让我们看看报了什么错:

不慌,执行下面两条命令安装缺少的包:

apt-get install libelf-devapt-get install libssl–dev缺少bison:apt-get install bison缺少flex:
apt-get install flex

还是报错:

scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory    25 | #include <openssl/opensslv.h>       |          ^~~~~~~~~~~~~~~~~~~~ compilation terminated.

make[1]: *** [scripts/Makefile.host:95: scripts/sign-file]

Error 1 make: *** [Makefile:1189: scripts]

Error 2 make: *** Waiting for unfinished jobs....

root@xxx:/home/linux-6.0.8# apt-get install libssl–dev Reading package lists... Done Building dependency tree

Reading state information... Done

E: Unable to locate package libssl–dev

解决方法:,先执行apt-get update,再执行apt-get install libssl-dev

libssl-dev安装步骤
Update the package index:apt-get updateInstall libssl-dev deb package:apt-get install libssl-dev

我用的是make -j16,想快点就make -j32,结果:

7.编译模块

make modules

好哇,又报错:

make[1]**No rule to nake target ‘debian/canonical-certs.pew’, needed by ‘certs/x509_certificate_list’.Stop.

解决方法:

编辑.config文件,输入命令:
vim .config

打开文件后输入“/”查找其所在的命令行(找到之后删除/xxxx,然后按I(Insert)键就不用我说了吧),如下图:

将文件中的CONFIG_SYSTEM_TRUSTED_KEYS置空,如果CONFIG_SYSTEM_REVOCATION_KEYS的值不为空的话,也将其赋空值。

之后再make -j32

CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

然后再,make -j16,嗯,又报错了,我真是把错都遇到了个遍,挺好:

解决方法——输入以下指令:,再 make -j16

apt-get install dwarves

成功啦!

HDU 操作系统实验二 -设计一个系统调用,返回指定进程的相关时间信息相关推荐

  1. HDU操作系统 实验1.2·1.3——设计和添加Linux系统调用

    实验介绍 上篇文章已经介绍了Linux内核的编译与安装,我们已经掌握了Linux系统内核的编译和启用.接下来,我们将学习掌握如何添加Linux的系统调用,学习掌握测试Linux系统调用. 什么是系统调 ...

  2. 操作系统实验二:物理内存管理系统

    操作系统实验二:物理内存管理系统 一. 实验目的 二. 实验内容 三. 实验准备 [实验概述] [关键数据结构] [执行流程] 四. 实验步骤 (一) 练习0:填写已有实验 (二) 练习1:实现 fi ...

  3. 广州大学2020操作系统实验二:银行家算法

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

  4. C语言程序设计:综合设计实验一(设计一个文字游戏)

    文章目录 C语言程序设计:综合设计实验一(设计一个文字游戏) 1.实验要求 2.设计思路 3.源码 4.后话 C语言程序设计:综合设计实验一(设计一个文字游戏) 1.实验要求 (1) 设计一个文字游戏 ...

  5. 操作系统实验1—实现单处理机下的进程调度程序

    操作系统实验1-实现单处理机下的进程调度程序 文章目录 操作系统实验1-实现单处理机下的进程调度程序 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个单处理机下的进程调 ...

  6. 2020 操作系统 实验二 进程通信

    实验二.进程通信 一.实验名称 进程通信 二.实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法. 三.实验原理 邮箱机制类似于日常使用的信 ...

  7. 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

    实验二 进程调度 一.     实验目的 1.       理解进程运行的并发性. 2.       理解处理器的三级调度. 3.       掌握先来先服务的进程调度算法. 4.       掌握短 ...

  8. 计算机操作系统实验二 进程管理

    一.实验目的 1.掌握进程的概念,明确进程的含义 2.认识并了解并发执行的实质 二.实验内容 1.编写一段程序,使用系统调用fork( )创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进 ...

  9. 杭电操作系统实验二---linux内核模块编译(完整实验报告)

    一 题目介绍 题目内容: (1)当模块被载入内核时会向系统日志文件中写入"hello,world":当被卸载时,会向系统写入"goodbye". (2)设计一个 ...

  10. 杭电(杭州电子科技大学)操作系统实验二:Linux内核模块编程

    实验内容 (1)设计一个模块,要求列出系统中所有内核线程的程序名.PID.进程状态.进程优先级.父进程的PID. (2)设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是列出该进程的家族信 ...

最新文章

  1. 【观点】开发人员的测试悖论
  2. 漫谈中国自主杀毒引擎
  3. SAP Spartacus简介
  4. java回车后自动从一个文本框切换到另一个_Java实用教程-Java基本语法-Java程序的构成...
  5. AD程序设计c语言,AVR AD转换的C语言编程
  6. np.where与np.argwhere共同点与区别分析
  7. Go、Java、C++,下一代测序工具开发谁更强?
  8. 从小白到区块链工程师:第一阶段:Go语言的HelloWorld初始(2)
  9. MongoDB-Replication Replica Set Arbiter
  10. SVM支撑向量机原理
  11. Python Django项目实例二
  12. 傲梅分区助手 linux,傲梅分区助手(详解磁盘操作)
  13. 华为eNSP三层架构网络配置
  14. 学校选课系统服务器繁忙,大学选课没选到怎么办
  15. python运行代码不成功_【Python】程序在运行失败时,一声不吭继续运行pass
  16. 【计算机网络】因特网通信
  17. python秒表项目_第一个Python小项目——秒表
  18. C和C++中的struct
  19. linux 快速启动应用程序(alias使用)
  20. 调试助手与康耐视智能相机Insight以太网通讯

热门文章

  1. 为什么会出现淘宝客比价订单?怎样才能省钱购物?
  2. 标准误和标准差及CV值
  3. android下划线链接,android7.0 TextView去除超链接下划线就这么难吗?
  4. Python 学习2-元组、字符串
  5. HTTP/2 协议规范
  6. 瞳孔特征值提取,blink frequency,fixation frequency,saccad extent, pupil diameter等
  7. 远程访问ESXi网页控制台
  8. 我和谷歌共同成长----Andriod(安卓)开发(持续更新)
  9. 服装吊牌如何在条码打印软件中制作?
  10. Servlet小服务程序(Service + Applet)