script: build: Add option to create boot.img
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 26 Mar 2024 08:24:56 +0000 (17:24 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 27 Mar 2024 01:28:51 +0000 (10:28 +0900)
Add option 'bootimg' to create boot.img vfat image having boot
firmwares, u-boot, boot script, kernel image, dt binaries and
dt overlays.

Change-Id: I62043417125129ca9cdd697a921da1ac1046d0d7
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
build-rpi4.sh

index 7e4a6e1..d7066bb 100755 (executable)
@@ -14,10 +14,12 @@ BUILD_ROOT=$PWD
 KERNEL_PATH=`basename ${BUILD_ROOT}`
 
 if [ $# == 0 ]; then
-       echo "Usage : $0 <architecture> [rt]"
+       echo "Usage : $0 <architecture> [rt] [bootimg]"
        echo "  architecture : arm or arm64"
        echo "  e.g) $0 arm"
        echo "  e.g) $0 arm64 rt"
+       echo "  e.g) $0 arm64 bootimg"
+       echo "  e.g) $0 arm rt bootimg"
        exit
 fi
 
@@ -30,6 +32,72 @@ check_ccache()
        fi
 }
 
+check_sudo()
+{
+       [ -e /usr/bin/make_ext4fs ] && USE_MAKE_EXT4FS=1
+       if [ "$USE_MAKE_EXT4FS" != "1" ] || [ "$IS_BOOTIMG" = "1" ]; then
+               sudo ls > /dev/null
+       fi
+
+}
+
+function mk_bootimg()
+{
+       TMP_PATH=./tmp_bootimg
+       TMP_UBOOT_PATH=./tmp_uboot
+       BOOT_PATH="rpi4/boot"
+       USER_ID=`id -u`
+       GROUP_ID=`id -g`
+
+       rm -f boot.img
+       rm -rf ${TMP_PATH}
+       mkdir ${TMP_PATH}
+
+       # Create boot.img
+       mkfs.vfat -F 16 -C -n BOOT boot.img 65536
+       sudo mount -o loop,uid=$USER_ID,gid=$GROUP_ID,showexec boot.img ${TMP_PATH}
+
+       cp -a $BOOT_PATH/LICENCE.broadcom ${TMP_PATH}
+       cp -a $BOOT_PATH/start*.elf ${TMP_PATH}
+       cp -a $BOOT_PATH/fixup*.dat ${TMP_PATH}
+       if [ "$ARM_ARCH" = "arm64" ]; then
+               echo "Create 64bit boot image"
+               cp -a $BOOT_PATH/config_64bit.txt ${TMP_PATH}/config.txt
+               cp -a arch/arm64/boot/Image ${TMP_PATH}
+               cp -a arch/arm64/boot/dts/broadcom/bcm*.dtb ${TMP_PATH}
+       else
+               echo "Create 32bit boot image"
+               cp -a $BOOT_PATH/config.txt ${TMP_PATH}
+               cp -a arch/arm/boot/zImage ${TMP_PATH}
+               cp -a arch/arm/boot/dts/bcm*.dtb ${TMP_PATH}
+       fi
+       mkdir -p ${TMP_PATH}/overlays
+       cp -a arch/arm/boot/dts/overlays/*.dtbo ${TMP_PATH}/overlays
+
+       # install u-boot files extracted from u-boot-rpi4 rpm package in download.tizen.org.
+       rm -rf ${TMP_UBOOT_PATH}
+       mkdir -p ${TMP_UBOOT_PATH}
+       pushd ${TMP_UBOOT_PATH}
+       if [ "$ARM_ARCH" = "arm64" ]; then
+               REPO_URL=http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/latest/repos/standard/packages/aarch64/
+       else
+               REPO_URL=http://download.tizen.org/snapshots/TIZEN/Tizen/Tizen-Unified/latest/repos/standard/packages/armv7l/
+       fi
+       rm -f index.html*
+       wget ${REPO_URL}
+       UBOOT=`awk -F\" '{ print $2 }' index.html | grep u-boot-rpi4`
+       wget ${REPO_URL}${UBOOT}
+       unrpm ${UBOOT}
+       popd
+
+       cp -a ${TMP_UBOOT_PATH}/boot/* ${TMP_PATH}
+       sync
+       sudo umount ${TMP_PATH}
+
+       rm -rf ${TMP_UBOOT_PATH}
+       rm -rf ${TMP_PATH}
+}
+
 function mk_tizen_modules()
 {
        if [ -e ${BUILD_ROOT}/../linux-tizen-modules-source ]; then
@@ -70,11 +138,6 @@ function mk_tizen_modules()
 }
 
 function mk_modules() {
-       [ -e /usr/bin/make_ext4fs ] && USE_MAKE_EXT4FS=1
-       if [ "$USE_MAKE_EXT4FS" != "1" ]; then
-               sudo ls > /dev/null
-       fi
-
        make ARCH=${ARM_ARCH} CROSS_COMPILE="$CROSS_COMPILER" modules_prepare
        make ARCH=${ARM_ARCH} CROSS_COMPILE="$CROSS_COMPILER" modules -j ${NCPUS}
 
@@ -119,18 +182,18 @@ function create_tar()
                mkdir ./output
        fi
 
+       rm -f ./output/*
+
+       cp $BOOTFILES ./output
        cp usr/modules.img ./output
 
+       FILES=`ls output`
        DATE=`date +%Y%m%d%H%M`
        if [ $ARM_ARCH = "arm" ]; then
-               cp ./arch/arm/boot/zImage ./output
-               cp ./arch/arm/boot/dts/broadcom/bcm2711-rpi-4-b.dtb ./output
-               tar cvf tizen-local-${DATE}-boot-armv7l-rpi4.tar -C output zImage bcm2711-rpi-4-b.dtb modules.img
+               tar cvf tizen-local-${DATE}-boot-armv7l-rpi4.tar -C output $FILES
                mv tizen-local-${DATE}-boot-armv7l-rpi4.tar ./output/
        elif [ $ARM_ARCH = "arm64" ]; then
-               cp ./arch/arm64/boot/Image ./output
-               cp ./arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb ./output
-               tar cvf tizen-local-${DATE}-boot-arm64-rpi4.tar -C output Image bcm2711-rpi-4-b.dtb modules.img
+               tar cvf tizen-local-${DATE}-boot-arm64-rpi4.tar -C output $FILES
                mv tizen-local-${DATE}-boot-arm64-rpi4.tar ./output/
        else
                echo "There is no proper architecture agrument!"
@@ -140,7 +203,18 @@ function create_tar()
 
 DEFCONFIG=tizen_bcm2711_defconfig
 touch .kernel_buildenv
-if [ "$2" = "rt" ]; then
+
+IS_RT=0
+if [ "$2" = "rt" ] || [ "$3" = "rt" ]; then
+       IS_RT=1
+fi
+
+IS_BOOTIMG=0
+if [ "$2" = "bootimg" ] || [ "$3" = "bootimg" ]; then
+       IS_BOOTIMG=1
+fi
+
+if [ "$IS_RT" = "1" ]; then
        echo "Build RT-Kernel"
        BUILD_VERSION=`cat .kernel_buildenv`
        if [ "$BUILD_VERSION" != "RT" ]; then
@@ -161,6 +235,7 @@ else
        echo "NORMAL" > ./.kernel_buildenv
 fi
 
+check_sudo
 
 if [ $1 = "arm" ]; then
        ARM_ARCH="arm"
@@ -188,6 +263,17 @@ if [ $? -ne 0 ]; then
        exit 1
 fi
 
+if [ "$IS_BOOTIMG" = "1" ]; then
+       mk_bootimg
+       BOOTFILES="boot.img"
+else
+       if [ $ARM_ARCH = "arm" ]; then
+               BOOTFILES="./arch/arm/boot/zImage  ./arch/arm/boot/dts/broadcom/bcm2711-rpi-4-b.dtb"
+       else
+               BOOTFILES="./arch/arm64/boot/Image ./arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb"
+       fi
+fi
+
 # Make module.img file
 mk_modules