From 765d2c296fbde0e26d8eeffa4b720c4dee554179 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Thu, 13 Sep 2018 19:10:37 +0800 Subject: [PATCH] script: amlogic: add script to build 32bit image for meson64 PD#172587: script: add script to build 32bit image for meson64 Use the new options: -c specify defconfig with full name -f specify rootfs -b specify prefix or suffix of dts for the board -p specify prefix of dts for the chip -d make distclean -h print help summary and examples Change-Id: I44effd373f9c2928c7aa2ecb226baa6e4799da7e Signed-off-by: Bo Yang --- scripts/amlogic/mkimage_64_a32.sh | 285 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100755 scripts/amlogic/mkimage_64_a32.sh diff --git a/scripts/amlogic/mkimage_64_a32.sh b/scripts/amlogic/mkimage_64_a32.sh new file mode 100755 index 0000000..f56840e --- /dev/null +++ b/scripts/amlogic/mkimage_64_a32.sh @@ -0,0 +1,285 @@ +#! /bin/bash + +# +# Build kernel and dtb for arm +# Usage: mkimage.sh [-k def] [-d dts | -p chip] [-c] [-h] +# + +#set -x + +if [ "${KBUILD_SRC}" = "" ]; then + tree= +else + tree=${srctree}/ +fi + +PRGNAME=$(basename "$0") + +JLEVEL=12 + +ARCH=arm +GCC_PATH=/opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin +export PATH=$GCC_PATH:$PATH +export CROSS_COMPILE=arm-linux-gnueabihf- + +DEFCONFIG=meson64_a32_defconfig +ROOTFS="" + +BUILDKERNEL=false +BUILDROOTFS=false +BUILDDTB=false +DISTCLEAN=false +ALLDTS="" +ALLDEF="" + +DEFDIR=${tree}arch/${ARCH}/configs +DTSDIR=${tree}arch/${ARCH}/boot/dts/amlogic + + + +# +# list all defconfigs +# +list_defconfig() +{ + defs=$(find ${DEFDIR} -name meson*_defconfig -type f -print) + + for def in ${defs}; do + ALLDEF="${ALLDEF} "$(basename $def) + done +} + +# +# list all dts +# +list_devicetree() +{ + echo "todo" +} + + +# +# find defconfig in +# +find_defconfig() +{ + cnt=$(find ${DEFDIR} -name ${1} -type f -print | wc -l) + + def=$(find ${DEFDIR} -name ${1} -type f -print) + + if [ ${cnt} -eq 1 ]; then + DEFCONFIG=$(basename $def) + echo "find defconfig $DEFCONFIG" + elif [ ${cnt} -eq 0 ]; then + echo "find no defconfig" + exit 1 + elif [ ${cnt} -ge 2 ]; then + echo "find multi defconfigs" + exit 1 + fi +} + +# +# find rootfs +# +find_rootfs() +{ + if [ -f ${1} ]; then + ROOTFS=${1} + else + echo "find no rootfs ${1}" + exit 1 + fi +} + +# +# find dts +# +find_devicetree() +{ + cnt=$(find ${DTSDIR} -type f -name *${1}*.dts -print | wc -l) + + if [ ${cnt} -eq 0 ]; then + echo "find no dts" + exit 1 + fi + + dts=$(find ${DTSDIR} -type f -name *${1}*.dts) + + for d in ${dts}; do + ALLDTS="${ALLDTS} $(basename $d)" + done +} + + +# +# make distclean +# +make_distclean() +{ + make ARCH=${ARCH} distclean > /dev/null 2>&1 +} + + +# +# make defconfig +# +make_defconfig() +{ + make ARCH=${ARCH} ${DEFCONFIG} +} + + +# +#build kernel +# +build_kernel() +{ + OPTION="" + OPTION=${OPTION}" ARCH=${ARCH}" + if [ "${BUILDROOTFS}" = "true" ]; then + OPTION=${OPTION}" CONFIG_INITRAMFS_SOURCE=${ROOTFS}" + fi + + make ${OPTION} uImage -j${JLEVEL} +} + + +# +# build dtb +# +build_dtb() +{ + for d in ${ALLDTS}; do + echo "compile dtb ${d%.dts} ..." + make ARCH=${ARCH} ${d%.dts}.dtb + if [ $? -ne 0 ]; then exit 1; fi + done +} + + +# +# examples +# +usage_example() +{ + echo -e "\nExamples:" + echo -e " # build kernel using default ${DEFCONFIG}" + echo -e "\033[32;1m $PRGNAME\033[0m\n" + + echo -e " # build kernel using defconfig \c" + echo -e " specified by the option -c" + echo -e "\033[32;1m $PRGNAME -c meson64_defconfig\033[0m\n" + + echo -e " # build all dtb for the board with prefix or suffix \c" + echo -e " specified by the option -b" + echo -e "\033[32;1m $PRGNAME -b p320\033[0m\n" + + echo -e " # build all dtb for the chip with prefix \c" + echo -e " specified by the option -p" + echo -e "\033[32;1m $PRGNAME -p txl\033[0m\n" + + echo -e " # make distclean and build kernel and dtb" + echo -e "\033[32;1m $PRGNAME -c meson64_defconfig -b p320 -d\033[0m\n" +} + + +# +# usage +# +usage() +{ + echo -e "Usage: $PRGNAME [-c defconfig] {-f rootfs} [-b dts | -p chip] [-d] [-h]\n" + echo -e " -c specify defconfig with full name" + echo -e " -f specify rootfs" + echo -e " -b specify prefix or suffix of dts for the board" + echo -e " -p specify prefix of dts for the chip" + echo -e " -d make distclean" + echo -e " -h print help summary and examples" +} + + +while getopts :c:f:b:p:dh opt; do + case $opt in + c) + BUILDKERNEL=true + find_defconfig ${OPTARG} + ;; + f) + BUILDKERNEL=true + BUILDROOTFS=true + find_rootfs ${OPTARG} + ;; + b) + BUILDDTB=true + find_devicetree _${OPTARG} + ;; + p) + BUILDDTB=true + find_devicetree ${OPTARG}_ + ;; + d) + DISTCLEAN=true + ;; + h) + usage + usage_example + exit 1 + ;; + + \?) + echo "invalid option $OPTARG" + usage + exit 1 + ;; + :) + case $OPTARG in + c) + echo "missing argument to -c" + usage + exit 1 + ;; + f) + echo "missing argument to -f" + usage + exit 1 + ;; + b) + echo "missing argument to -b" + usage + exit 1 + ;; + p) + echo "missing argument to -p" + usage + exit 1 + ;; + esac + ;; + esac +done + +if [ $# -eq 0 ];then + BUILDKERNEL=true +fi + +if [ "${DISTCLEAN}" = "true" ]; then + make_distclean +fi + +if [ "${BUILDKERNEL}" = "true" ] || [ "${BUILDDTB}" = "true" ];then + make_defconfig +fi + +if [ "${BUILDKERNEL}" = "true" ]; then + echo "start compile kernel ..." + build_kernel +fi + +if [ "${BUILDDTB}" = "true" ]; then + echo "start compile dtb ..." + build_dtb +fi + + +exit 1 -- 2.7.4