linux4.0新增32位ARM的系统调用

news/2025/1/14 21:58:35/

修改内核源码 

Linux系统为每一个系统调用赋予一个系统调用号。当应用程序执行一个系统调用时,应用程序就可以知道执行和调用到哪个系统调用了,从而不会造成混乱。系统调用号一旦分配之后就不会有任何变更,否则已经编译好的应用程序就不能运行了。对于ARM32系统来说,其系统调用号定义在arch/arm/include/uapi/asm/unistd.h头文件中。

添加的内容:arch\arm\include\uapi\asm\unistd.h文件

#define __NR_lkmao_hello		(__NR_SYSCALL_BASE+388)

 修改文件:arch\arm\include\asm\unistd.h

vi arch/arm/include/asm/unistd.h

/** This may need to be greater than __NR_last_syscall+1 in order to* account for the padding in the syscall table*/
//#define __NR_syscalls  (388)//原来的值
#define __NR_syscalls  (392)//修改后的值

修改文件kernel/sys.c,添加内容

 vi kernel/sys.c 

SYSCALL_DEFINE0(lkmao_hello)
{printk("%s:%s:%d -- sys_lkmao_hello is called\n",__FILE__,__func__,__LINE__);return 0;
}

修改文件include/linux/syscalls.h,添加如下内容:

asmlinkage long sys_hello_lkmao(void);

修改系统调用表,修改文件arch/arm/kernel/calls.S,添加CALL(sys_lkmao_hello)

修改的文件统计

1 arch/arm/include/uapi/asm/unistd.h

2 arch/arm/include/asm/unistd.h

3 kernel/sys.c

4 include/linux/syscalls.h

5 arch/arm/kernel/calls.S

 应用测试代码

#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>   /* For SYS_xxx definitions */#define DEBUG_INFO(format, ...) printf("%s:%d -- "format"\n",\
__func__,__LINE__,##__VA_ARGS__)#define __NR_lkmao_hello 388int main(int argc, char**argv){int ret = syscall(__NR_lkmao_hello);DEBUG_INFO("ret = %d\n", ret);return 0;
}

编译代码测试

在系统调用中打印PID和UID

在kernel/sys.c文件中,修改SYSCALL_DEFINE0(lkmao_hello)的定义,如下所示,修改后重新编译内核。


SYSCALL_DEFINE0(lkmao_hello)
{const struct cred *cred = current_cred();printk("%s:%s:%d -- sys_lkmao_hello is called\n",__FILE__,__func__,__LINE__);printk("%s:%s:%d -- pid = %d,%d,uid = %d\n",task_pid_nr(current),task_pid_nr_ns(current),cred->uid;,__FILE__,__func__,__LINE__);return 0;
}

 测试结果

 

小结


http://www.ppmy.cn/news/1030574.html

相关文章

MySQL中的用户管理

系列文章目录 MySQL常见的几种约束 MySQL中的函数 MySQL中的事务 MySQL中的视图 MySQL中的索引 文章目录 系列文章目录前言一、用户管理1、用户管理入门2、用户管理操作及示例 二、权限管理1.权限管理语法2.权限操作示例 三、角色管理1、角色管理入门2、角色操作示例 总结…

通过将信号频谱与噪声频谱进行比较,自动检测适当的带通滤波器转折频率研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

怎么把太大的视频压缩变小?这样压缩很轻松

很多网站或者平台对于上传的视频都是有大小限制的&#xff0c;当视频文件体积过大时&#xff0c;我们就需要进行压缩操作&#xff0c;下面就给大家分享几个实用的视频压缩方法&#xff0c;不仅压缩率高&#xff0c;还能保证视频清晰度哦~ 一、HandBrake 这是一款免费的视频处理…

对p-n结/AlGaN/GaN HEMTs中n-GaN掺杂浓度对栅极可靠性的影响

目录 第35届功率半导体器件与集成电路国际研讨会论文集2023年5月28日至6月1日&#xff0c;中国香港南方科技大学电气电子工程系&#xff0c;深圳标题&#xff1a;Impacts of n-GaN Doping Concentration on Gate Reliability of p-n Junction/AlGaN/GaN HEMTs摘要信息解释研究了…

小红书Java后端2023-8-6笔试

小红书推荐系统 时间限制&#xff1a;3000MS&#xff1b;内存限制&#xff1a;589824KB 题目描述 小红书有一个推荐系统&#xff0c;可以根据用户搜索的关键词推荐用户希望获取的内容。现在给定小孩的搜索记录&#xff08;记录是分词后的结果&#xff09;&#xff0c;我们认…

gitui 解决 git error:Bad credentials.

问题描述 cat .git/config """ [remote "origin"]url gitgitcode.net:xxx.gitfetch refs/heads/*:refs/remotes/origin/* """ls -lh ~/.ssh/ """ -rw------- 1 z z 2.6K 8月 12 15:04 id_rsa -rw-r--r-- 1 z z 56…

【先进PID控制算法(ADRC,TD,ESO)加入永磁同步电机发电控制仿真模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

云计算——存储虚拟化功能

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前期回顾 前言 一.存储虚拟化功能 1.精简磁盘和空间回收 2.快照 &#xff08;1&a…