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

详解Linux内核编译添加系统调用 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了,也应该是懂了。1.需要准备虚拟机上安装Ubuntu,笔者安装的是,安装的教程自行百度解决,教程很多。建议去熟悉一下Linux下面的文件目录结构,根目录下每个目录一般会存放什么样的文件,然后常见命令操作也要熟悉一下。2.下载Linux内核地址,自行选择版本,建议选择4.xx版本,因为版本高出错的概率也大。 阅读详情

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

接下来的几篇博客会详细记录总结在Linux实践课程中的问题和感悟,这是第一篇。

内容要求

  1. 编译一个干净的Linux内核并加载成功,不需要对内核进行修改。
  2. 在1中新编译的内核中,添加一个系统调用,实现对指定进程的nice值的修改或读取功能。

开发平台

  • Linux环境 gcc vim

具体步骤

  1. 编译内核并加载

    • 首先下载内核kernel.org,我下载的是最新版。
      kernel

    • 将下载的linux-4.11.3.tar.xz文件移动到/usr/src/目录下使用命令 sudo mv ./linux-4.11.3.tar.xz /usr/src/ ,并进入/usr/src/目录,然后解压缩,使用命令 sudo xz -d linux-4.11.3.tar.xz && tar -xvf linux-4.11.3.tar && rm linux-4.11.3.tar

    • 进入linux-4.11.3子目录,执行 sudo make mrproper 清除.config和.o文件。
    • 配置内核。sudo make menuconfig 注意,执行此命令时,shell窗口不能太小,应为要使用配置对话框。在显示的对话框中,对于每个选项,你可以选择 ymn ,其中,y 表示将相应特性的支持或驱动程序编译进内核;m 表示将相应特性的支持或设备驱动编译成可加载模块,在需要时,可由系统或用户自行加载到内核中;n 表示内核不提供相应特性或驱动的支持。
      一般采用默认值,但设备驱动配置要检查,进入Device Drivers,如下图所示:

HDU_实验一:Linux 内核编译添加系统调用(你想要的都在这里) 1、添加一个系统调用,实现对指定进程的 nice 值的修改或读取功能,并返回进程最 新的 nice 值及优先级 prio。建议调用原型为: int mysetnice(pid_t pid, int flag, int nicevalue,void __user * prio, void __user * nice); 2、写一个简单的应用程序测试1、中添加系统调用。 3、若程序中调用了 Linux内核函数,要求深入阅读相关函数源码。 阅读详情

相关推荐

操作系统 实验1——Linux内核编译添加系统调用

文章目录Linux内核编译添加系统调用步骤1 查看旧内核版本2 下源码3 进入root权限4 解压源码,并放置到特定文件夹5 添加系统调用6 安装各个必备软件包7 清楚残余的 .config .o 文件8 配置内核9 编译内核10 编译模块11 安装内核与模块12 配置grub引导程序13 清理中间文件14 重启15 查看内核版本16 删除旧内核17 测试自己添加系统调用 Linux内核编译及...

qq_40939814的博客 1529

kernel里的头文件 asmasm-generic

本文转载于: https://www.cnblogs.com/sammei/archive/2013/03/14/3295598.html asm的路径是 arch/xxx/include/asm/ asm-generic 的路径是 include/asm-generic/ 代码中包含asm/中的头文件,如果某一个架构没有自己特殊代码的话,其中会使用通用版本的头文件,即包含 asm-generic/里的对应.h文件。 代码中不会直接包含 asm-generic/ 里的.h文件 拿arm来举例 #inclu

weixin_42992444的博客 6026

Linux内核编译添加系统调用(图例解析)

注意这里是不能直接&task_nice(p),个人的理解是task_nice(p)返回的是一个字面值,不能直接取地址,通过另外的变量将这个值暂存起来,取变量的地址(这个坑,笔者踩了很久才跳出来),copy_to_user 是将内核的值拷贝到用户状态。添加系统调用首先要分配系统调用号,切换到/home/serc/linux-4.13.7/arch/x86/entry/syscalls/使用 vim syscall_64.tbl。笔者这里使用的是VMware12,虚拟机的安装,笔者这里就不介绍了。

m0_74282605的博客 434

kernel里的头文件 asmasm-generic区别

Linux 内核源码中,asmasm-generic 是两个不同的目录,分别用于存放特定架构相关和通用的汇编头文件。它们之间的主要区别在于它们的目的和内容。

weixin_46743361的博客 1311

linux kernel头文件包含问题

一 平台相关代码 即arch/xxx目录下的代码能包含的头文件有: 1. arch/$(SRCARCH)/include/asm为平台相关头文件 2.include/asm-generic为所有平台共用的头文件,跟具体平台无关,提取平台相关的共同定义部分,如: ./arch/arm64/include/asm/irq.h:11:#include <as...

whuzm08的专栏 4978

errno

老得查errno,干脆整理下咯。

pyyaoer的专栏 793

Linux6.8最新版本asm路径下分页管理源码详解

文件目录为/usr/src/linux-headers-6.8.0-45-generic/include/asm-generic,本次分析了其中三个头文件和。

weixin_51432496的博客 1900

Ubuntu 18.04环境下编译Linux内核以及添加系统调用

文章目录使用工具及环境编译安装依赖编译前的配置开始编译安装内核验收成果结果系统调用准备阶段声明和定义系统调用函数添加一个系统调用id进行编译运行检验结束参考链接OK,THANKS FOR READING.BYE BYE~ 有个操作系统实验,然后呢,最开始的实验内容就是编译Linux内核,这个东西有些恶心,错一个结果就错,而且你还不知道哪里错了,好久没写文章了,这次就把这个记录一下吧,顺便后排感谢某...

RBK的博客 7029

linux内核编译添加系统调用(详细版)

linux内核编译添加系统调用 注:文章共四部分,分别是 1、编译更换内核 2、添加一个简单系统系统调用 3、添加读取/修改nice值的系统调用 4、自己设计简单(真的简单)系统调用 注:四个部分结构相似,请根据自身需求自行选择观看。(ps有点唠叨的,但也比较完整),不同内核环境会有差别,使用不同版本可能会产生非预期的错误,如有错误欢迎评论区指出。 相关资源 相关资源: 1、kernel内核源码...

weixin_43641850的博客 2万+

杭电网安操作系统实验一:Linux 内核编译添加系统调用

杭电网安操作系统实验一:Linux 内核编译添加系统调用一、实验介绍:二、任务描述:三、具体实验步骤:(一)实验思路:(二)遇到问题及解决办法:(三)核心代码与结果展示:<1>掌握Linux 内核编译与安装(任务0)<2> 掌握Linux 系统调用基本概念<3>设计和添加系统调用任务一:修改或返回指定进程的优先级(nice值和prio值)任务二:添加一个新的系统调用,改变主机名称为自定义字符串 文章较长直接点击以下目录索引即可 一、实验介绍: 本实验通过修改Linux

Z165165165的博客 5162

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

将下载的内核源码压缩包移动到目录 /usr/src (/usr/src:内核源代码默认的放置目录。首先需要切换到 root 账户,或使用 sudo 命令),解压并且换到内核源代码目录下。编译完成后显示:Kernel: arch/x86/boot/bzImage is ready (#4)括号里的 #4意思是这个内核的第4次构建。上面的工具编译 4.x 的内核足够了,但是 5.13 之后的还需要一些别的工具。,修改 arch/x86/include/asm/syscalls.h。3. 在内核源代码中。

IFONLY000的博客 2097

编译linux内核并为其添加系统调用

实验目的:编译Linux内核文件,并在其添加系统调用 实验平台:Ubantu 18.04(VMware平台下 X86_64) 内核文件kernel 4.20.12 (原内核4.15.x) 注意:尽量多分点空间(40G以上较好),注意拍好快照,方便还原虚拟机 1.安装几个将要用到的关键的包 sudo apt-get install libncurses5-dev libssl-dev su...

zjc的博客 1444

Linux编译内核添加系统调用

Linux添加系统调用 ----------- - 准备 -- 下载Ubuntu系统安装包和Linux内核 Ubuntu下载地址:https://www.ubuntu.com/download (百度网盘:https://pan.baidu.com/s/1Q3YoFm7FV-rLiv0UKw_vgw 密码:4pho) Linux内核下载地址:https://www.kernel.org/ (百度网盘:链接:https://pan.baidu.com/s/14-mkqxPB_YqP75ztOBxop

我的CSDN 1万+

Linux实验 | Ubuntu20.04编译内核添加一个系统调用

Ubuntu 20.04 LTS VMware Workstation Pro 16 Linux

Hello 6656

LinuxLinux添加系统调用以及内核编译过程

在想要替换原有系统内核或者需要在原来的系统中添加一些系统调用的时候就会涉及到Linux内核编译。但是内核编译虽然步骤简单,但是需要注意的东西还是太多了。首先一点就是由于Linux的开源性导致的版本问题,并不是所有的内核都是可以编译并安装到当前系统的。其次编译过程中所需要做的一些个性化选择,当然这需要对内核了解的比较透彻,对系统各个模块也比较熟悉的时候可以定制化编译自己的内核。最后就是一些细节,需要

流动的城市的博客 1382

实验一:Linux内核编译添加系统调用

实验一:Linux内核编译添加系统调用 一、实验目的 理解Linux系统处理系统调用的流程 增加一个系统调用 二、实验内容 nice,可以理解为谦让度,CPU在选择进程时根据优先级prio选择,当nice值越高,可理解为这个进程越是谦让,即优先级越低 添加一个系统调用,实现对指定进程的nice值的修改或读取功能,并返回系最新的nice值,即优先级prio。 建议调用原型为: ​ In...

weixin_43279443的博客 3195

Linux 系统调用(二)——使用内核模块添加系统调用(无需编译内核

本文将介绍Linux使用内核模块添加系统调用的方法(无需编译内核),思路就是修改映射在内存中的系统调用表,把一个空闲的系统调用表项指向自己写的模块中的函数,如果是已使用的表项,甚至可以实现系统调用劫持。 1、查看预留系统调用号 不同内核版本,文件位置有所不同,我们可以直接查找unistd_64.h文件,命令如下: sudo find / -name unistd_64.h sudo cat /...

金荣的个人技术博客 7818
下一篇: Linux进程管理
fjskldjfica
博客等级 码龄9年 18粉丝 2原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值