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. Ribbon负载均衡服务调用

    1.在听周阳老师讲解时,使用Ribbon核心组件IRule时是这样用的: ribbon版本 : 自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,项目结构如下 MySelfR ...

  2. Python-Flask搭建Web项目

    最近因项目需要,学习了用flask搭建web项目,以下是自己的使用感悟 Flask框架结构 static:存储一些静态资源 templates:存储对应的view app.py:涉及到页面的跳转,以及 ...

  3. FLask之视图

    视图 1 FBV def index(): return render_template('index.html') app.add_url_rule('/index', 'index', index ...

  4. Py变量,递归,作用域,匿名函数

    局部变量与全局变量 全局变量:全局生效的变量,在顶头的,无缩进的定义的变量. 局部变量:函数内生效的变量,在函数内定义的变量. name='1fh' def changename(): name='s ...

  5. 初次使用Open Live Writer

    关于下载和配置 建议大家不要在官网下载,会出不来.华军软件园(或其他下载站)也提供Open Live Writer最新版的下载. 创建账户时千万不要写错地址,错一个就失败. 体验 体验还是很好的,美中 ...

  6. 十九、更改LCD显示屏

    一.裸机修改 之前测试用的屏幕是480*272的分辨率,现在要换成800*480的屏,因此要对软件代码进行修改. 对于裸机驱动而言,主要有两个点需要注意,一个是屏幕分辨率变了,因此初始化的时候与屏幕分 ...

  7. 邮箱发送API .Net

    调用QQ邮箱发送邮件接口,完成QQ邮箱发送邮件.步骤如下: 1.开启POP3/SMTP服务 2.点过之后会让你验证一下密保或者发送一条短信 3.验证过后会弹出一个开启POP3/SMTP服务的授权码,这 ...

  8. 为什么 TCP 协议有粘包问题

    为什么 TCP 协议有粘包问题 这部分转载自draveness博客. TCP/IP 协议簇建立了互联网中通信协议的概念模型,该协议簇中的两个主要协议就是 TCP 和 IP 协议.TCP/ IP 协议簇 ...

  9. 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。

    package org.apache.hadoop.examples; import java.util.HashMap; import java.io.IOException; import jav ...

  10. VMwareWorkstation 平台 Ubuntu14 下安装配置 伪分布式 hadoop

    VMwareWorkstation平台Ubuntu14下安装配置伪分布式hadoop 安装VmwareStation 内含注册机. 链接:https://pan.baidu.com/s/1j-vKgD ...