Linux 将资源从initramfs优雅地移交给用户空间

Linux 将资源从initramfs优雅地移交给用户空间,linux,resource-management,Linux,Resource Management,有些硬件设备需要用户空间支持,比如运行和处理交互部分的守护进程,这些部分对于内核空间来说不太复杂或与策略相关 一旦您到达用户空间,运行这样的守护进程就很容易了——您可以作为热插拔事件的结果运行它们,并且不用太担心 一旦出现initramfs,一切都会突然崩溃:如果守护进程是从initramfs运行的,那么它需要在执行切换到常规rootfs时保持运行,这特别困难,因为initramfs在切换到root时被释放,或者将资源和状态分发到另一个自身副本,从rootfs运行。这两种解决方案似乎都不雅观、不

有些硬件设备需要用户空间支持,比如运行和处理交互部分的守护进程,这些部分对于内核空间来说不太复杂或与策略相关

一旦您到达用户空间,运行这样的守护进程就很容易了——您可以作为热插拔事件的结果运行它们,并且不用太担心

一旦出现initramfs,一切都会突然崩溃:如果守护进程是从initramfs运行的,那么它需要在执行切换到常规rootfs时保持运行,这特别困难,因为initramfs在切换到root时被释放,或者将资源和状态分发到另一个自身副本,从rootfs运行。这两种解决方案似乎都不雅观、不成熟


是否有明显的方法来管理我忽略的这些设备及其支持的守护进程?

您需要这个守护进程来装载真正的根设备吗?我想答案是肯定的,否则解决办法就是等待你真正的根

您的设备非常复杂,需要一个守护进程才能正常工作,您是否可以在内核中完成部分工作,并通过sysfs属性处理策略? 我没有看到一个安装真正的根设备需要守护进程才能工作的硬件实例。设备发现适用,但设备实际工作不需要守护进程。我们欢迎举个例子

另外,您真的需要切换根目录吗?您可以保留initramfs,并在/usr/下挂载任何需要的功能齐全的系统,这就是我对一些嵌入式系统所做的

更新: mdev是udev的嵌入式替代品,udev以两种模式运行:在扫描系统上添加设备,另一种运行热插拔事件。所以我想您不需要存储热插拔事件,因为所有信息在sysfs中仍然可用。因此,解决方案类似于:

从initramfs运行udev 挂载实根和开关根 扫描系统udev在启动时会这样做吗? 正常操作,即等待热插拔事件
你有具体的案例吗?其他发行版是如何处理的


看看Fedora是如何实现udev的,它从initramfs启动它,让它完成自己的工作,这样就可以安装真正的根fs,然后在切换之前再次关闭它。

只是安装一个有趣的想法,尽管它是带有package manager的半嵌入式设备,因此,我想通过ipkg保持uclibc和busybox的可升级性,如果它们保持在initramfs上,这是一种硬盘。我需要一个守护进程来驱动图形帧缓冲区,它需要尽快显示初始屏幕,并且延迟几秒钟以上,这不是营销POV的选项。在这种特殊情况下,启动守护进程很容易,然后关闭它并在真正的rootfs上重新启动,几乎没有共享的信息,但我对如何在一般情况下处理它感兴趣。例如,如何处理热插拔事件,以便initramfs可以等待存储出现,rootfs可以接收它感兴趣的所有事件,包括在initramfs运行期间发生的事件。我的具体案例是驱动图形帧缓冲区所需的小守护进程非常特定的屏幕-几个eInk控制器之一。关于udev-很有趣。我想知道他们如何确保两个udev都获得所有必要的事件,也就是说,如果这个事件被传递到initramfs udev,那么用户空间事件如何获得像MMC卡这样的事件。