是否可以在加载我的程序而不是操作系统的系统上仅运行 Linux 内核?
我想使用带有 Linux 内核的 Raspberry Pi。我正在尝试在 Raspberry Pi 上创建服务器和客户端程序,为此我只需要一个可在网络驱动程序上运行的内核。
我希望树莓派在打开时只运行我的程序。我不想要操作系统的其余部分。
答案1
当Linux内核启动时,它运行该程序/sbin/init
。 (这是之后初始化程序或者初始化文件系统) 如果有的话,并且可以使用以下配置位置init
范围。这在里面程序有一个特殊的作用:它永远运行(有一个特殊的规则可以防止它被杀死,即使使用SIGKILL),它采用孤儿进程,当然它应该启动(和监视)其他程序。
您可以将自己的程序指定为 init。然后完全取决于你运行什么。
然而,如果这样做的话,你会损失很多。例如,如果没有物理访问,您将无法以任何方式重新配置您的设备(例如更改网络配置或修改引导加载程序设置),除非您提供程序来执行此操作。我建议您至少运行一组最少的工具:
- 忙碌盒,这是一套系统工具,包括 init 实现、shell 和其他命令行工具。无论如何,您可能至少需要一些 BusyBox 工具在启动时设置网络(
ifconfig
、route
、 ...)。 - IP表,基本的防火墙配置工具,BusyBox 中不包含该工具。
- 水滴熊,一个 SSH 服务器,它允许您远程登录您的设备。
- 可能其他小工具,特别是NTP客户端(设置时钟)和域名解析, DNS 缓存。
所有这些工具的占用空间都很小——它们可以轻松地容纳在大约 10MB 的 RAM 和 3MB 的压缩存储中,这对于 Raspberry Pi 来说可以忽略不计。在 RPi 上,将系统降低到低于普通嵌入式 Linux 的水平并没有任何好处。仅使用 Linux 内核来引导一个程序对于非常有限的设备很有用,但 RPi 至少比该值高两个数量级。
对您来说最简单的方法是使用众多方法之一嵌入式Linux发行版。或者,您可以使用类似的工具构建根构建自定义系统——这对于小型系统很有用,但对于树莓派来说有点大材小用。