summaryrefslogtreecommitdiff
path: root/meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh
diff options
context:
space:
mode:
authorAdriana Kobylak <anoo@us.ibm.com>2020-06-04 00:22:42 +0300
committerAndrew Geissler <geissonator@yahoo.com>2020-07-15 00:27:57 +0300
commit0998d1e4fc58e668ccf2ea5e07b86317b066160d (patch)
tree1e05075a6acf802c3dedcce2988dcd1255de23b8 /meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh
parent56e14d9ed010fd5e87a83522a3eee8bd5cd30ccc (diff)
downloadopenbmc-0998d1e4fc58e668ccf2ea5e07b86317b066160d.tar.xz
initramfs: Add init script for eMMC
This init script mounts the rootfs based on the root u-boot env variable, mounts the read-write filesystem and sets up the overlay. (From meta-phosphor rev: 86164b2e072cc6cebc9caf1614e2b1fa0e0884a0) Change-Id: If9121048b6223d5391e5f6a8b7d6cd7d22707969 Signed-off-by: Adriana Kobylak <anoo@us.ibm.com> Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Diffstat (limited to 'meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh')
-rw-r--r--meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh51
1 files changed, 51 insertions, 0 deletions
diff --git a/meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh b/meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh
new file mode 100644
index 000000000..ec4b745db
--- /dev/null
+++ b/meta-phosphor/recipes-phosphor/initrdscripts/phosphor-mmc-init/mmc-init.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# Get the value of the root env variable found in /proc/cmdline
+get_root() {
+ local root="$(cat /proc/cmdline)"
+ root="${root##* root=PARTLABEL=}"
+ root="${root%% *}"
+ [ "${root}" != "" ] && echo "${root}"
+}
+
+fslist="proc sys dev run"
+rodir=/mnt/rofs
+cd /
+mkdir -p $fslist
+mount dev dev -tdevtmpfs
+mount sys sys -tsysfs
+mount proc proc -tproc
+mount tmpfs run -t tmpfs -o mode=755,nodev
+
+# Move the secondary GPT to the end of the device if needed. Look for the GPT
+# header signature "EFI PART" located 512 bytes from the end of the device.
+magic=$(tail -c 512 /dev/mmcblk0 | hexdump -C -n 8 | grep "EFI PART")
+if test -z "${magic}"; then
+ sgdisk -e /dev/mmcblk0
+ partprobe
+fi
+
+# There eMMC GPT labels for the rootfs are rofs-a and rofs-b, and the label for
+# the read-write partition is rwfs. Run udev to make the partition labels show
+# up. Mounting by label allows for partition numbers to change if needed.
+udevd --daemon
+udevadm trigger --type=devices --action=add
+udevadm settle --timeout=10
+
+mkdir -p $rodir
+if ! mount /dev/disk/by-partlabel/"$(get_root)" $rodir -t ext4 -o ro; then
+ /bin/sh
+fi
+if ! mount /dev/disk/by-partlabel/rwfs $rodir/var -t ext4 -o rw; then
+ /bin/sh
+fi
+
+rm -rf $rodir/var/persist/etc-work/
+mkdir -p $rodir/var/persist/etc $rodir/var/persist/etc-work $rodir/var/persist/home/root
+mount overlay $rodir/etc -t overlay -o lowerdir=$rodir/etc,upperdir=$rodir/var/persist/etc,workdir=$rodir/var/persist/etc-work
+
+for f in $fslist; do
+ mount --move $f $rodir/$f
+done
+
+exec chroot $rodir /sbin/init