Linux内核编译及添加系统调用

1 总体设计思路

系统调用的本质是调用内核函数,以内核态运行程序。为了在内核态下运行,本实验针对Linux的内核进行修改,增加自定义系统调用函数实现用户态程序对任意进程的nice值进行修改或者读取来进行测试。

2 主要函数的接口设计

核心态程序

SYSCALL_DEFINE3(mysetnice, pid_t, pid, int, flag, int, nicevalue)

其中pid为选择进程的进程标识符;flag是操作符,设计为0时读取nice值,设计为1时进行修改操作;nice值为一返回变量,返回内核程序读取到的进程nice值;共计三个变量。

使用SYSCALL_DEFINE声明添加到~/kernel/sys.c文件中。

3 项目实现过程

3.1 准备

本次实验使用的环境为装载在Vmware Workstation Pro 14中的Ubuntu 17.10镜像。

镜像下载地址:http://mirrors.zju.edu.cn/ubuntu-releases/17.10/

为了编译执行顺利,我给虚拟机分配了8GB RAM和100GB虚拟硬盘空间,同时vCPU分配了8个核心,以便make -jn命令的使用。

安装ubuntu的时候,一定要注意查看/boot分区是否足够,如果不是工作环境最好直接将/boot分区挂载在根目录下,否则编译的时候产生的文件会塞满/boot分区导致编译安装失败。

参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1413.html

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

strace命令使用

命令介绍strace是Linux环境下的一款程序调试工具,用来输出一个应用程序所使用的系统调用。strace底层使用内核的ptrace特性来实现其功能。什么是系统调用?系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给

IO多路复用

用户空间和内核空间Userspace(用户空间):用户程序的运行空间Kernelspace(内核空间):Linux内核的运行空间当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。Kernelspace可以执行任意