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
모달리아에 대한 추가 링크: