【问题标题】:Graceful handing over resources from initramfs to userspace优雅地将资源从 initramfs 移交给用户空间
【发布时间】:2011-05-17 23:07:27
【问题描述】:

有些硬件设备需要用户空间支持,例如守护进程运行和处理不适合(过于复杂或与策略相关)内核空间的交互部分。

一旦您到达用户空间,运行此类守护程序就很容易——您可以在热插拔事件的情况下运行它们,不用担心太多。

一旦 initramfs 出现,一切都会突然崩溃:如果守护进程是从 initramfs 运行的,那么它需要在执行切换到常规 rootfs 时继续运行,这特别困难,因为 initramfs 在 switch_root 或手动期间被释放将资源和状态输出到自身的另一个副本,从 rootfs 运行。这两种解决方案看起来都不优雅且老套。

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

【问题讨论】:

    标签: linux resource-management


    【解决方案1】:

    您有具体案例吗?其他发行版是如何处理这个问题的?

    看看 Fedora 是如何进行 udev 的,它从 initramfs 启动它,让它做自己的事情以便可以挂载真正的 root fs,然后在切换之前再次关闭它。

    【讨论】:

    • 我的具体情况是驱动图形帧缓冲区所需的小守护进程(非常具体的屏幕——几个 eInk 控制器之一)。关于 udev - 有趣。我想知道他们如何确保两个 udev 都获得所有必要的事件,也就是说,如果将此事件传递给 initramfs udev,用户空间事件如何获得诸如“MMC 卡在这里”之类的事件。
    【解决方案2】:

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

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

    另外,你真的需要切换 root 吗?你可以保留你的 initramfs,并在 /usr/ 下挂载你需要的任何东西来拥有一个功能齐全的系统。这就是我对一些嵌入式系统所做的。

    更新: mdev 是 udev 的嵌入式替代方案,它以两种模式运行:扫描 sysfs 以添加设备,另一种为 hotplug 事件运行。所以我猜你不需要“存储”热插拔事件,因为所有信息在 sysfs 中仍然可用。所以解决方案是这样的:

    • 从 initramfs 运行 udev
    • 挂载真实根并切换根
    • 扫描 sysfs(udev 在启动时会这样做吗?)
    • 正常操作(即等待热插拔事件)

    【讨论】:

    • “只是挂载”的有趣想法,虽然它是带有包管理器的半嵌入式设备,所以我想通过 ipkg 保持 uclibc 和 busybox 可升级,如果它们保留在 initramfs 上会很难。
    • 我需要一个守护进程来驱动图形帧缓冲区,它需要尽快显示闪屏(并且延迟几秒钟不是营销 POV 的选项)。在这种特殊情况下,很容易启动守护程序,然后将其关闭并在真正的 rootfs 上重新启动,几乎没有共享信息,但我很感兴趣在一般情况下如何处理它。例如。如何处理热插拔事件,以便 initramfs 可以等待存储出现,并且 rootfs 可以接收它感兴趣的所有事件,包括在 initramfs 运行期间发生的事件。
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 2011-08-07
    • 2022-07-07
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多