Linux添加系统调用
Linux添加系统调用
1 概述
通常添加系统调用有两种方案:
* 重新编译内核
* 添加内核模块
此处我们采用重新编译内核的方式增加系统调用。
实验环境:X86_64 GNU/Linux 4.15.0 Ubuntu18.04
2操作步骤
下载Linux内核源码(4.19.1)并解压
下载linux内核4.19.1
官网链接:
官网下载经常速度太慢,无法下载,提供另一个链接:
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/
将其拷贝到/usr/src目录下
cp linux-4.19.1.tar.xz /usr/src/
解压缩并链接
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 //定义系统调用函数
设置系统调用号
vim arch/x86/entry/syscalls/syscall_64.tbl

头文件中添加声明
vim include/linux/syscalls.h

定义系统调用函数
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添加系统调用的更多相关文章
- Linux添加系统调用的两种方法
前言 系统调用的基本原理 系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态.在内核中通过软中断0X80, ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- 在Linux内核中添加系统调用,并编译内核
1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...
- Linux3.18.6内核添加系统调用(32位系统)
1.将已经下载好的内核解压,我的目录是 /home/shangsongchao/LinuxKernel/testlinux-3.18.6/linux-3.18.6 2.添加系统调用表: 在/home/ ...
- NeuSoft(2)添加系统调用
1.下载内核 apt-get install linux-source 在/usr/src下 2.解压内核 cd /usr/src tar -jxvf linux-source-3.2.0.tar.b ...
- 【原创】Linux 增加系统调用
Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数 首先将内核文件移至/usr/src/下并解 ...
- Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- Linux 增加系统调用 (转)
Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数 首先将内核文件移至/usr/src/下并解压. ...
- Linux添加主机路由
Linux添加主机路由:参考:http://zhidao.baidu.com/link?url=50qQ232ZiJqq1iftHvBdPzZh-JlQGi1DZ8wvF-j9dvQYsKiNgc-6 ...
随机推荐
- WCNSS_qcom_cfg.ini WIFI配置文件参数详细解析
STA相关的一般配置 参数 含义 最小值 最大值 默认值 gNeighborLookupThreshold 1 触发roam scan发生的条件在WCNSS_qcom_cfg.ini文件中gNeigh ...
- OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇
少废话,先上效果图 屏幕显示效果 全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...
- 使用Azure Runbook 发送消息到Azure Storage Queue
客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...
- spring data JPA 使用EntityentiListeners实现数据审计功能设计
当系统中有审计需求时,特别是需要对某些数据进行动态监控时,我们可以使用EntityentiListeners来实现,当然这是基于使用JPA而不是mybatis的情况下. 当前我们的需求场景: 1.需要 ...
- H3C、Huawei、Cisco网络设备AAA TACACS认证配置
TACACS技术白皮书 摘要:TACACS是实现AAA功能的一种安全协议,主要是通过TACACS客户端与TACACS服务器通信来实现多种用户的AAA功能. HWTACACS采用TCP协议承载报文,TC ...
- 浅析Linux进程空间布局
一.进程空间分布概述 对于一个进程,其空间分布如下图所示: 1.参数说明 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初 ...
- vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)
vfd-cloud 一个基于SpringBoot的云存储网盘项目,适合练手学习SpringBoot,用到的技术栈列到了下面.支持用户的注册登陆及修改密码,利用邮箱进行验证.支持 ...
- Linux kernel 同步机制
Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...
- 我们都可以把它放 Sidecar 容器中,这样微服务具备了 Super power,一种超能力
云原生时代,微服务如何演进? 原创 李响 阿里技术 2020-08-28 https://mp.weixin.qq.com/s/KQG2U8_aotDL4YFB8ee6Zw 一 微服务架构与云原 ...
- smtplib.py
def _print_debug(self, *args): if self.debuglevel > 1: print(datetime.datetime.now().time(), *arg ...