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