在我使用的某国产ARM64笔记本上(安装的统信UOS系统), Linux内核有2个系统调用表sys_call_tablecompat_sys_call_table

其中sys_call_table为原生64位程序使用, 而compat_sys_call_table是为了在ARM64中兼容32位ARM应用程序而实现的

今天我们简单研究下这个兼容的系统调用表compat_sys_call_table是如何定义和初始化的

compat_sys_call_table的定义在/arch/arm64/kernel/sys32.c中:

#undef __SYSCALL
#define __SYSCALL(nr, sym)  asmlinkage long __arm64_##sym(const struct pt_regs *);
#include <asm/unistd32.h>#undef __SYSCALL
#define __SYSCALL(nr, sym)  [nr] = __arm64_##sym,const syscall_fn_t compat_sys_call_table[__NR_compat_syscalls] = {[0 ... __NR_compat_syscalls - 1] = __arm64_sys_ni_syscall,
#include <asm/unistd32.h>
};

这里的关键是出现了2次的#include <asm/unistd32.h>, 其中的部分定义如下, 为了方便理解我删除了一些代码

...
#define __NR_write 4
__SYSCALL(__NR_write, sys_write)
#define __NR_open 5
__SYSCALL(__NR_open, compat_sys_open)
...
#define __NR_ftruncate64 194
__SYSCALL(__NR_ftruncate64, compat_sys_aarch32_ftruncate64)

可以看到这里就是简单调用了__SYSCALL宏, 所以:

  • 第1次#include <asm/unistd32.h>声明了所有系统调用的函数原型
  • 第2次#include <asm/unistd32.h>完成了对系统调用表compat_sys_call_table的初始化, 即把上面声明的函数赋值给系统调用表相应的项

值得注意的是这些系统调用的名字

  • 有些和传统的系统调用名字一样, 没有compat_的前缀, 说明这些系统调用和ARM64的一样, 可以直接使用ARM64实现好的
  • 有些有compat_前缀, 这说明这些系统调用需要额外实现, 并且其他已经实现好了, 我们直接使用即可, 例如上面的compat_sys_open已经在/fs/open.c中实现了
  • 有些有compat_sys_aarch32_前缀, 这些是需要我们自己实现的, 例如aarch32_ftruncate64/arch/arm64/kernel/sys32.c中实现

参考资料
https://elixir.bootlin.com/linux/v4.19.274/source/arch/arm64/kernel/sys32.c#L143
https://elixir.bootlin.com/linux/v4.19.274/source/arch/arm64/include/asm/unistd32.h#L21
https://elixir.bootlin.com/linux/v4.19.274/source/arch/arm64/include/asm/syscall_wrapper.h#L18
https://elixir.bootlin.com/linux/v4.19.274/source/fs/open.c#L1129

ARM64系统中兼容系统调用表compat_sys_call_table的定义和初始化相关推荐

  1. html表单居中_如何在IE低版本中兼容HTML5表单属性placeholder属性

    WEB开发数据提交是必不可少的,为了更友好的用户体验,通常需要给输入框一个默认的提示信息.HTML5技术提供了一个表单属性placeholder专门用于输入框默认提示,但是在IE低版本中根本不兼容. ...

  2. sap 新增科目表_SAP系统中四大科目表的总结

    操作科目表定义-OB13 2 国家科目表定义-OB13 3 集团科目表定义-OB13 4 合并科目表(ECCS)定义-CX10 4 分配操作科目表到公司代码-OB62 5 分配国家科目表到公司代码-O ...

  3. linux系统中db2创建表空间,为DB2数据库创建表空间

    数据库中的表空间(tablespace) 是一个逻辑层,一些数据库对象(比如表.视图和索引)驻留在这里.一个数据库可以有多个表空间.在首次创建数据库时,DB2 会自动地创建一组表空间. 在 Contr ...

  4. 粤嵌实验板 linux 环境,粤嵌linux基础入门学习 linux系统中添加系统调用

    linux系统中添加系统是怎样调用的?从linux基础入门学习出发,一起来看看: 1.每个体系下面均有对应的系统调用列表: arch/arm/kernel/calls.S 在最后添加一个新的系统调用标 ...

  5. input搜索框在ios系统中兼容问题

    input搜索与ios适配兼容问题 场景:h5页面在手机上嵌入时,会有搜索框并且改变键盘"搜索"字体的需求 问题1:ios下input中type="search" ...

  6. linux系统中查看gcc内置宏定义的命令方法

    GNU C预定义了一系列的宏,这些宏都是以双下划线开始的 查看内置宏的命令 gcc -dM -E - < /dev/null [qipa250@localhost ~]$ gcc -dM -E ...

  7. Oracle数据库中的dual表

    select user from dual; select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间 select S ...

  8. K8s(Kubernetes), docker中的registry是什么意思?和windows中的注册表registry有什么区别?

    相信很多初学者会对K8s(Kubernetes)中的registry这个概念感到很困惑,因为翻译成中文实在是不好翻译,直译"注册"就让人觉得非常费解.网上对于这方面的中文资料也很少 ...

  9. 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表

    文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...

最新文章

  1. mysql中的 explain 关键字学习笔记
  2. java通过ftp上传文件到服务器_java-通过FTP将文件传输到服务器,但结果以零...
  3. android studio安装教程博客园独王,Android Studio安装与配置
  4. vue2.0 $router和$route的区别
  5. zsh关于.zprofile .zlogin .zshrc .zshenv文件中环境变量的加载
  6. Elasticsearch--高级-映射mapping_添加行的字段映射---全文检索引擎ElasticSearch工作笔记018
  7. 20165305 第十周课下补做
  8. matlab 去掉矩阵中某些元素,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  9. 拳魂觉醒服务器维护怎么办,拳魂觉醒 哪些不为人知的的小秘密
  10. java JButton计算器布局
  11. Exp4 恶意代码分析 20154328 常城
  12. 没啥用的纯前端打造一个实时 markdown 编辑器
  13. 高考2021加3科目成绩查询,官方解读:2021新高考实施方案正式公布,首选科目按原始分计入总成绩!...
  14. UVa 1586 Molar mass
  15. 【U8+】U8+自动备份不成功BackupDB日志中显示“数据源.未找到”
  16. 周子明:大道无疆,“驰”之以恒,在数字化时代纵横驰骋
  17. git报错-The file will have its original
  18. CAP原则(CAP定理)
  19. 读书:SQL必知必会
  20. mysql主从 主机宕机_MySQL主从宕机的解决方法

热门文章

  1. [附源码]Python计算机毕业设计蛋糕店会员管理系统Django(程序+LW)
  2. 第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem H. 神殿-题解
  3. 2021年流动式起重机司机考试题及流动式起重机司机模拟考试
  4. 前十名现货黄金价格行情分析软件
  5. 惠租车俄罗斯海外租车攻略
  6. 在Word中输入乘号和除号的几种方法(转)
  7. Node对象与Element对象
  8. JPA中如何获取connaction
  9. 【soapUI】--- 破解和使用
  10. android 布局滚动条,Android 布局控件——滚动条视图,日期,时间