我按照本指南在 Linux 内核中添加我自己的自定义系统调用“将 Hello World 系统调用添加到 Linux 内核”。
在步骤 5 中,它要求通过进入来修改系统调用表
/usr/src/linux-headers-xxx-xx/arch/x86/entry/syscalls/
我查看了我的系统,操作系统版本为 Ubuntu 20.04.1,然后内核版本为 5.4.0-42,但特定目录只有三个文件
Makefile
syscallhdr.sh
syscalltbl.sh
我在网上搜索发现,较新版本的Linux使用这个bash脚本syscalltbl.sh
来生成包含所有系统调用号的所需文件。所以想运行这个文件,但由于权限问题而无法运行(我是 Linux 新手,所以没有发现太多接触东西是个好主意)。
然后我搜索了另一个指南,因为我上面提到的指南已有大约 2 年的历史,所以发现这个视频教程是 4 个月前创建的,“将您自己的系统调用添加到 Linux 内核”。
在此,这个人使用了已经存在的syscall_64.tbl
文件(该.sh
文件太存在了),所以我认为这可能是我的机器的一些问题,因为“官方 GitHub 存储库" 还包含该.tbl
文件以及 bash 脚本。
我将内核升级到最新版本 5.9.0-050900-generic,但目录仍然存在
/usr/src/linux-headers-5.9.0-050900/arch/x86/entry/syscalls
只有带有 Makefile 的 bash 文件。
syscall_64.tbl
那么我到底在系统中哪里可以找到呢?
我想到的唯一一件事是使用上面提供的文件syscall_64.tbl
在上述目录中创建自己syscall_64.tbl
GitHub。但我认为这不是一个好主意,可能存在与之相关的风险,我对此一无所知。
答案1
该文件位于 Linux 内核的源代码中。您可以从以下位置获取最新版本的 tarball内核.org。
如果您想尝试修改 Linux 内核,我会通过构建一个新内核(与主系统分开)并在 QEMU 这样的虚拟机中运行它来实现。您可以在互联网上找到各种指南,例如“在 Qemu 中构建并运行最小的 Linux / Busybox 系统”向您展示如何启动并运行一个小型开发环境。