Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
PATCH v2 1/1 Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Fixed various
--- 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
board/solid-run/hummingboard-i2eX/readme.txt new file +19 -0
@@ -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
board/solid-run/make_sd_card.sh new file +259 -0
259 lines not on this page · raw message
configs/hummingboard_i2eX_defconfig new file +25 -0
@@ -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
Signature · 1 line
2.1.4
PATCH v2 1/1 Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Should read "v3".
- yba
Quoted 343 lines · Jonathan Ben-Avraham
Date: Tue, 2 Jun 2015 00:56:02 +0300
From: Jonathan Ben-Avraham <[email protected]>
To: buildroot at buildroot.org
Cc: Jonathan Ben-Avraham <[email protected]>
Subject: [PATCH v2 1/1] Solid-Run HummingBoard i2eX defconfig and bootable
microSD Bash scriptSolid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Fixed various
Signed-off-by Jonathan Ben-Avraham <[email protected]>---
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.txtcreate mode 100755board/solid-run/make_sd_card.shcreate mode 100644 configs/hummingboard_i2eX_defconfigboard/solid-run/hummingboard-i2eX/readme.txt new file +19
-0@@ -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.ilboard/solid-run/make_sd_card.sh new file +259
-0@@ -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}configs/hummingboard_i2eX_defconfig new file +25
-0@@ -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
Signature · 3 lines
9590 8E58 D30D 1660 C349 673D B205 4FC4 B8F5 B7F9 ~. .~ Tk Open Systems
=}-------- Jonathan Ben-Avraham ("yba") ----------ooO--U--Ooo------------{=
mailto:yba at tkos.co.il tel:+972.52.486.3386 http://tkos.co.il skype:benavrhmPATCH v2 1/1 Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
In reply to Jonathan Ben-AvrahamJonathan, All,
On 2015-06-02 00:56 +0300, Jonathan Ben-Avraham spake thusly:
Quoted 1 line
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.
Quoted 338 lines
Signed-off-by Jonathan Ben-Avraham <[email protected]>--- 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_defconfigboard/solid-run/hummingboard-i2eX/readme.txt new file +19
-0@@ -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.ilboard/solid-run/make_sd_card.sh new file +259
-0@@ -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}configs/hummingboard_i2eX_defconfig new file +25
-0@@ -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=ySignature · 6 lines
2.1.4 _______________________________________________ buildroot mailing list buildroot at busybox.net http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | 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. | '------------------------------^-------^------------------^--------------------'
PATCH v2 1/1 Solid-Run HummingBoard i2eX defconfig and bootable microSD Bash script
Hi Yann,
I'll change the state to "rejected".
Thanks,
- yba
Quoted 376 lines · Yann E. MORIN
Date: Tue, 12 Jan 2016 22:48:10 +0100
From: Yann E. MORIN <[email protected]>
To: Jonathan Ben-Avraham <[email protected]>
Cc: buildroot at buildroot.org
Subject: Re: [Buildroot] [PATCH v2 1/1] Solid-Run HummingBoard i2eX defconfig
and bootable microSD Bash scriptJonathan, All,
On 2015-06-02 00:56 +0300, Jonathan Ben-Avraham spake thusly:
Quoted 1 line
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.Quoted 338 lines
Signed-off-by Jonathan Ben-Avraham <[email protected]>--- 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_defconfigboard/solid-run/hummingboard-i2eX/readme.txt new file +19
-0@@ -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.ilboard/solid-run/make_sd_card.sh new file +259
-0@@ -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}configs/hummingboard_i2eX_defconfig new file +25
-1@@ -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
Signature · 3 lines
9590 8E58 D30D 1660 C349 673D B205 4FC4 B8F5 B7F9 ~. .~ Tk Open Systems
=}-------- Jonathan Ben-Avraham ("yba") ----------ooO--U--Ooo------------{=
mailto:yba at tkos.co.il tel:+972.52.486.3386 http://tkos.co.il skype:benavrhm