xref: /OK3568_Linux_fs/yocto/meta-rockchip/conf/machine/include/rockchip-common.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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