1#!/bin/bash -e
2
3POST_ROOTFS_ONLY=1
4
5source "${POST_HELPER:-$(dirname "$(realpath "$0")")/../post-hooks/post-helper}"
6
7install_adbd()
8{
9	[ -n "$RK_USB_ADBD" ] || return 0
10
11	echo "Installing adbd..."
12
13	find "$TARGET_DIR" -name "*adbd*" -print0 | xargs -0 rm -rf
14
15	install -m 0755 "$RK_TOOL_DIR/armhf/adbd" "$TARGET_DIR/usr/bin/adbd"
16
17	if [ "$RK_USB_ADBD_TCP_PORT" -ne 0 ]; then
18		echo "export ADB_TCP_PORT=$RK_USB_ADBD_TCP_PORT" >> \
19			"$TARGET_DIR/etc/profile.d/adbd.sh"
20	fi
21
22	if [ -n "$RK_USB_ADBD_BASH" -a -x "$TARGET_DIR/bin/bash" ]; then
23		echo "export ADBD_SHELL=/bin/bash" >> \
24			"$TARGET_DIR/etc/profile.d/adbd.sh"
25	fi
26
27	if [ -n "$RK_USB_ADBD_PASSWORD" ]; then
28		install -m 0755 "$RK_DATA_DIR/adbd-auth" \
29			"$TARGET_DIR/usr/bin/adbd-auth"
30		sed -i "s/AUTH_PASSWORD/$(echo $RK_USB_ADBD_PASSWORD | md5sum)/g" \
31			"$TARGET_DIR/usr/bin/adbd-auth"
32	fi
33
34	if [ -r "$RK_USB_ADBD_RSA_KEY" ]; then
35		install -m 0644 "$RK_USB_ADBD_RSA_KEY" \
36			"$TARGET_DIR/etc/adbkey.pub"
37		echo "export ADBD_RSA_KEY_FILE=/etc/adbkey.pub" >> \
38			"$TARGET_DIR/etc/profile.d/adbd.sh"
39	fi
40}
41
42install_ums()
43{
44	[ -n "$RK_USB_UMS" ] || return 0
45
46	echo "Installing UMS..."
47
48	{
49		echo "export UMS_FILE=${RK_USB_UMS_FILE:-/userdata/ums_shared.img}"
50		echo "export UMS_SIZE=${RK_USB_UMS_SIZE:-256M}"
51		echo "export UMS_FSTYPE=${RK_USB_UMS_FSTYPE:-vfat}"
52		echo "export UMS_MOUNT=$([ -z "$RK_USB_UMS_MOUNT" ] || echo 1)"
53		echo "export UMS_MOUNTPOINT=${RK_USB_UMS_MOUNTPOINT:-/mnt/ums}"
54		echo "export UMS_RO=$([ -z "$RK_USB_UMS_RO" ] || echo 1)"
55	} >> "$TARGET_DIR/etc/profile.d/usbdevice.sh"
56}
57
58usb_funcs()
59{
60	{
61		echo "${RK_USB_ADBD:+adb}"
62		echo "${RK_USB_MTP:+mtp}"
63		echo "${RK_USB_ACM:+acm}"
64		echo "${RK_USB_NTB:+ntb}"
65		echo "${RK_USB_UVC:+uvc}"
66		echo "${RK_USB_UAC1:+uac1}"
67		echo "${RK_USB_UAC2:+uac2}"
68		echo "${RK_USB_HID:+hid}"
69		echo "${RK_USB_RNDIS:+rndis}"
70		echo "${RK_USB_UMS:+ums}"
71		echo "$RK_USB_EXTRA"
72	} | xargs
73}
74
75[ -z "$RK_USB_DISABLED" ] || exit 0
76
77if [ "$RK_USB_DEFAULT" -a "$POST_OS" = buildroot ]; then
78	echo -e "\e[33mKeep original USB gadget for buildroot by default\e[0m"
79	exit 0
80fi
81
82cd "$SDK_DIR"
83
84mkdir -p "$TARGET_DIR/etc" "$TARGET_DIR/lib" \
85	"$TARGET_DIR/usr/bin" "$TARGET_DIR/usr/lib"
86
87find "$TARGET_DIR/etc" "$TARGET_DIR/lib" "$TARGET_DIR/usr/bin" \
88	"$TARGET_DIR/usr/lib" -name "*usbdevice*" -print0 | xargs -0 rm -rf
89find "$TARGET_DIR/etc" -name ".usb_config" -print0 | xargs -0 rm -rf
90
91echo "USB gadget functions: $(usb_funcs)"
92mkdir -p "$TARGET_DIR/etc/profile.d"
93echo "export USB_FUNCS=\"$(usb_funcs)\"" > "$TARGET_DIR/etc/profile.d/usbdevice.sh"
94
95install_adbd
96install_ums
97
98mkdir -p "$TARGET_DIR/lib/udev/rules.d"
99install -m 0644 external/rkscript/61-usbdevice.rules \
100	"$TARGET_DIR/lib/udev/rules.d/"
101
102install -m 0755 external/rkscript/usbdevice "$TARGET_DIR/usr/bin/"
103
104echo "Installing USB services..."
105
106if [ "$POST_INIT_SYSTEMD" ]; then
107	install -m 0755 external/rkscript/usbdevice.service \
108		"$TARGET_DIR/lib/systemd/system/"
109	mkdir -p "$TARGET_DIR/etc/systemd/system/sysinit.target.wants"
110	ln -sf /lib/systemd/system/usbdevice.service \
111		"$TARGET_DIR/etc/systemd/system/sysinit.target.wants/"
112fi
113
114if [ "$POST_INIT_SYSV" ]; then
115	install -m 0755 external/rkscript/S*usbdevice \
116		"$TARGET_DIR/etc/init.d/usbdevice.sh"
117	for level in 5 4 3 2; do
118		mkdir -p "$TARGET_DIR/etc/rc${level}.d"
119		ln -sf ../init.d/usbdevice.sh \
120			"$TARGET_DIR/etc/rc${level}.d/S70usbdevice.sh"
121	done
122	for level in 0 1 6; do
123		mkdir -p "$TARGET_DIR/etc/rc${level}.d"
124		ln -sf ../init.d/usbdevice.sh \
125			"$TARGET_DIR/etc/rc${level}.d/K30usbdevice.sh"
126	done
127fi
128
129if [ "$POST_INIT_BUSYBOX" ]; then
130	install -m 0755 external/rkscript/S*usbdevice "$TARGET_DIR/etc/init.d/"
131fi
132
133mkdir -p "$TARGET_DIR/etc/usbdevice.d"
134for hook in $RK_USB_HOOKS; do
135	[ -r "$hook" ] || continue
136	echo "Installing USB hook: $hook"
137	install -m 0644 "$hook" "$TARGET_DIR/etc/usbdevice.d/"
138done
139