【问题标题】:Building an OS out of an application [closed]从应用程序构建操作系统 [关闭]
【发布时间】:2014-02-05 18:20:57
【问题描述】:

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

我最近开始对构建自己的 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 代表的赏金,我会的。

【问题讨论】:

  • 这听起来更像是在谈论构建一个在操作系统上运行的应用程序,而不是构建一个实际的操作系统。
  • @itsme86:我认为他只是想构建一个操作系统而不是处理驱动程序,并且没有意识到这就是他的要求。
  • 我不明白你到底想做什么,但我不确定你是否也这样做。
  • 似乎你真的不知道你在问什么......从一些“从头开始的Linux”指南开始,然后通过它来获得你自己的可引导Linux操作系统。然后想想你是否真的想继续下去,朝什么方向发展。
  • @itsme86 现在我回过头来看这个问题,我确实有点过火了,基本上我问的是一个自己回答的问题。我现在知道这是不可能的。我想问的是——我可以构建一个唯一目的是运行一个应用程序的操作系统吗。——我知道我在说什么,但我现在可以看到我用一种非常复杂的方式来表达它。

标签: c# java linux linux-distro


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    简短的回答是将其添加到您的内核命令行中:

    init=/path/to/my/application
    

    通常,Linux 内核将启动的第一个进程是init processinit 负责为需要在启动时启动的所有其他内容运行启动脚本 - 例如。内核模块、守护进程、控制台登录/x 桌面。

    您可以告诉内核使用您喜欢的任何用户空间二进制文件,而不是如上所述的默认值/sbin/init,尽管您可能仍希望某些启动脚本运行。

    尽管更有可能,您会希望编辑启动脚本以仅运行一个应用程序(您的应用程序是文本还是基于 X 的?)

    或者,您可以破解内核以在内核空间中运行您的应用程序,甚至可能永远不会启动任何进程。但这将是调试/维护的噩梦。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 2016-02-20
      • 2018-11-19
      • 1970-01-01
      • 2011-10-31
      • 2016-04-13
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多