我正在构建一个基于 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 中执行测试。谢谢你。
您可以试试通过 sysfs 接口公开的 modalias 运气。
参见例如https://patchwork.openembedded.org/patch/148854/建议:
请注意,我自己没有对此进行测试。此外,这似乎没有使用 BusyBox modprobe,它可能不支持
-ab
./sys
尽管如此,看看你在早期 initramfs 中的样子可能还是值得的。有关模态的更多链接: