Unterschiedliche Mount-Ausgabe mit und ohne initramfs

Unterschiedliche Mount-Ausgabe mit und ohne initramfs

Ich muss ein Initramfs erstellen, um einen Treiber für den Zugriff auf EMMC zu laden, das das Root-Dateisystem enthält.

  • In meinem aktuellen Kernel-Build ist der EMMC-Treiber modular (leider kann ich das nicht ändern).
  • Nachdem der Kernel gebootet hat, lädt er initramfs.
  • Von initramfs aus muss mithilfe der switch_rootFunktion auf eine Partition auf dem EMMC gewechselt werden, die das eigentliche Rootfs enthält.

Bis hierhin funktioniert alles gut. Ich kann initramfs erstellen, den Kernel dazu bringen, es zu laden und es dann auch dazu bringen, zu /dev/mmcblk0p2der EMMC-Partition zu wechseln, die das eigentliche Rootfs enthält. Meine Frage:

Nachdem der Bootvorgang abgeschlossen ist, zeigt der Mount-Befehl Folgendes an:

rootfs ein / Typ rootfs (rw)
/dev/mmcblk0p2 ein / Typ ext4 (rw,sync,noatime,data=ordered)
proc auf /proc Typ proc (rw, relative Zeit)
/dev/mmcblk0p1 auf /var/volatile/run/media/mmcblk0p1 Typ vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)
/dev/mmcblk0p3 auf /var/volatile/run/media/mmcblk0p3 Typ ext4 (rw, Relatime, Daten=geordnet)
/dev/mmcblk0p4 auf /var/volatile/run/media/mmcblk0p4 Typ ext4 (rw, Relatime, Daten=geordnet)

Wenn ich den EMMC-Treiber als Teil des Kernels erstelle (und initramfs entferne), ist die Ausgabe ganz anders:

rootfs ein / Typ rootfs (rw)
/dev/root auf / Typ ext4 (rw, Relatime, Verwerfen, Journalprüfsumme, Commit=1, Daten=geordnet)
devtmpfs auf /dev Typ devtmpfs (rw, Relatime, Größe=112272k, Anzahl der Inodes=28068, Modus=755)
/dev/mmcblk0p1 auf /var/volatile/run/media/mmcblk0p1 Typ vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,sh)
/dev/mmcblk0p3 auf /var/volatile/run/media/mmcblk0p3 Typ ext4 (rw, Relatime, Daten=geordnet)
/dev/mmcblk0p4 auf /var/volatile/run/media/mmcblk0p4 Typ ext4 (rw, Relatime, Daten=geordnet)
  • Als ich jedoch die Kernel-Protokolle sowie die Haupt- und Nebengerätenummern überprüfte, stellte ich fest, dass dies nur /dev/rootdem entspricht /dev/mmcblk0p2.
  • Aber ich kann nicht herausfinden, warum die Ausgabe von Mount anders ist.

Nachdem ich so viel Mühe darauf verwendet habe, initramfs zum Laufen zu bringen, möchte ich nichts Triviales verpassen. Für jede Hilfe bin ich sehr dankbar.

Die Skripte, die dies tun, sind unten aufgeführt:

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

verwandte Informationen