8

如果我想在 Linux 内核空间中执行用户程序(不是内核模块),我有哪些选择?

我看过 KML(内核模式 linux),但那是特定于 IA-32 架构的。我想要一个跨平台的解决方案,可以在嵌入式 linux 系统上工作。

4

7 回答 7

6

用户程序不在内核空间中执行——这就是使它们成为用户程序的原因。

如果您想在内核空间中执行代码,您有两个选择:将其构建到内核中,或者使用内核模块加载它。

于 2010-07-20T13:59:08.543 回答
5

您在另一个问题中写道,您是内核编程的新手。使用 KML 是非常非常规的,并且比以标准方式做事要复杂得多。这将使您的学习变得更加困难。我建议您最好的选择是重新评估为什么要在内核空间中运行用户空间应用程序并找到不这样做的方法。

做这样的事情可能有充分的理由,但我不清楚这个理由可能是什么。对于内核开发,您应该了解的一件事是,仅仅因为某事是可能的,就不一定应该做某事。

如果你真的想要一个跨平台的解决方案,你必须自己写。KML 支持的唯一架构是 IA32 和 AMD64。

于 2010-07-20T18:22:46.980 回答
5

call_usrmodehelper

于 2010-08-09T06:29:49.777 回答
3

根据定义,内核编程几乎是特定于平台的,因为不同平台的内核都是不同的。

于 2010-07-20T13:00:48.987 回答
3

看看FemtoLinux。基本上,它是用于嵌入式系统和嵌入式处理器(如 ARM 和 MIPS)的 KML

于 2010-07-29T18:25:54.373 回答
0

如果您想从内核空间启动用户程序,请查看 run_init_process()。这是内核运行 init 程序的方式。

于 2018-02-05T11:26:58.810 回答
0

您可以像引导加载程序执行操作系统一样执行它(请记住,操作系统只是在内核之上执行的一个或多个程序)。按照标准操作,引导加载程序将执行与选择的参数一起转移到内核程序,就像 CLI 程序一样,然后加载/init可执行文件或rdinit参数指定的任何内容作为操作系统的主应用程序;实际上,这可以是任何程序,前提是该应用程序所需的所有并发进程(也称为“服务”)都在运行,正如原始/init程序是同时启动这些所需进程的 shell 脚本这一事实所证明的那样。

也可以看看:

仅供参考:我很清楚这个问题已有十多年的历史,因此要么回答要么放弃,尽管当时甚至可以使用这个解决方案,所以“这是为了后代......”

于 2021-12-01T08:05:09.630 回答