Linux添加系统调用

1 概述

通常添加系统调用有两种方案:

* 重新编译内核
* 添加内核模块

此处我们采用重新编译内核的方式增加系统调用。

实验环境:X86_64 GNU/Linux 4.15.0 Ubuntu18.04

2操作步骤

  • 下载Linux内核源码(4.19.1)并解压

    1. 下载linux内核4.19.1

      官网链接:

      https://www.kernel.org/

      官网下载经常速度太慢,无法下载,提供另一个链接:

      http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

    2. 将其拷贝到/usr/src目录下

      cp linux-4.19.1.tar.xz /usr/src/
    3. 解压缩并链接

      xz -cd linux-4.19.1.tar.xz| tar xvf -

      解压缩后出现linux-4.19.1目录,此时我们创建一个名为linux的目录,将linux软连接到linux-4.19.1,命令如下:

      ln -s linux-4.19.1 linux

  • 添加系统调用

    共x个文件,此时目录为/usr/src/linux

    arch/x86/entry/syscalls/syscall_64.tbl      //设置系统调用号,如果是32位就用syscall_32.tbl
    
    include/linux/syscalls.h       //系统调用的头文件
    
    kernel/sys.c                    //定义系统调用函数
    1. 设置系统调用号

      vim arch/x86/entry/syscalls/syscall_64.tbl

    2. 头文件中添加声明

      vim include/linux/syscalls.h

    3. 定义系统调用函数

      vim kernel/sys.c

      在头文件中添加linkage.h

      添加函数定义,此处函数为输出“operating system work1 succeed!”

  • 重新编译内核,此处可以参考文档Linux内核编译

  • 重启后编写测试文件

    hello.c 文件如下

    #define _GNU_SOURCE
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/syscall.h>
    #include<sys/types.h>
    #include<signal.h> int main(){
    syscall(335);
    return 0;
    }

    编译该文件:

    gcc hello.c -o hello

    运行该文件

    ./hello
  • 用dmesg查看是否成功

    dmesg

    输出"operating system work1 succed!"表示成功!

3 参考博客

https://www.cnblogs.com/lqerio/p/10461937.html

(当然还参考了许多其他的博客,可都没什么用!)

Linux添加系统调用的更多相关文章

  1. Linux添加系统调用的两种方法

    前言 系统调用的基本原理 系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态.在内核中通过软中断0X80, ...

  2. Lab1:Linux内核编译及添加系统调用(详细版)

    实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...

  3. 在Linux内核中添加系统调用,并编译内核

    1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...

  4. Linux3.18.6内核添加系统调用(32位系统)

    1.将已经下载好的内核解压,我的目录是 /home/shangsongchao/LinuxKernel/testlinux-3.18.6/linux-3.18.6 2.添加系统调用表: 在/home/ ...

  5. NeuSoft(2)添加系统调用

    1.下载内核 apt-get install linux-source 在/usr/src下 2.解压内核 cd /usr/src tar -jxvf linux-source-3.2.0.tar.b ...

  6. 【原创】Linux 增加系统调用

    Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数   首先将内核文件移至/usr/src/下并解 ...

  7. Linux内核-系统调用

    Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...

  8. Linux 增加系统调用 (转)

    Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数 首先将内核文件移至/usr/src/下并解压. ...

  9. Linux添加主机路由

    Linux添加主机路由:参考:http://zhidao.baidu.com/link?url=50qQ232ZiJqq1iftHvBdPzZh-JlQGi1DZ8wvF-j9dvQYsKiNgc-6 ...

随机推荐

  1. disfunc绕过

    绕过DisFunc的常见小技巧 解析webshell命令不能执行时的三大情况 一是 php.ini 中用 disable_functions 指示器禁用了 system().exec() 等等这类命令 ...

  2. C# url的编码解码,xml和json的序列化和反序列化

    参考中国慕课网dot net web编程应用程序实践 using System; using System.Collections.Generic; using System.IO; using Sy ...

  3. 力软最新版本与.netCore版本

    功能强大,直接上图: 加微信或QQ交流开发技术:25489181 netcore版本 版本优势: .NET Core是适用于 Windows.Linux 和 macOS 的免费.开源托管的计算机软件框 ...

  4. LeetCode-P53题解【动态规划】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: https://leetcode.com/problems/maximum-subarray/ ...

  5. 1V转5V芯片,三个元件即可组成完整的稳压方案

    1V低电压要转成5V的电压,需要1V转5V的芯片,由于1V输入,所以不需要指望能输出多大的电流,压差和1V的供电电压意味着供电电流也是无法做大的了.一般1V转5V的输出电流在0MA-100mA,一般6 ...

  6. 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...

  7. https://www.cnblogs.com/wclwcw/p/7515515.html

    https://www.cnblogs.com/wclwcw/p/7515515.html

  8. (转载)微软数据挖掘算法:Microsoft 决策树分析算法(1)

    微软数据挖掘算法:Microsoft 目录篇 介绍: Microsoft 决策树算法是分类和回归算法,用于对离散和连续属性进行预测性建模. 对于离散属性,该算法根据数据集中输入列之间的关系进行预测. ...

  9. 系列trick - 随机

    系列trick - 随机 不断更新中,欢迎来提供idea 随机的字符串 出现次数 \(\ge 2\) 的子串期望长度是 \(\log n\) 两个随机串的期望LCP,LCSuf,LCSub长度是 \( ...

  10. HBase与Zookeeper的关系

    HBase与Zookeeper的关系 一.HBase与Zookeeper的关系 Zookeeper Client Master RegionServer 一.HBase与Zookeeper的关系 Cl ...