initramfsでブロックデバイスを自動的に検出する方法は?

initramfsでブロックデバイスを自動的に検出する方法は?

isolinuxに基づいてカスタムAlpineイメージを構築しています。デフォルトでは、rootfsを圧縮してoverlayfsとしてマウントします。

ブートローダが正常に動作し、カーネルがロードされますが、initramfsで停止しました。以下があるとしましょう。

#!/bin/sh
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
/bin/busybox --install -s

rescue_shell() {
    echo "Something went wrong. Dropping you to a shell."
    #/bin/busybox --install -s
    /bin/sh || exec /bin/busybox sh
}
mount -t sysfs sysfs /sys
mount -t proc  proc /proc
mkdir  -p /dev/pts

mount -t devtmpfs -o exec,nosuid,mode=0755,size=2M devtmpfs /dev 2>/dev/null \
        || mount -t tmpfs -o exec,nosuid,mode=0755,size=2M tmpfs /dev

[ -c /dev/ptmx ] || mknod -m 666 /dev/ptmx c 5 2
[ -d /dev/pts ] || mkdir -m 755 /dev/pts
mount -t devpts -o gid=5,mode=0620,noexec,nosuid devpts /dev/pts
# shared memory area (later system will need it)
[ -d /dev/shm ] || mkdir /dev/shm
mount -t tmpfs -o nodev,nosuid,noexec shm /dev/shm

/bin/sh
# other code left for simplicity

したがって、一度入力すると、ロードされたモジュールが/bin/shなく、特にブロックデバイスの場合は、モジュールを取り付けてから圧縮画像を抽出してからオーバーレイを取り付ける必要があります/dev/sda/dev/sr0

/ proc / partitionsを一覧表示すると、デバイスのみが提供されます。ram[0-15]これは起動後にRAMにロードされるため意味があります。

もしそうなら、私の質問は、利用可能なハードウェアに基づいてデバイスを検出する方法があるかどうかです。私も試してみましたが、mdevまだブロックデバイスを取得できません。そうですmdev.conf。テストはVirtualBoxで行った。ありがとうございます。

答え1

sysfsインターフェイスを介して公開されているモダリアを使用して運を試すことができます。

例を見るhttps://patchwork.openembedded.org/patch/148854/これは次のことを示します。

echo "/sbin/mdev" > /proc/sys/kernel/hotplug
mdev -s
find /sys/ -name modalias -print0 | xargs -0 sort -u -z | xargs -0 modprobe -abq

私が直接テストしたわけではありません。また、これはサポートされていない可能性があるBusyBox modprobeを使用しているようには見えません。それでも、初期のinitramfsがどのように見えるか-abを確認する価値があります。/sys

モダリアへの追加リンク:

関連情報