跳至正文

Linux内核修改——添加新的系统调用

当需要创建一个强大且可靠的基于Linux的系统时(无论是维护系统进程还是虚拟主机等),就需要配置系统内核以使整个系统正常工作更高效、更可靠。

此外, Linux 代码的可用性简化了配置 Linux 内核的过程,因此任何人都可以下载 Linux 内核的源代码并使用。

在这篇文章中,我们将帮助您了解配置 Linux 内核的一些一般方面以及如何添加新的系统调用。让我们来看看。

供 Web 开发人员使用的 29 个基本 Linux 命令

供 Web 开发人员使用的 29 个基本 Linux 命令


Linux 发行版支持各种 GUI(图形用户界面),但旧的命令行界面(bash)仍然被证明是……
阅读更多

可配置的内核参数

Linux 系统内核的开发方式使得可以很容易地根据所需的操作条件和硬件环境对其进行定制(与 UNIX 和 Linux 系统中的其他所有内容非常相似)。

此外,Linux 的灵活性允许您配置其内核,以便系统管理员可以随时更改参数。

为了完成这个任务,有一个特殊的接口来支持内核和用户级程序之间的数据通道。正是通过这些通道发送指令来设置内核参数的值。

1.安装必要的包

首先,您需要确保您的系统具有构建内核所需的所有软件包。如果没有,那么您需要安装缺少的。

为此,请运行命令:

1
sudo apt install libncurses-dev libncurses dwarves build-essential gcc bc bison flex libssl-dev libelf-dev
2. 获取内核源码

最好的来源来自您的发行套件的站点(如果可用)或内核的官方站点:kernel.org因此,选择一个版本,访问 kernel.org,然后下载所需的 tarball 源。

从官网获取的压缩包必须解压。为此,请转到下载文件夹并运行解包命令

1
cd ~ / Downloads(the folder you downloaded the archive to) / tar xvf linux *

然后您需要转到包含解压的内核源代码的文件夹对于版本 5.14.14,命令将如下所示:

1
cd linux-5.13.7/
3、当前核心配置

采用当前的内核配置并将其用作构建新内核的基础。您可以使用以下命令检索此类配置:

1
zcat /proc/config.gz > .config

内核配置位于该文件夹中名为config/boot和内核版本的文件中。要将配置文件复制到源文件夹,请运行以下命令:

1
cp /boot/config-(version)-generic .config
4、自动配置

必须将生成的配置更新为当前内核的状态。较新版本的内核通常会添加您的发行版内核配置中尚不可用的新选项。

localmodulesconfig命令可用于优化此过程,因为这是为您的硬件构建 Linux 内核的最简单方法。它验证当前加载的内核模块,并仅启用这些模块,同时禁用所有其他模块。

要运行该localmodulesconfig脚本,请使用以下命令:

1
make localmodulesconfig

创建系统调用

因此,打开命令终端,然后使用nano 编辑器创建一个新的 C 类型文件,如下所示:

1
nano exp.c

现在在编辑器中编写以下所有 C 代码:

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
printf("PID of somefile.r = %d\n", getpid());
Char *args[] = {"First", "Second", "Third", Null};
execv("./justfile", args);
return 0;
}

完成此操作后,您的主要功能将被创建。这里,Printf显示了文件somefile.r的字符串数据和进程的 PID 。

然后我们有一个args[]字符类型数组,其中包含一些值。exec 系统调用用于将文件名和上面的单行数组作为参数。使用 nano 编辑器创建另一个 c 文件justfile.r 。

将代码输入其中:

1
2
3
4
5
6
7
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
printf("Pid of justfile.r = %d\n", getpid());
return 0;
}

现在让我们使用 GNU 编译器集合来编译这两个文件:

1
2
gcc –o somefile somefile.r
gcc –o justfile justfile.r

当我们执行somefile.r文件时,它会输出somefile.r文件中的第一个打印语句以及justfile.r中的两个打印行,如下所示:

1
2
3
./somefile
PID of somefile.r = 2602
PID of justfile.r = 2602
标签: