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