1*4882a593Smuzhiyun#!/bin/bash -e 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunbuild_buildroot() 4*4882a593Smuzhiyun{ 5*4882a593Smuzhiyun check_config RK_BUILDROOT_CFG || return 0 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun ROOTFS_DIR="${1:-$RK_OUTDIR/buildroot}" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun BUILDROOT_VERSION=$(grep "export BR2_VERSION := " \ 10*4882a593Smuzhiyun "$SDK_DIR/buildroot/Makefile" | xargs -n 1 | tail -n 1) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun echo "==========================================" 13*4882a593Smuzhiyun echo " Start building buildroot($BUILDROOT_VERSION)" 14*4882a593Smuzhiyun echo "==========================================" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /usr/bin/time -f "you take %E to build buildroot" \ 17*4882a593Smuzhiyun "$SCRIPTS_DIR/mk-buildroot.sh" $RK_BUILDROOT_CFG "$ROOTFS_DIR" 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun cp -fr $ROOTFS_DIR/rootfs.ext2 $RK_OUTDIR/../linuxfs/rootfs.img 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun cat "$RK_LOG_DIR/post-rootfs.log" 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun finish_build build_buildroot $@ 24*4882a593Smuzhiyun} 25*4882a593Smuzhiyun 26*4882a593Smuzhiyunbuild_linuxfs() 27*4882a593Smuzhiyun{ 28*4882a593Smuzhiyun check_config RK_BUILDROOT_CFG || return 0 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun ROOTFS_DIR="${1:-$RK_OUTDIR/buildroot}" 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun BUILDROOT_VERSION=$(grep "export BR2_VERSION := " \ 33*4882a593Smuzhiyun "$SDK_DIR/buildroot/Makefile" | xargs -n 1 | tail -n 1) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun echo "==========================================" 36*4882a593Smuzhiyun echo " Start building buildroot($BUILDROOT_VERSION)" 37*4882a593Smuzhiyun echo "==========================================" 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun cp -fr $RK_OUTDIR/../linuxfs/rootfs.img $ROOTFS_DIR/rootfs.ext4 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun finish_build build_buildroot $@ 42*4882a593Smuzhiyun} 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunbuild_yocto() 45*4882a593Smuzhiyun{ 46*4882a593Smuzhiyun check_config RK_YOCTO_CFG RK_KERNEL_VERSION_REAL || return 0 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun ROOTFS_DIR="${1:-$RK_OUTDIR/yocto}" 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun "$SCRIPTS_DIR/check-yocto.sh" 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun cd yocto 53*4882a593Smuzhiyun rm -f build/conf/local.conf 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun if echo "$RK_YOCTO_CFG" | grep -q ".conf$"; then 56*4882a593Smuzhiyun ln -sf $RK_YOCTO_CFG build/conf/local.conf 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun echo "==========================================" 59*4882a593Smuzhiyun echo " Start building $RK_YOCTO_CFG" 60*4882a593Smuzhiyun echo "==========================================" 61*4882a593Smuzhiyun else 62*4882a593Smuzhiyun { 63*4882a593Smuzhiyun echo "include include/common.conf" 64*4882a593Smuzhiyun echo "include include/debug.conf" 65*4882a593Smuzhiyun echo "include include/display.conf" 66*4882a593Smuzhiyun echo "include include/multimedia.conf" 67*4882a593Smuzhiyun echo "include include/audio.conf" 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun echo 70*4882a593Smuzhiyun echo "MACHINE = \"$RK_YOCTO_CFG\"" 71*4882a593Smuzhiyun echo 72*4882a593Smuzhiyun } > build/conf/local.conf 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun echo "==========================================" 75*4882a593Smuzhiyun echo " Start building machine($RK_YOCTO_CFG)" 76*4882a593Smuzhiyun echo "==========================================" 77*4882a593Smuzhiyun fi 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun { 80*4882a593Smuzhiyun if [ "$RK_WIFIBT_CHIP" ]; then 81*4882a593Smuzhiyun echo "include include/wifibt.conf" 82*4882a593Smuzhiyun fi 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun if [ "$RK_YOCTO_CHROMIUM" ]; then 85*4882a593Smuzhiyun echo "include include/browser.conf" 86*4882a593Smuzhiyun fi 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun echo "include include/rksdk.conf" 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun echo 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun echo "PREFERRED_VERSION_linux-rockchip :=" \ 93*4882a593Smuzhiyun "\"$RK_KERNEL_VERSION_REAL%\"" 94*4882a593Smuzhiyun echo "LINUXLIBCVERSION := \"$RK_KERNEL_VERSION_REAL-custom%\"" 95*4882a593Smuzhiyun case "$RK_CHIP_FAMILY" in 96*4882a593Smuzhiyun px30|rk3326|rk3562|rk3566_rk3568|rk3588) 97*4882a593Smuzhiyun echo "MALI_VERSION := \"g13p0\"" ;; 98*4882a593Smuzhiyun esac 99*4882a593Smuzhiyun echo "DISPLAY_PLATFORM := \"$RK_YOCTO_DISPLAY_PLATFORM\"" 100*4882a593Smuzhiyun } > build/conf/rksdk_override.conf 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun source oe-init-build-env build 103*4882a593Smuzhiyun LANG=en_US.UTF-8 LANGUAGE=en_US.en LC_ALL=en_US.UTF-8 \ 104*4882a593Smuzhiyun bitbake core-image-minimal -f -c rootfs -c image_complete \ 105*4882a593Smuzhiyun -R conf/rksdk_override.conf 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun ln -rsf "$PWD/latest/rootfs.img" $ROOTFS_DIR/rootfs.ext4 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun touch "$RK_LOG_DIR/post-rootfs.log" 110*4882a593Smuzhiyun cat "$RK_LOG_DIR/post-rootfs.log" 111*4882a593Smuzhiyun finish_build build_yocto $@ 112*4882a593Smuzhiyun} 113*4882a593Smuzhiyun 114*4882a593Smuzhiyunbuild_debian() 115*4882a593Smuzhiyun{ 116*4882a593Smuzhiyun check_config RK_DEBIAN_VERSION || return 0 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun ROOTFS_DIR="${1:-$RK_OUTDIR/debian}" 119*4882a593Smuzhiyun ARCH=${RK_DEBIAN_ARCH:-armhf} 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun "$SCRIPTS_DIR/check-debian.sh" 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun echo "==========================================" 124*4882a593Smuzhiyun echo " Start building $RK_DEBIAN_VERSION($ARCH)" 125*4882a593Smuzhiyun echo "==========================================" 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun cd debian 128*4882a593Smuzhiyun if [ ! -f linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz ]; then 129*4882a593Smuzhiyun RELEASE=$RK_DEBIAN_VERSION TARGET=desktop ARCH=$ARCH \ 130*4882a593Smuzhiyun ./mk-base-debian.sh 131*4882a593Smuzhiyun ln -sf linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz \ 132*4882a593Smuzhiyun linaro-$RK_DEBIAN_VERSION-$ARCH.tar.gz 133*4882a593Smuzhiyun fi 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun VERSION=debug ARCH=$ARCH ./mk-rootfs-$RK_DEBIAN_VERSION.sh 136*4882a593Smuzhiyun ./mk-image.sh 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun ln -rsf "$PWD/linaro-rootfs.img" $ROOTFS_DIR/rootfs.ext4 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun finish_build build_debian $@ 141*4882a593Smuzhiyun} 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun# Hooks 144*4882a593Smuzhiyun 145*4882a593Smuzhiyunbuild_ubuntu() 146*4882a593Smuzhiyun{ 147*4882a593Smuzhiyun check_config RK_UBUNTU_VERSION || return 0 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun ROOTFS_DIR="${1:-$RK_OUTDIR/ubuntu}" 150*4882a593Smuzhiyun ARCH=${RK_UBUNTU_ARCH:-armhf} 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun echo "==========================================" 153*4882a593Smuzhiyun echo " Start building $RK_UBUNTU_VERSION($ARCH)" 154*4882a593Smuzhiyun echo "==========================================" 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun cd ubuntu 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun ln -rsf "$PWD/jammy-rootfs.img" "$ROOTFS_DIR/rootfs.ext4" 159*4882a593Smuzhiyun "$SCRIPTS_DIR/mk-kernel.sh" modules 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun finish_build build_ubuntu $@ 162*4882a593Smuzhiyun} 163*4882a593Smuzhiyun 164*4882a593Smuzhiyunusage_hook() 165*4882a593Smuzhiyun{ 166*4882a593Smuzhiyun echo -e "buildroot-config[:<config>] \tmodify buildroot defconfig" 167*4882a593Smuzhiyun echo -e "buildroot-make[:<arg1>:<arg2>] \trun buildroot make" 168*4882a593Smuzhiyun echo -e "rootfs[:<rootfs type>] \tbuild default rootfs" 169*4882a593Smuzhiyun echo -e "buildroot \tbuild buildroot rootfs" 170*4882a593Smuzhiyun echo -e "yocto \tbuild yocto rootfs" 171*4882a593Smuzhiyun echo -e "debian \tbuild debian rootfs" 172*4882a593Smuzhiyun echo -e "ubuntu \tbuild ubuntu rootfs" 173*4882a593Smuzhiyun} 174*4882a593Smuzhiyun 175*4882a593Smuzhiyunclean_hook() 176*4882a593Smuzhiyun{ 177*4882a593Smuzhiyun rm -rf yocto/build/tmp yocto/build/*cache 178*4882a593Smuzhiyun rm -rf debian/binary 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun if check_config RK_BUILDROOT_CFG &>/dev/null; then 181*4882a593Smuzhiyun rm -rf buildroot/output/$RK_BUILDROOT_CFG 182*4882a593Smuzhiyun fi 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/buildroot" 185*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/yocto" 186*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/debian" 187*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/rootfs" 188*4882a593Smuzhiyun} 189*4882a593Smuzhiyun 190*4882a593SmuzhiyunINIT_CMDS="default buildroot debian ubuntu yocto" 191*4882a593Smuzhiyuninit_hook() 192*4882a593Smuzhiyun{ 193*4882a593Smuzhiyun load_config RK_ROOTFS_TYPE 194*4882a593Smuzhiyun check_config RK_ROOTFS_TYPE &>/dev/null || return 0 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun # Priority: cmdline > custom env 197*4882a593Smuzhiyun if [ "$1" != default ]; then 198*4882a593Smuzhiyun export RK_ROOTFS_SYSTEM=$1 199*4882a593Smuzhiyun echo "Using rootfs system($RK_ROOTFS_SYSTEM) from cmdline" 200*4882a593Smuzhiyun elif [ "$RK_ROOTFS_SYSTEM" ]; then 201*4882a593Smuzhiyun export RK_ROOTFS_SYSTEM=${RK_ROOTFS_SYSTEM//\"/} 202*4882a593Smuzhiyun echo "Using rootfs system($RK_ROOTFS_SYSTEM) from environment" 203*4882a593Smuzhiyun else 204*4882a593Smuzhiyun return 0 205*4882a593Smuzhiyun fi 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun ROOTFS_CONFIG="RK_ROOTFS_SYSTEM=\"$RK_ROOTFS_SYSTEM\"" 208*4882a593Smuzhiyun ROOTFS_UPPER=$(echo $RK_ROOTFS_SYSTEM | tr 'a-z' 'A-Z') 209*4882a593Smuzhiyun ROOTFS_CHOICE="RK_ROOTFS_SYSTEM_$ROOTFS_UPPER" 210*4882a593Smuzhiyun if ! grep -q "^$ROOTFS_CONFIG$" "$RK_CONFIG"; then 211*4882a593Smuzhiyun if ! grep -wq "$ROOTFS_CHOICE" "$RK_CONFIG"; then 212*4882a593Smuzhiyun echo -e "\e[35m$RK_ROOTFS_SYSTEM not supported!\e[0m" 213*4882a593Smuzhiyun return 0 214*4882a593Smuzhiyun fi 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun sed -i -e "/RK_ROOTFS_SYSTEM/d" "$RK_CONFIG" 217*4882a593Smuzhiyun echo "$ROOTFS_CONFIG" >> "$RK_CONFIG" 218*4882a593Smuzhiyun echo "$ROOTFS_CHOICE=y" >> "$RK_CONFIG" 219*4882a593Smuzhiyun "$SCRIPTS_DIR/mk-config.sh" olddefconfig &>/dev/null 220*4882a593Smuzhiyun fi 221*4882a593Smuzhiyun} 222*4882a593Smuzhiyun 223*4882a593SmuzhiyunPRE_BUILD_CMDS="buildroot-config buildroot-make bmake" 224*4882a593Smuzhiyunpre_build_hook() 225*4882a593Smuzhiyun{ 226*4882a593Smuzhiyun check_config RK_ROOTFS_TYPE || return 0 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun case "$1" in 229*4882a593Smuzhiyun buildroot-make | bmake) 230*4882a593Smuzhiyun check_config RK_BUILDROOT_CFG || return 0 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun shift 233*4882a593Smuzhiyun "$SCRIPTS_DIR/mk-buildroot.sh" $RK_BUILDROOT_CFG make $@ 234*4882a593Smuzhiyun finish_build buildroot-make $@ 235*4882a593Smuzhiyun ;; 236*4882a593Smuzhiyun buildroot-config) 237*4882a593Smuzhiyun BUILDROOT_BOARD="${2:-"$RK_BUILDROOT_CFG"}" 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun [ "$BUILDROOT_BOARD" ] || return 0 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun TEMP_DIR=$(mktemp -d) 242*4882a593Smuzhiyun unset BUILDROOT_OUTPUT_DIR 243*4882a593Smuzhiyun "$SDK_DIR/buildroot/build/parse_defconfig.sh" \ 244*4882a593Smuzhiyun "$BUILDROOT_BOARD" "$TEMP_DIR/.config" 245*4882a593Smuzhiyun make -C "$SDK_DIR/buildroot" O="$TEMP_DIR" menuconfig 246*4882a593Smuzhiyun "$SDK_DIR/buildroot/build/update_defconfig.sh" \ 247*4882a593Smuzhiyun "$BUILDROOT_BOARD" "$TEMP_DIR" 248*4882a593Smuzhiyun rm -rf "$TEMP_DIR" 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun finish_build $@ 251*4882a593Smuzhiyun ;; 252*4882a593Smuzhiyun esac 253*4882a593Smuzhiyun} 254*4882a593Smuzhiyun 255*4882a593SmuzhiyunBUILD_CMDS="rootfs linuxfs buildroot debian ubuntu yocto" 256*4882a593Smuzhiyunbuild_hook() 257*4882a593Smuzhiyun{ 258*4882a593Smuzhiyun check_config RK_ROOTFS_TYPE || return 0 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun if [ -z "$1" -o "$1" = rootfs ]; then 261*4882a593Smuzhiyun ROOTFS=${RK_ROOTFS_SYSTEM:-buildroot} 262*4882a593Smuzhiyun else 263*4882a593Smuzhiyun ROOTFS=$1 264*4882a593Smuzhiyun fi 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun ROOTFS_IMG=rootfs.${RK_ROOTFS_TYPE} 267*4882a593Smuzhiyun ROOTFS_DIR="$RK_OUTDIR/rootfs" 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun echo "==========================================" 270*4882a593Smuzhiyun echo " Start building rootfs($ROOTFS)" 271*4882a593Smuzhiyun echo "==========================================" 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun rm -rf "$ROOTFS_DIR" 274*4882a593Smuzhiyun mkdir -p "$ROOTFS_DIR" 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun case "$ROOTFS" in 277*4882a593Smuzhiyun yocto) build_yocto "$ROOTFS_DIR" ;; 278*4882a593Smuzhiyun debian) build_debian "$ROOTFS_DIR" ;; 279*4882a593Smuzhiyun ubuntu) build_ubuntu "$ROOTFS_DIR" ;; 280*4882a593Smuzhiyun buildroot) build_buildroot "$ROOTFS_DIR" ;; 281*4882a593Smuzhiyun linuxfs) build_linuxfs "$ROOTFS_DIR" ;; 282*4882a593Smuzhiyun *) usage ;; 283*4882a593Smuzhiyun esac 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun if [ ! -f "$ROOTFS_DIR/$ROOTFS_IMG" ]; then 286*4882a593Smuzhiyun echo "There's no $ROOTFS_IMG generated..." 287*4882a593Smuzhiyun exit 1 288*4882a593Smuzhiyun fi 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun if [ "$RK_ROOTFS_INITRD" ]; then 291*4882a593Smuzhiyun /usr/bin/time -f "you take %E to pack initrd image" \ 292*4882a593Smuzhiyun "$SCRIPTS_DIR/mk-ramdisk.sh" "$ROOTFS_DIR/$ROOTFS_IMG" \ 293*4882a593Smuzhiyun "$ROOTFS_DIR/boot.img" "$RK_BOOT_FIT_ITS" 294*4882a593Smuzhiyun ln -rsf "$ROOTFS_DIR/boot.img" "$RK_FIRMWARE_DIR/boot.img" 295*4882a593Smuzhiyun else 296*4882a593Smuzhiyun ln -rsf "$ROOTFS_DIR/$ROOTFS_IMG" "$RK_FIRMWARE_DIR/rootfs.img" 297*4882a593Smuzhiyun fi 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun finish_build build_rootfs $@ 300*4882a593Smuzhiyun} 301*4882a593Smuzhiyun 302*4882a593Smuzhiyunsource "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}" 303*4882a593Smuzhiyun 304*4882a593Smuzhiyuncase "${1:-rootfs}" in 305*4882a593Smuzhiyun buildroot-config | buildroot-make | bmake) pre_build_hook $@ ;; 306*4882a593Smuzhiyun buildroot | debian | ubuntu | yocto) init_hook $@ ;& 307*4882a593Smuzhiyun *) build_hook $@ ;; 308*4882a593Smuzhiyunesac 309