1*4882a593Smuzhiyun# Copyright (c) 2019, Fuzhou Rockchip Electronics Co., Ltd 2*4882a593Smuzhiyun# Released under the MIT license (see COPYING.MIT for the terms) 3*4882a593Smuzhiyun 4*4882a593Smuzhiyunrequire conf/machine/include/soc-family.inc 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunMACHINE_EXTRA_RRECOMMENDS:append = " \ 7*4882a593Smuzhiyun ${RK_WIFIBT_FIRMWARES} \ 8*4882a593Smuzhiyun kernel-modules \ 9*4882a593Smuzhiyun" 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunRK_ISP_VERSION := "" 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunSERIAL_CONSOLES ?= "115200;ttyFIQ0" 14*4882a593SmuzhiyunKERNEL_IMAGETYPE ?= "Image" 15*4882a593SmuzhiyunKBUILD_DEFCONFIG ?= "rockchip_linux_defconfig" 16*4882a593SmuzhiyunMACHINEOVERRIDES .= ":rockchip" 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-rockchip" 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/kernel ?= "linux-rockchip" 21*4882a593Smuzhiyun 22*4882a593SmuzhiyunROCKCHIP_KERNEL_COMPRESSED ?= "1" 23*4882a593SmuzhiyunROCKCHIP_KERNEL_IMAGES ?= "1" 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun# Prefer using Rockchip BSP kernel 4.4 26*4882a593Smuzhiyun#PREFERRED_VERSION_linux-rockchip ?= "4.19%" 27*4882a593Smuzhiyun#LINUXLIBCVERSION ?= "4.19-custom%" 28*4882a593SmuzhiyunPREFERRED_VERSION_linux-rockchip ?= "4.4%" 29*4882a593SmuzhiyunLINUXLIBCVERSION ?= "4.4-custom%" 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun# Custom kernel might not support newest python 32*4882a593SmuzhiyunPACKAGECONFIG:remove:pn-perf = "scripting" 33*4882a593Smuzhiyun 34*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg" 35*4882a593SmuzhiyunXSERVER ?= " \ 36*4882a593Smuzhiyun xserver-xorg \ 37*4882a593Smuzhiyun xf86-video-modesetting \ 38*4882a593Smuzhiyun xserver-xorg-module-exa \ 39*4882a593Smuzhiyun " 40*4882a593Smuzhiyun 41*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/egl ?= "rockchip-libmali" 42*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libgles1 ?= "rockchip-libmali" 43*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libgles2 ?= "rockchip-libmali" 44*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libgles3 ?= "rockchip-libmali" 45*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libopencl ?= "rockchip-libmali" 46*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libgbm ?= "rockchip-libmali" 47*4882a593SmuzhiyunPACKAGECONFIG:pn-wayland ?= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'no-egl', '', d)}" 48*4882a593Smuzhiyun 49*4882a593SmuzhiyunDEPENDS:append:pn-mesa-gl = " rockchip-libmali" 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/libgl ?= "mesa-gl" 52*4882a593SmuzhiyunPREFERRED_PROVIDER_virtual/mesa ?= "mesa-gl" 53*4882a593Smuzhiyun 54*4882a593SmuzhiyunPREFERRED_RPROVIDER_lib32-initd-functions = "lib32-initscripts" 55*4882a593Smuzhiyun 56*4882a593Smuzhiyunexport RK_ROOTDEV_UUID ?= "614e0000-0000-4b53-8000-1d28000054a9" 57*4882a593Smuzhiyunexport RK_PARTITION_GROW ?= "1" 58*4882a593Smuzhiyun 59*4882a593SmuzhiyunRDEPENDS:${KERNEL_PACKAGE_NAME}-base = "" 60*4882a593Smuzhiyun 61*4882a593SmuzhiyunIMAGE_FSTYPES:remove = "iso live" 62*4882a593Smuzhiyunexport RK_ROOTFS_TYPE ?= "ext4" 63*4882a593Smuzhiyun 64*4882a593SmuzhiyunIMAGE_FSTYPES:append = " ${RK_ROOTFS_TYPE} wic" 65*4882a593SmuzhiyunWKS_FILE ?= "generic-gptdisk.wks.in" 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun# Some partitons, e.g. trust, are allowed to be optional. 68*4882a593Smuzhiyundo_fixup_wks[depends] += " \ 69*4882a593Smuzhiyun virtual/kernel:do_deploy \ 70*4882a593Smuzhiyun virtual/bootloader:do_deploy \ 71*4882a593Smuzhiyun" 72*4882a593Smuzhiyundo_fixup_wks() { 73*4882a593Smuzhiyun [ -f "${WKS_FULL_PATH}" ] || return 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun IMAGES=$(grep -o "[^=]*\.img" "${WKS_FULL_PATH}") 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun for image in ${IMAGES};do 78*4882a593Smuzhiyun if [ ! -f "${DEPLOY_DIR_IMAGE}/${image}" ];then 79*4882a593Smuzhiyun echo "${image} not provided, ignoring it." 80*4882a593Smuzhiyun sed -i "/file=${image}/d" "${WKS_FULL_PATH}" 81*4882a593Smuzhiyun fi 82*4882a593Smuzhiyun done 83*4882a593Smuzhiyun} 84*4882a593Smuzhiyunaddtask do_fixup_wks after do_write_wks_template before do_image_wic 85*4882a593Smuzhiyun 86*4882a593SmuzhiyunRK_POST_ROOTFS_SCRIPTS ?= "" 87*4882a593SmuzhiyunRK_OVERLAY_DIRS ?= "" 88*4882a593SmuzhiyunBB_BASEHASH_IGNORE_VARS:append = " RK_POST_ROOTFS_SCRIPTS RK_OVERLAY_DIRS" 89*4882a593Smuzhiyun 90*4882a593SmuzhiyunROOTFS_POSTPROCESS_COMMAND:append = " do_post_rootfs;" 91*4882a593Smuzhiyundo_rootfs[depends] += "rsync-native:do_populate_sysroot" 92*4882a593Smuzhiyundo_post_rootfs() { 93*4882a593Smuzhiyun # Rockchip BSP rkwifibt drivers would use custom firmware directories 94*4882a593Smuzhiyun for dir in vendor system;do 95*4882a593Smuzhiyun firmware_dir=${IMAGE_ROOTFS}/${dir}/etc/ 96*4882a593Smuzhiyun mkdir -p ${firmware_dir} 97*4882a593Smuzhiyun ln -rsf ${IMAGE_ROOTFS}/lib/firmware ${firmware_dir} 98*4882a593Smuzhiyun done 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun for overlay in ${RK_OVERLAY_DIRS};do 101*4882a593Smuzhiyun [ -d "${overlay}" ] || continue 102*4882a593Smuzhiyun echo "Installing overlay: ${overlay}..." 103*4882a593Smuzhiyun rsync -av --chmod=u=rwX,go=rX "${overlay}/" "${IMAGE_ROOTFS}" 104*4882a593Smuzhiyun done 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun for script in ${RK_POST_ROOTFS_SCRIPTS};do 107*4882a593Smuzhiyun [ -f "${script}" ] || continue 108*4882a593Smuzhiyun echo "Running script: ${script}..." 109*4882a593Smuzhiyun cd "${script%/*}" 110*4882a593Smuzhiyun "${script}" "${IMAGE_ROOTFS}" 111*4882a593Smuzhiyun done 112*4882a593Smuzhiyun} 113*4882a593Smuzhiyun 114*4882a593SmuzhiyunIMAGE_POSTPROCESS_COMMAND:append = " link_rootfs_image;" 115*4882a593Smuzhiyunlink_rootfs_image() { 116*4882a593Smuzhiyun ln -sf "${IMAGE_LINK_NAME}.${RK_ROOTFS_TYPE}" \ 117*4882a593Smuzhiyun "${IMGDEPLOYDIR}/rootfs.img" 118*4882a593Smuzhiyun} 119*4882a593Smuzhiyun 120*4882a593SmuzhiyunIMAGE_POSTPROCESS_COMMAND:append = " gen_rkparameter;" 121*4882a593Smuzhiyungen_rkparameter() { 122*4882a593Smuzhiyun if [ ! -f "${DEPLOY_DIR_IMAGE}/loader.bin" ];then 123*4882a593Smuzhiyun echo "Skip making Rockchip parameter." 124*4882a593Smuzhiyun return 125*4882a593Smuzhiyun fi 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun IMAGE="${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.wic" 128*4882a593Smuzhiyun if [ ! -f "${IMAGE}" ];then 129*4882a593Smuzhiyun echo "${IMAGE} not found." 130*4882a593Smuzhiyun return 131*4882a593Smuzhiyun fi 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun cd "${IMGDEPLOYDIR}" 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun OUT="${IMAGE_LINK_NAME}.parameter" 136*4882a593Smuzhiyun ln -sf "${OUT}" parameter 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun echo "Generating ${OUT}..." 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun echo "# IMAGE_NAME: $(readlink ${IMAGE})" > "${OUT}" 141*4882a593Smuzhiyun echo "FIRMWARE_VER: 1.0" >> "${OUT}" 142*4882a593Smuzhiyun echo "TYPE: GPT" >> "${OUT}" 143*4882a593Smuzhiyun echo -n "CMDLINE: mtdparts=rk29xxnand:" >> "${OUT}" 144*4882a593Smuzhiyun sgdisk -p "${IMAGE}" | grep -E "^ +[0-9]" | while read line;do 145*4882a593Smuzhiyun NAME=$(echo ${line} | cut -f 7 -d ' ') 146*4882a593Smuzhiyun START=$(echo ${line} | cut -f 2 -d ' ') 147*4882a593Smuzhiyun END=$(echo ${line} | cut -f 3 -d ' ') 148*4882a593Smuzhiyun SIZE=$(expr ${END} - ${START} + 1) 149*4882a593Smuzhiyun printf "0x%08x@0x%08x(%s)," ${SIZE} ${START} ${NAME} >> "${OUT}" 150*4882a593Smuzhiyun done 151*4882a593Smuzhiyun echo >> "${OUT}" 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun if [ "$RK_PARTITION_GROW" = "1" ];then 154*4882a593Smuzhiyun sed -i "s/[^,]*\(@[^,]*\)),$/-\1:grow)/" "${OUT}" 155*4882a593Smuzhiyun fi 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun echo "uuid: rootfs=${RK_ROOTDEV_UUID}" >> "${OUT}" 158*4882a593Smuzhiyun} 159*4882a593Smuzhiyun 160*4882a593SmuzhiyunIMAGE_POSTPROCESS_COMMAND:append = " gen_rkupdateimg;" 161*4882a593Smuzhiyundo_image[depends] += "rk-binary-native:do_populate_sysroot" 162*4882a593Smuzhiyungen_rkupdateimg() { 163*4882a593Smuzhiyun if [ ! -f "${DEPLOY_DIR_IMAGE}/loader.bin" ];then 164*4882a593Smuzhiyun echo "Skip packing Rockchip update image." 165*4882a593Smuzhiyun return 166*4882a593Smuzhiyun fi 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun IMAGE="${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.wic" 169*4882a593Smuzhiyun if [ ! -f "${IMAGE}" ];then 170*4882a593Smuzhiyun echo "${IMAGE} not found." 171*4882a593Smuzhiyun return 172*4882a593Smuzhiyun fi 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun cd "${IMGDEPLOYDIR}" 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun RK_IMAGES="loader.bin uboot.env uboot.img trust.img boot.img" 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun # Create temporary symlinks, because the tool would crash with abs pathes 179*4882a593Smuzhiyun for img in ${RK_IMAGES};do 180*4882a593Smuzhiyun f="${DEPLOY_DIR_IMAGE}/${img}" 181*4882a593Smuzhiyun [ -f "${f}" ] && ln -sf "${f}" . 182*4882a593Smuzhiyun done 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun OUT="${IMAGE_LINK_NAME}.package-file" 185*4882a593Smuzhiyun ln -sf "${OUT}" package-file 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun echo "Generating ${OUT}..." 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun echo "# IMAGE_NAME: $(readlink ${IMAGE})" > "${OUT}" 190*4882a593Smuzhiyun echo "package-file package-file" >> "${OUT}" 191*4882a593Smuzhiyun echo "bootloader loader.bin" >> "${OUT}" 192*4882a593Smuzhiyun echo "parameter parameter" >> "${OUT}" 193*4882a593Smuzhiyun grep -o "([^)^:]*" parameter | tr -d "(" | while read NAME;do 194*4882a593Smuzhiyun case "${NAME}" in 195*4882a593Smuzhiyun uboot-env) IMAGE="uboot.env" ;; 196*4882a593Smuzhiyun backup) echo "backup RESERVED" >> "${OUT}"; continue ;; 197*4882a593Smuzhiyun system|system_[ab]) IMAGE="rootfs.img" ;; 198*4882a593Smuzhiyun *_a) IMAGE="${NAME%_a}.img" ;; 199*4882a593Smuzhiyun *_b) IMAGE="${NAME%_b}.img" ;; 200*4882a593Smuzhiyun *) IMAGE="${NAME}.img" ;; 201*4882a593Smuzhiyun esac 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun [ ! -r "$IMAGE" ] || echo "$NAME $IMAGE" >> "${OUT}" 204*4882a593Smuzhiyun done 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun PSEUDO_DISABLED=1 207*4882a593Smuzhiyun afptool -pack ./ update.raw.img 208*4882a593Smuzhiyun rkImageMaker -RK$(hexdump -s 21 -n 4 -e '4/1 "%c"' loader.bin | rev) \ 209*4882a593Smuzhiyun loader.bin update.raw.img "${IMAGE_LINK_NAME}.update.img" \ 210*4882a593Smuzhiyun -os_type:androidos 211*4882a593Smuzhiyun ln -sf "${IMAGE_LINK_NAME}.update.img" update.img 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun rm -rf ${RK_IMAGES} update.raw.img 214*4882a593Smuzhiyun} 215*4882a593Smuzhiyun 216*4882a593SmuzhiyunIMAGE_POSTPROCESS_COMMAND:append = " link_latest_image;" 217*4882a593Smuzhiyunlink_latest_image() { 218*4882a593Smuzhiyun rm -rf "${TOPDIR}/latest" 219*4882a593Smuzhiyun ln -sf "${DEPLOY_DIR_IMAGE}" "${TOPDIR}/latest" 220*4882a593Smuzhiyun} 221