assembly 有没有可能通过让Linux内核运行java代码来制作一个操作系统?[已关闭]

aurhwmvo  于 2022-11-13  发布在  Linux
关注(0)|答案(1)|浏览(153)

已关闭。此问题需要更多的focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

12天前关闭。
Improve this question
我一直都有这样的想法,让内核运行java代码,所以后端是用c和汇编语言做的,前端是用java做的?如果是这样的话,我在哪里可以找到Linux内核的源代码?

soat7uwm

soat7uwm1#

如果你想在内核中运行Java代码,那么你就不必像模块一样实现一个嵌入式JVM,或者通过让驱动程序依赖于JVM来从驱动程序中启动Java程序。这似乎不是一个好主意,因为它通常会导致一个依赖关系非常脆弱的系统,一个非常沉重的映像,以及内核空间中的混合责任。
你可能搞错了内核空间、init序列和用户空间。从你的描述“所以后端是用c和汇编语言做的,前端是用java做的?”看起来你更可能是想把一些java程序作为SysVInit / systemd服务来运行,这些服务为用户提供了一个操作系统的接口,而不是作为内核的一部分。
当这样做时,init管理器将级联运行发行版中的所有必要服务,在内核初始化自身、文件系统、虚拟内存......和硬件之后,为它们提供适当的资源和权限。
将Java程序作为systemd服务运行非常容易(也可以从SysVInit运行)。

[Unit]
Description=Hello Service -- A Service.
# Before and after directives go in this section. 
# Example for waiting for the network to start the service:
# After=network.target

[Service]
User=user
Group=group
ExecStart=/path/to/start.sh
ExecStop=/path/to/stop.sh
Type=forking

[Install]
WantedBy=default.target

您只需要根据软件的权限设置相应的用户和组,并从start.sh启动Java程序和从stop.sh停止Java程序,您可以在stop.sh中设置Java命令行、环境变量和检查。
请确保使用nohup启动Java程序,以避免干扰systemd及其日志:

#!/bin/bash
nohup java -cp /opt/hello:/opt/hello/* com.package.hello.Start > /tmp/hello.out 2>&1 &

您可能会想检查SysVInit,因为它通常比较轻,但我希望这个答案能给您一些启发。

相关问题