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