From a21e1b1e93db2476e2bae7f82bc8c797d8f52bde Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Sat, 11 Feb 2017 14:06:37 +0200 Subject: [PATCH] initramfs config now uses overlays --- board/common/overlay-initramfs/init | 71 +++++++++++++++++++ .../common/skeleton-initramfs/usr/lib/.empty | 0 .../overlay-initramfs/remove_initramfs | 4 ++ build.sh | 2 +- configs/raspberrypi_initramfs_defconfig | 1 + 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100755 board/common/overlay-initramfs/init create mode 100644 board/common/skeleton-initramfs/usr/lib/.empty create mode 100755 board/raspberrypi/overlay-initramfs/remove_initramfs diff --git a/board/common/overlay-initramfs/init b/board/common/overlay-initramfs/init new file mode 100755 index 0000000000..db173d9345 --- /dev/null +++ b/board/common/overlay-initramfs/init @@ -0,0 +1,71 @@ +#!/bin/sh + +set -e + +PATH=/bin +BOOT_DEV=/dev/mmcblk0p1 +ROOT_DEV=/dev/mmcblk0p2 +DATA_DEV=/dev/mmcblk0p3 + +FW_DIR=/data/.fwupdate +FW_FILE=firmware.img.gz +FW_FILE_EXTR=firmware.img + +ROOT_INFO_FILE=root_info + +msg() { + echo "* $1" +} + +on_exit() { + msg "Switching to normal boot" + /normal_boot + + msg "Syncing" + sync + + msg "Unmounting data partition" + umount /data + + msg "Unmounting boot partition" + umount /boot + + msg "Rebooting" + echo 'b' > /proc/sysrq-trigger +} + +trap on_exit EXIT + +msg "Waiting for sdcard" +sleep 2 + +msg "Mounting pseudo filesystems" +mount -t devtmpfs devtmpfs /dev +mount -t proc proc /proc + +msg "Mounting boot partition" +mount $BOOT_DEV $BOOT + +msg "Mounting data partition" +mount $DATA_DEV $DATA + +if ! [ -r $FW_DIR/$FW_FILE_EXTR ]; then + msg "No firmware found, aborting" + normal_boot +fi + +if ! [ -r $FW_DIR/$ROOT_INFO ]; then + msg "No root partition info, aborting" + normal_boot +fi + +msg "Copying root image" +root_info=($(cat $FW_DIR/$ROOT_INFO)) +root_start=${root_info[0]} +root_size=${root_info[1]} + +dd if=$FW_DIR/$FW_FILE_EXTR skip=$root_start of=$ROOT_DEV bs=1048576 count=$root_size + +msg "Cleaning up" +rm -rf $FW_DIR + diff --git a/board/common/skeleton-initramfs/usr/lib/.empty b/board/common/skeleton-initramfs/usr/lib/.empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/board/raspberrypi/overlay-initramfs/remove_initramfs b/board/raspberrypi/overlay-initramfs/remove_initramfs new file mode 100755 index 0000000000..a38cdc4ace --- /dev/null +++ b/board/raspberrypi/overlay-initramfs/remove_initramfs @@ -0,0 +1,4 @@ +#!/bin/sh + +sed -i 's/^initramfs.*//g' /boot/config.txt + diff --git a/build.sh b/build.sh index 27f78c7b14..7d00b3b57b 100755 --- a/build.sh +++ b/build.sh @@ -51,6 +51,6 @@ elif [ -n "$target" ]; then make O=$outputdir $target else make O=$outputdir - $boarddir/mkimage.sh + test -x $boarddir/mkimage.sh && $boarddir/mkimage.sh fi diff --git a/configs/raspberrypi_initramfs_defconfig b/configs/raspberrypi_initramfs_defconfig index 4251cdf422..7dbd03dbe5 100644 --- a/configs/raspberrypi_initramfs_defconfig +++ b/configs/raspberrypi_initramfs_defconfig @@ -15,6 +15,7 @@ BR2_TARGET_GENERIC_HOSTNAME="" BR2_TARGET_GENERIC_ISSUE="" BR2_ROOTFS_SKELETON_CUSTOM=y BR2_ROOTFS_SKELETON_CUSTOM_PATH="board/common/skeleton-initramfs" +BR2_ROOTFS_OVERLAY="board/common/overlay-initramfs board/raspberrypi/overlay-initramfs" BR2_PACKAGE_BUSYBOX_CONFIG="board/common/busybox_initramfs.config" BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_CPIO_GZIP=y