From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2 1/1] Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Date: Tue, 12 Jan 2016 22:48:10 +0100 [thread overview]
Message-ID: <20160112214810.GD3463@free.fr> (raw)
In-Reply-To: <1433195762-30557-1-git-send-email-yba@tkos.co.il>
Jonathan, All,
On 2015-06-02 00:56 +0300, Jonathan Ben-Avraham spake thusly:
> Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
We have started to use genimage to generate images without requiring to
be root.
See for example how it is done for the Raspberry Pi:
board/raspberrypi/
Otherwise, your script is really complex just to create two aprtitions
and put a bumch of files on the first and extract the rootfs on the
econd. genimage does that quite nicely.
The only "drawback" top genimage is that the generated image is just the
size required to put the rootfs. Not much additional space is available,
and you'll have to resize the FS afterwards (either on firt run or
manually after dumping the image on the device).
Would you care to have a look at using genimage instead?
I'm marking this patch as "changes requested" in the patchwork.
Thanks!
Regards,
Yann E. MORIN.
> Signed-off-by: Jonathan Ben-Avraham <yba@tkos.co.il>
> ---
> board/solid-run/hummingboard-i2eX/readme.txt | 19 ++
> board/solid-run/make_sd_card.sh | 259 +++++++++++++++++++++++++++
> configs/hummingboard_i2eX_defconfig | 25 +++
> 3 files changed, 303 insertions(+)
> create mode 100644 board/solid-run/hummingboard-i2eX/readme.txt
> create mode 100755 board/solid-run/make_sd_card.sh
> create mode 100644 configs/hummingboard_i2eX_defconfig
>
> diff --git a/board/solid-run/hummingboard-i2eX/readme.txt b/board/solid-run/hummingboard-i2eX/readme.txt
> new file mode 100644
> index 0000000..d7995f4
> --- /dev/null
> +++ b/board/solid-run/hummingboard-i2eX/readme.txt
> @@ -0,0 +1,19 @@
> +Solid-Run HummingBoard-i2eX minimal defconfig, without WiFi or OpenGL firmware
> +is provided in configs/hummingboard_i2eX_defconfig
> +
> +Bash script for creating bootable microSD cards is in
> +board/solid-run/make_sd_card.sh
> +
> +Example usage:
> +
> +sudo make_sd_card.sh sde output HummingBoard-i2eX 256
> +
> +where:
> + "sde" is the basename of the device file "/dev/sde'
> + "output" is the Buildroot output directory, in this case for an in-tree build
> + "HummingBoard-i2eX" is the board model
> + 256 is the size of the rootfs partition in MiB (default 128 MiB)
> +
> +See also the USAGE variable in the make_sd_card.sh.
> +
> +Maintainer: yba at tkos.co.il
> diff --git a/board/solid-run/make_sd_card.sh b/board/solid-run/make_sd_card.sh
> new file mode 100755
> index 0000000..c15427a
> --- /dev/null
> +++ b/board/solid-run/make_sd_card.sh
> @@ -0,0 +1,259 @@
> +#!/bin/bash -eu
> +# @(#) Create a bootable SD card from Buildroot tree for Solid-Run boards
> +#
> +# Copyright (c) 2015 Tk Open Systems Ltd. all rights reserved
> +#
> +# When distributed as part of Buildroot, this file is licensed to the public
> +# under the terms of the GNU General Public License version 2, as published by
> +# the Free Software Foundation. See http://www.gnu.org/licenses.
> +#
> +# When received from the copyright holder, this file is licensed under the
> +# terms of the "Attribution-ShareAlike 4.0 International" license, See full
> +# text at https://creativecommons.org/licenses/by-sa/4.0/legalcode
> +#
> +# Maintainer: yba at tkos.co.il
> +# See: configs/hummingboard_i2eX_defconfig
> +
> +ME=$(basename ${0})
> +
> +! read -d '' USAGE << EOM
> +USAGE: ${ME} <SD device> <BR output> <board model> [<rootfs size>]
> +where:
> + <SD device> is the basename of the device file, e.g. "sdb", "mmcblk0"
> + <BR output> is the Buildroot output directory, e.g. "/home/yba/buildroot/output"
> + <board model> is "hummingboard_i2eX" or the DTB filename in the images directory
> + <rootfs size> is the size of the rootfs partition in MiB (default 128 MiB)
> +EOM
> +
> +ERROR=0
> +
> +if [ -z "${1+x}" ]
> +then
> + if [ -z "${DEVICE+x}" ]
> + then
> + echo "${ME} ERROR: No DEVICE env var or device specification in first parameter"
> + ERROR=$((${ERROR}+1))
> + fi
> + if [ -z "${BUILDROOT_OUTPUT_DIR+x}" ]
> + then
> + echo "${ME} ERROR: No BUILDROOT_OUTPUT_DIR directory specification env var or in second parameter"
> + ERROR=$((${ERROR}+1))
> + fi
> + if [ -z "${BOARD_MODEL+x}" ]
> + then
> + echo "${ME} ERROR: No BOARD_MODEL specification env var or in third parameter"
> + ERROR=$((${ERROR}+1))
> + fi
> +else
> + DEVICE=${1}
> + if [ -z "${2+x}" ]
> + then
> + if [ -z "${BUILDROOT_OUTPUT_DIR+x}" ]
> + then
> + echo "${ME} ERROR: No BUILDROOT_OUTPUT_DIR directory specification env var or in second parameter"
> + ERROR=$((${ERROR}+1))
> + fi
> + else
> + BUILDROOT_OUTPUT_DIR=${2}
> + if [ -z "${3+x}" ]
> + then
> + if [ -z "${BOARD_MODEL+x}" ]
> + then
> + echo "${ME} ERROR: No BOARD_MODEL specification env var or in third parameter"
> + ERROR=$((${ERROR}+1))
> + fi
> + else
> + BOARD_MODEL=${3}
> + fi
> + fi
> +fi
> +if [ 0 -ne ${EUID} ]
> +then
> + echo "${ME} ERROR: You need to run this script as root or using 'sudo'."
> + ERROR=$((${ERROR}+1))
> +fi
> +
> +[ 0 -lt ${ERROR} ] && { echo "${USAGE}"; exit 1; }
> +
> +if [ -z "${4+x}" ]
> +then
> + if [ -z "${ROOTFS_PARTITION_SIZE+x}" ]
> + then
> + ROOTFS_PARTITION_SIZE=128
> + fi
> +else
> + ROOTFS_PARTITION_SIZE=${4}
> +fi
> +
> +# The SD DEVICE could be specified as "mmcblk[0-9]+" or "sd[a-z]" and the SD partitions
> +# as "mmcblk[0-9]+p[1-2]" or "sd[a-z][1-2]" so we need to check if the "p" is needed
> +
> +if echo ${DEVICE} | grep -q mmcblk
> +then
> + P="p"
> +else
> + P=""
> +fi
> +
> +PART1=/dev/${DEVICE}${P}1
> +PART2=/dev/${DEVICE}${P}2
> +
> +if [ -z "${DEVICE}" ]
> +then
> + echo "${ME} ERROR: You need to specify a non-empty SD device name as the"
> + echo "first command line parameter to this script or in the DEVICE env var."
> + echo "For example 'sdb' or 'mmcblk0'. Be careful not to do something silly"
> + echo "like specifying your system hard drive device."
> + ERROR=$((${ERROR}+1))
> +else
> + if [ ! -b /dev/${DEVICE} ]
> + then
> + echo "${ME} ERROR: /dev/${DEVICE} is not a block device file"
> + ERROR=$((${ERROR}+1))
> + fi
> +fi
> +
> +if [ -f /etc/multipath.conf ]
> +then
> + if grep -q blacklist /etc/multipath.conf && ! grep -q ${DEVICE} /etc/multipath.conf
> + then
> + echo
> + echo "==> WARNING: You probably want to blacklist ${DEVICE} in /etc/multipath.conf"
> + echo "==> Otherwise the kernel will not be notified of partition changes"
> + echo
> + sleep 5
> + fi
> +fi
> +
> +if [ -z "${BUILDROOT_OUTPUT_DIR}" ]
> +then
> + echo "${ME} ERROR: You need to specify the Buildroot output directory as"
> + echo "the third command line parameter to this script or in the BUILDROOT_OUTPUT_DIR"
> + echo "env var."
> + ERROR=$((${ERROR}+1))
> +else
> + if [ ! -d "${BUILDROOT_OUTPUT_DIR}" ]
> + then
> + echo "${ME} ERROR: The [${BUILDROOT_OUTPUT_DIR}] directory does not"
> + echo "exist."
> + ERROR=$((${ERROR}+1))
> + fi
> +fi
> +
> +if [ ! -f ${BUILDROOT_OUTPUT_DIR}/images/rootfs.tar ]
> +then
> + echo "${ME} ERROR: The rootfs image file "
> + echo "[${BUILDROOT_OUTPUT_DIR}/images/rootfs.tar]"
> + echo "was not found."
> + echo "Check that the second parameter is the fully qualified directory."
> + ERROR=$((${ERROR}+1))
> +fi
> +
> +PATH=${BUILDROOT_OUTPUT_DIR}/host/usr/sbin/:${PATH}
> +
> +for BIN in "sfdisk mkfs.ext4 mount umount dd mktemp partprobe"
> +do
> + if ! which ${BIN} >/dev/null
> + then
> + echo "${ME} ERROR: Required executable ${BIN} is not in PATH [${PATH}]"
> + ERROR=$((${ERROR}+1))
> + fi
> +done
> +
> +MOUNT_POINT=$(mktemp -d /tmp/solid-run.XXXX)
> +if [ ! -d "${MOUNT_POINT}" ]
> +then
> + echo "${ME} ERROR: Can't create mount point"
> + exit 1
> +fi
> +
> +[ 0 -lt ${ERROR} ] && exit 1
> +
> +# The devices might have already been mounted somewhere else by the automounter
> +# so unmount them here
> +while umount ${PART2}
> +do
> + echo "${ME} Notice: Unmounted ${PART2}"
> +done
> +
> +while umount ${PART1}
> +do
> + echo "${ME} Notice: Unmounted ${PART1}"
> +done
> +
> +# Zap any partition table on the SD
> +dd if=/dev/zero of=/dev/${DEVICE} bs=1024 count=32
> +
> +# 1MiB = 2048 Sectors of 512B
> +P1_SIZE=$((2048*32))
> +P2_START=$((2048+${P1_SIZE}+1))
> +P2_SIZE=$((2048*${ROOTFS_PARTITION_SIZE}))
> +
> +# Start the first partition at 1MiB = 2048*512
> +# Use -u S to get predictable partition sizes and placement
> +printf "2028,${P1_SIZE},b,*\n${P2_START},${P2_SIZE},L,-\n" | \
> + sfdisk -u S --no-reread /dev/${DEVICE}
> +
> +sync
> +partprobe /dev/${DEVICE}
> +
> +[ ! -b ${PART2} ] && printf "Waiting for partitions to be updated"
> +while [ ! -b ${PART2} ]
> +do
> + sleep 1
> + printf " ."
> +done
> +echo
> +
> +# Hat tip to hste and jas for this recipe
> +if ! mkfs.ext4 -F -O ^has_journal -E stride=2,stripe-width=1024 -b 4096 ${PART2}
> +then
> + echo "${ME} ERROR: Failed to create ext4 filesystem on ${PART2}"
> + exit 1
> +fi
> +
> +if ! mount ${PART2} ${MOUNT_POINT}
> +then
> + echo "${ME} ERROR: Cannot mount ${PART2} on ${MOUNT_POINT}"
> + exit 1
> +fi
> +
> +tar xvf ${BUILDROOT_OUTPUT_DIR}/images/rootfs.tar -C ${MOUNT_POINT}
> +umount ${MOUNT_POINT}
> +
> +if ! mkfs.ext4 -F -O ^has_journal -E stride=2,stripe-width=1024 -b 4096 ${PART1}
> +then
> + echo "${ME} ERROR: Failed to create ext4 filesystem on ${PART1}"
> + exit 1
> +fi
> +
> +if ! mount ${PART1} ${MOUNT_POINT}
> +then
> + echo "${ME} ERROR: Cannot mount ${PART1} on ${MOUNT_POINT}"
> + exit 1
> +fi
> +
> +cp ${BUILDROOT_OUTPUT_DIR}/images/zImage ${MOUNT_POINT}
> +
> +case ${BOARD_MODEL} in
> + HummingBoard-i2eX)
> + cp ${BUILDROOT_OUTPUT_DIR}/images/imx6q-hummingboard.dtb \
> + ${MOUNT_POINT}
> + ;;
> + *)
> + if [ -f ${BUILDROOT_OUTPUT_DIR}/images/${BOARD_MODEL} ]
> + then
> + cp ${BUILDROOT_OUTPUT_DIR}/images/${BOARD_MODEL} \
> + ${MOUNT_POINT}
> + else
> + echo "${ME} WARNING: No dtb file found"
> + fi
> + ;;
> +esac
> +
> +umount ${MOUNT_POINT}
> +
> +dd if=${BUILDROOT_OUTPUT_DIR}/images/SPL of=/dev/${DEVICE} bs=1K seek=1
> +dd if=${BUILDROOT_OUTPUT_DIR}/images/u-boot.img of=/dev/${DEVICE} bs=1K seek=42
> +sync
> +rmdir ${MOUNT_POINT}
> diff --git a/configs/hummingboard_i2eX_defconfig b/configs/hummingboard_i2eX_defconfig
> new file mode 100644
> index 0000000..cd359fc
> --- /dev/null
> +++ b/configs/hummingboard_i2eX_defconfig
> @@ -0,0 +1,25 @@
> +BR2_arm=y
> +BR2_cortex_a9=y
> +BR2_ARM_EABIHF=y
> +BR2_ARM_FPU_VFPV3=y
> +BR2_TOOLCHAIN_EXTERNAL=y
> +BR2_TARGET_GENERIC_HOSTNAME="HummingBoard"
> +BR2_TARGET_GENERIC_ISSUE="Welcome to HummingBoard i2eX"
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_GIT=y
> +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/SolidRun/linux-imx6-3.14.git"
> +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="ea83bda1b403d745c67fbf6ea307d05ca138577f"
> +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7_cbi_hb"
> +BR2_LINUX_KERNEL_ZIMAGE=y
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6q-hummingboard"
> +BR2_LINUX_KERNEL_INSTALL_TARGET=y
> +BR2_TARGET_UBOOT=y
> +BR2_TARGET_UBOOT_BOARDNAME="mx6_cubox-i"
> +BR2_TARGET_UBOOT_CUSTOM_GIT=y
> +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="https://github.com/SolidRun/u-boot-imx6.git"
> +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="e817fa3165a607b581433a6abfe37e095a5d1dc9"
> +BR2_TARGET_UBOOT_FORMAT_IMG=y
> +BR2_TARGET_UBOOT_SPL=y
> +BR2_TARGET_UBOOT_SPL_NAME="SPL"
> +BR2_PACKAGE_HOST_UBOOT_TOOLS=y
> --
> 2.1.4
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2016-01-12 21:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-01 21:56 [Buildroot] [PATCH v2 1/1] Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script Jonathan Ben-Avraham
2015-06-01 22:00 ` Jonathan Ben Avraham
2016-01-12 21:48 ` Yann E. MORIN [this message]
2016-01-13 5:58 ` Jonathan Ben Avraham
-- strict thread matches above, loose matches on Subject: below --
2015-05-30 22:31 Jonathan Ben-Avraham
2015-05-31 7:08 ` Baruch Siach
2015-05-31 7:40 ` Jonathan Ben Avraham
2015-05-31 9:02 ` Baruch Siach
2015-05-31 9:23 ` Jonathan Ben Avraham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160112214810.GD3463@free.fr \
--to=yann.morin.1998@free.fr \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox