initramfs를 사용할 때와 사용하지 않을 때 다른 마운트 출력

initramfs를 사용할 때와 사용하지 않을 때 다른 마운트 출력

루트 파일 시스템이 포함된 EMMC에 액세스하기 위해 드라이버를 로드하려면 initramfs를 생성해야 합니다.

  • 현재 커널 빌드에서 EMMC 드라이버는 모듈식입니다(죄송하지만 변경할 수 없습니다).
  • 커널이 시작된 후 initramfs가 로드됩니다.
  • 이 기능을 사용하려면 initramfs에서 실제 rootfs가 포함된 EMMC의 파티션으로 전환해야 합니다 switch_root.

이 시점까지는 모든 것이 잘 진행되고 있습니다. initramfs를 생성하고 커널이 이를 로드하도록 한 다음 /dev/mmcblk0p2실제 rootfs가 포함된 EMMC 파티션으로 전환하도록 할 수 있습니다. 내 쿼리:

시작이 완료되면 mount 명령이 다음과 같이 표시됩니다.

rootfs 켜기/rootfs 입력(rw)
/dev/mmcblk0p2 on / ext4 입력(rw,sync,noatime,data=ordered)
/proc의 proc 유형 proc(rw,relatime)
/dev/mmcblk0p1 /var/휘발성/run/media/mmcblk0p1에서 vfat(rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)를 입력합니다.
/var/휘발성/run/media/mmcblk0p3의 /dev/mmcblk0p3 유형 ext4(rw,relatime,data=ordered)
/var/휘발성/run/media/mmcblk0p4의 /dev/mmcblk0p4 유형 ext4(rw,relatime,data=ordered)

커널의 일부로 EMMC 드라이버를 빌드하고 initramfs를 제거하면 출력이 매우 다릅니다.

rootfs 켜기/rootfs 입력(rw)
/dev/root on / ext4 입력(rw,relatime,discard,journal_checksum,commit=1,data=ordered)
/dev 유형 devtmpfs의 devtmpfs(rw,relatime,size=112272k,nr_inodes=28068,mode=755)
/dev/mmcblk0p1 /var/휘발성/run/media/mmcblk0p1에서 vfat(rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)를 입력합니다.
/var/휘발성/run/media/mmcblk0p3의 /dev/mmcblk0p3 유형 ext4(rw,relatime,data=ordered)
/var/휘발성/run/media/mmcblk0p4의 /dev/mmcblk0p4 유형 ext4(rw,relatime,data=ordered)
  • 커널 로그와 메이저, 마이너 장치 번호를 확인해 /dev/root보니 /dev/mmcblk0p2.
  • 하지만 마운트 출력이 왜 다른지 이해가 되지 않습니다.

initramfs가 작동하도록 많은 노력을 기울인 후에 나는 사소한 것 하나도 놓치고 싶지 않았습니다. 어떤 도움이라도 대단히 감사하겠습니다.

이를 수행하는 스크립트는 다음과 같습니다.

#!/bin/sh

#Make busybox links
#/bin/busybox mkdir -p /usr/bin /sbin /bin
#BBINSTALL="/bin/busybox --install -s"
SWITCH="/bin/busybox switch_root"
INSERT="/sbin/insmod"
MOUNT="/bin/busybox mount"
UMOUNT="/bin/busybox umount"
DISKF="/bin/busybox df"
LSMOD="/bin/busybox lsmod"
LS="/bin/busybox ls"
CAT="/bin/busybox cat"
LS="/bin/busybox ls"
PRINTENV="/usr/bin/printenv"
SLEEP="/bin/busybox sleep"
PS="/bin/busybox ps"
MKDIR="/bin/busybox mkdir"
CAT="/bin/busybox cat"
GREP="/bin/busybox grep"
WC="/bin/busybox wc"

#mount proc and sysfs
$MOUNT -t proc none /proc
$MOUNT -t sysfs none /sys

#Mount NFS/EMMC - check
$CAT /proc/cmdline | $GREP -inr "/dev/nfs" | $WC -l > /var/NFSFOUND
ISNFSFOUND=$($CAT /var/NFSFOUND)

#Check if NFS was found in Kernel command line
if [ $ISNFSFOUND -ne 0 ]
then
    echo "Mounting NFS:"
    $MOUNT -a -t nfs -o rw,relatime,vers=2,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=udp,timeo=1,retrans=1,mountvers=1,addr=172.31.219.19 172.31.219.19:/home/user/Perforce/Mfg_Repo/ng5_mfg/b5/main/nfsroot /mnt/root/
else
#If NFS was not found, mount EMMC
    if [ ! -d /mnt/root ];  then
            $MKDIR /mnt/root
    fi
        echo "Mounting EMMC:"
    $MOUNT -t devtmpfs -o rw,relatime,mode=755 none /dev
    $SLEEP 1

    #Load EMMC driver
    echo "Inserting EMMC driver"
    $INSERT /lib/mmc_block.ko
    $INSERT /lib/omap.ko
    $INSERT /lib/omap_hsmmc.ko
    $SLEEP 1

    #Mount the mount point
    $MOUNT -a -t ext4 -o rw,relatime,discard,journal_checksum,commit=1,data=ordered  /dev/mmcblk0p2 /mnt/root/
fi

#Unmount the current mounts
echo "Unmounting initramfs:"
if [ $ISNFSFOUND -eq 0 ]
then
echo "Unmounting devtmpfs(EMMC):"
    $UMOUNT /dev
fi

#Switch to actual rootfs - This will be done by init program

관련 정보