Salida de montaje diferente con y sin initramfs

Salida de montaje diferente con y sin initramfs

Necesito crear un initramfs para cargar un controlador para acceder a EMMC que contiene el sistema de archivos raíz.

  • En mi versión actual del kernel, el controlador EMMC es modular (lo siento, no puedo cambiar esto).
  • Después de que se inicia el kernel, carga initramfs.
  • Desde initramfs, necesita cambiar a una partición en EMMC que contenga los rootfs reales usando la switch_rootfunción.

Hasta aquí todo funciona bien. Puedo crear initramfs, hacer que el kernel lo cargue y luego también hacer que cambie a /dev/mmcblk0p2la partición EMMC que contiene los rootfs reales. Mi consulta:

Una vez completado el inicio, el comando de montaje muestra lo siguiente:

rootfs activado/escriba rootfs (rw)
/dev/mmcblk0p2 activado/escriba ext4 (rw,sync,noatime,data=ordered)
proc en /proc tipo proc (rw,relatime)
/dev/mmcblk0p1 en /var/volatile/run/media/mmcblk0p1 escriba vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)
/dev/mmcblk0p3 en /var/volatile/run/media/mmcblk0p3 escriba ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p4 en /var/volatile/run/media/mmcblk0p4 escriba ext4 (rw,relatime,data=ordered)

Si construyo el controlador EMMC como parte del kernel (y me deshago de initramfs), el resultado es muy diferente:

rootfs activado/escriba rootfs (rw)
/dev/root en / escriba ext4 (rw,relatime,descartar,journal_checksum,commit=1,data=ordered)
devtmpfs en /dev escriba devtmpfs (rw,relatime,size=112272k,nr_inodes=28068,mode=755)
/dev/mmcblk0p1 en /var/volatile/run/media/mmcblk0p1 escriba vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)
/dev/mmcblk0p3 en /var/volatile/run/media/mmcblk0p3 escriba ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p4 en /var/volatile/run/media/mmcblk0p4 escriba ext4 (rw,relatime,data=ordered)
  • Aunque cuando revisé los registros del kernel y los números de dispositivos principales y menores encontré que /dev/rootcorresponde /dev/mmcblk0p2únicamente a.
  • Pero no puedo entender por qué la salida de mount es diferente.

Después de haber invertido tanto esfuerzo en hacer que initramfs funcione, no quiero perderme nada trivial. Cualquier ayuda, muy apreciada.

Los scripts que hacen esto se detallan a continuación:

#!/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

información relacionada