-1

编辑 - 对不起,我让这篇文章比它应该的更复杂。如果有类似问题的人需要帮助,我不会删除此帖子。

我最近开始对构建自己的 Linux 发行版(可能只是为家人和朋友)感兴趣。我对是否应该自定义现有发行版(例如 Arch Linux、Debian)或从头开始构建(LFS)进行了广泛的研究。我得出的结论是,从头开始构建最适合我的需求(我没有时间限制)。

我的主要问题是:

是否有可能构建一个作为完整操作系统运行的应用程序,并且只对 linux 发行版进行编程以在启动时运行它?

第二个主要问题:

这样做会限制安装程序吗?开发人员是否必须制作他们的软件的自定义版本才能在这个模拟操作系统上运行?

我在这看到的问题:

- 如果我使用像 c# 这样的语言,那行得通吗?还是需要Windows本地人?

- 如果我使用 java(可能不是),但如果我愿意,我是否必须将 JRE 与发行版打包?

- 如果我使用类似 java 的东西,我可以使用像 LWJGL 这样的库吗(对于像窗框这样的东西的 openGL)

- java 或 c# 是否使用特殊的文件系统方法?我是否需要让 Linux 基础构建文件系统以供 VM 语言使用?或者我可以在模拟操作系统本身中安排所有这些吗?

-VM 语言的性能问题?

- 打包 JRE 之类的东西是否存在任何法律问题,或者我是否找到了使用 Windows Natives 的方法?

补充说明:

-我不关心时间,即使只是文件系统需要我 3 年。

- 如果无法从头开始构建它,我是否可以自定义发行版以便像这样运行?

- 我知道我必须让 linux 处理硬件驱动程序之类的东西,因为与硬件通信不是我的事。这是否意味着我必须自定义 Arch Linux 之类的东西?

很抱歉,这里有这么多问题,如果我有足够的声望来增加 500 代表的赏金,我会的。

4

2 回答 2

2

操作系统确实是一项艰巨的任务。已经尝试构建一个系统来在 C# 中创建名为Cosmos的自定义操作系统,我已经考虑过好几次了。但在大多数情况下,可能必须专门为操作系统构建应用程序。既然你提醒了我,我可能真的会打扰。

显然,结果不会是 Linux,而是使用 Cosmos 构建的自定义操作系统。这可能是您可以使用 C# 管理的最接近的方法。

总而言之:如果您的目标是在最基本的机器上执行托管代码,那么 Cosmos 可能就是您想要的。你仍然会做几乎所有的事情,但你会与机器的实际内部有一些绝缘。

编辑:替代方案包括不使用 Visual Studio的Mosa和只能用于研究但由 Microsoft 直接生产的Singularity 。

于 2014-01-16T17:31:31.980 回答
1

The short answer is add this to your kernel command line:

init=/path/to/my/application

Typically the first process a Linux kernel will start is the init process. init takes care of running the startup scripts for everything else that needs to start at boot-time - e.g. kernel modules, daemons, console login/x desktop.

You can tell the kernel to use any userspace binary you like instead of the default of /sbin/init, as above, though you may still want some of the startup script to run.

Though more likely, you'll want to edit the startup scripts to just run one application (Is your application text or X-based?)

Alternatively you could hack the kernel to run your application in kernel space, and possibly never even start any processes. But that would be a nightmare to debug/maintain.

于 2014-01-16T17:29:58.280 回答