为什么在实现新的系统调用时为什么必须使用Internet上的另一个内核源?

问题描述 投票:0回答:1

我正在尝试向我的操作系统添加系统调用,当我阅读在线教程时,它总是从从Internet下载和提取内核源代码开始。例如:

[$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.56.tar.xz下载.tar.xz文件。

$ tar -xvJf linux-4.4.56.tar.xz提取内核源代码。

我的问题是:为什么我们必须使用Internet上的另一个内核源?我们可以将新的系统调用添加到正在运行的OS中并直接进行编译吗?

linux linux-kernel system-calls
1个回答
0
投票

我正在尝试向我的操作系统添加系统调用,当我阅读在线教程时,它总是从从Internet下载和提取内核源代码开始。

嗯,是的。您需要修改内核源代码以实现新的系统调用。

为什么我们必须使用Internet上的另一个内核源?

这不是“另一个内核源”,而只是“一个内核源”。通常,您目前尚没有当前安装的内核的源代码。

通常,大多数Linux发行版为内核本身提供一个binary软件包(自动安装),仅为其headers提供一个软件包(可以用于编译新模块),并且可能source软件包与二进制软件包有关。

例如,在Ubuntu或Debian(假设您拥有enabled source packages)上,您应该能够获取当前的内核源:

apt-get source linux-image-$(uname -r)

由于教程作者可能无法知道您正在使用哪个内核版本或哪个Linux发行版,或者即使您的发行版完全提供了内核源程序包,他们也只是告诉您从该Linux内核网站下载内核源程序包。这还可以确保您使用与教程中显示的版本完全相同的版本,以避免与较新/较旧的内核版本存在任何兼容性问题。

此外,您通常不想使用正在使用的计算机的内核,因为如果发生不良情况,最终可能会损坏系统。您通常希望使用虚拟机进行实验。

我们能否将新的系统调用添加到正在运行的OS并直接进行编译?

并非如此,不可能将新的系统调用热修补到正在运行的内核中。由于需要修改源代码,因此首先需要具有源代码。其次,您需要进行所需的任何修改,然后编译新内核。第三,您需要正确安装新内核并重新启动计算机。

© www.soinside.com 2019 - 2024. All rights reserved.