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