From 159c2e548e6b37e21352a3aa112c39cfe5939f4c Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 16 May 2016 00:47:40 +0200 Subject: [PATCH] Support building boot images for eMMC devices. --- README | 15 ++++++++++++++- mkimage.sh | 36 +++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/README b/README index ef3febb..0349694 100644 --- a/README +++ b/README @@ -5,7 +5,20 @@ The image is signed with my GnuPG key; you can find the key in the Debian keyring. The prebuilt images are made for 1GB cards, so they should fit onto -pretty much any modern SD card. +pretty much any modern SD or MMC card. Root images built for SD cards +will fit work on MMC devices but not the other way round (the prebuilt +root images are for SD). + +If you want to update the boot partition of an eMMC device (where +U-Boot lives), you will need to unlock it before Linux lets you +write to it, e.g.: + + echo 0 > /sys/block/mmcblk0boot0/force_ro + +SD cards do not have hardware partitions (U-Boot is stored on the same +block device as everything else), so all you need to do is to decompress +the image and dd it to the card. + Prebuilt images: https://storage.sesse.net/debian-xu4/ ODROID forum thread: http://forum.odroid.com/viewtopic.php?f=96&t=21256 diff --git a/mkimage.sh b/mkimage.sh index 88b964d..bf78888 100755 --- a/mkimage.sh +++ b/mkimage.sh @@ -1,15 +1,13 @@ #! /bin/bash # Install a bog-standard Debian bootable for ODROID XU3/XU4. -# Note that this will only work for SD cards; MMC devices -# have a different layout. See -# /usr/share/doc/u-boot-exynos/README.odroid.gz for more details. # # Note: You will need u-boot-exynos >= 2016.05~rc3+dfsg1-1, # which at the time of writing is in experimental (it will # probably eventually hit stretch). # -# Beware: This will ERASE ALL DATA on the target SD card. +# Beware: This will ERASE ALL DATA on the target SD card +# or MMC partition. # # # Copyright 2016 Steinar H. Gunderson . @@ -20,8 +18,9 @@ set -e DEVICE= BOOTPART_MB=256 SUITE=stretch +TYPE=sd -while getopts "b:s:" opt; do +while getopts "b:s:t:" opt; do case $opt in b) BOOTPART_MB=$OPTARG @@ -30,6 +29,9 @@ while getopts "b:s:" opt; do # Sorry, jessie won't work; the kernel doesn't support XU3/XU4. SUITE=$OPTARG ;; + t) + TYPE=$OPTARG + ;; :) echo "Option -$OPTARG requires an argument." exit 1 @@ -40,12 +42,17 @@ shift $((OPTIND - 1)) DEVICE=$1 if [ ! -b "$DEVICE" ]; then - echo "Usage: $0 [-b BOOTPARTITION_SIZE] [-s SUITE] DEVICE [OTHER_DEBOOTSTRAP_ARGS...]" + echo "Usage: $0 [-b BOOTPARTITION_SIZE] [-s SUITE] [-t sd|mmc] DEVICE [OTHER_DEBOOTSTRAP_ARGS...]" echo "DEVICE is an SD card device, e.g. /dev/sdb." exit 1 fi shift +if [ "$TYPE" != "sd" ] && [ "$TYPE" != "mmc" ]; then + echo "Card type must be 'sd' or 'mmc'." + exit 1 +fi + set -x # Prerequisites. @@ -77,11 +84,18 @@ else fi # Put the different stages of U-Boot into the right place. -# The offsets come from README.odroid.gz. -dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/bl1.bin.hardkernel of=${DEVICE} seek=1 conv=sync -dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/bl2.bin.hardkernel.1mb_uboot of=${DEVICE} seek=31 conv=sync -dd if=/usr/lib/u-boot/odroid-xu3/u-boot-dtb.bin of=${DEVICE} seek=63 conv=sync -dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/tzsw.bin.hardkernel of=${DEVICE} seek=2111 conv=sync +# The offsets come from /usr/share/doc/u-boot-exynos/README.odroid.gz. +if [ "$TYPE" = "sd" ]; then + UBOOT_DEVICE=${DEVICE} + UBOOT_OFFSET=1 +else + UBOOT_DEVICE=${DEVICE}boot0 + UBOOT_OFFSET=0 +fi +dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/bl1.bin.hardkernel of=${UBOOT_DEVICE} seek=${UBOOT_OFFSET} conv=sync +dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/bl2.bin.hardkernel.1mb_uboot of=${UBOOT_DEVICE} seek=$((UBOOT_OFFSET + 30)) conv=sync +dd if=/usr/lib/u-boot/odroid-xu3/u-boot-dtb.bin of=${UBOOT_DEVICE} seek=$((UBOOT_OFFSET + 62)) conv=sync +dd if=u-boot/sd_fuse/hardkernel_1mb_uboot/tzsw.bin.hardkernel of=${UBOOT_DEVICE} seek=$((UBOOT_OFFSET + 2110)) conv=sync # Clear out the environment. dd if=/dev/zero of=${DEVICE} seek=2560 count=32 bs=512 conv=sync -- 2.39.2