rockchip64_common.inc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. #
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
  5. #
  6. # This file is a part of the Armbian Build Framework
  7. # https://github.com/armbian/build/
  8. #
  9. enable_extension "rkbin-tools"
  10. ARCH=arm64
  11. KERNEL_IMAGE_TYPE=Image
  12. OFFSET=16
  13. BOOTSCRIPT='boot-rockchip64.cmd:boot.cmd'
  14. BOOTENV_FILE='rockchip64.txt'
  15. UBOOT_TARGET_MAP=";;idbloader.bin uboot.img trust.bin"
  16. BOOTDELAY=0
  17. OVERLAY_PREFIX='rockchip'
  18. SERIALCON=${SERIALCON:=$([ $BRANCH == "legacy" ] && echo "ttyFIQ0:1500000" || echo "ttyS2:1500000")}
  19. GOVERNOR="ondemand"
  20. ATFPATCHDIR='atf-rockchip64'
  21. BOOTPATCHDIR="${BOOTPATCHDIR:-"u-boot-rockchip64"}"
  22. PACKAGE_LIST_FAMILY="ethtool"
  23. RKBIN_DIR="$SRC/cache/sources/rkbin-tools"
  24. # Common variables:
  25. # BOOT_SCENARIO - determines which tpl (ddrbin), spl and ATF combination to use
  26. #
  27. # Different boot scenario can arrange:
  28. # * Phase 1: DDR initialization (proprietary rockchip ddrbin or u-boot TPL)
  29. # * Phase 2: Initial system and clock initialization (proprietary rockchip miniload or u-boot SPL)
  30. # * Phase 3: Arm Trusted Firmware (proprietary rockchip or mainline opensource)
  31. # * Phase 4: u-boot proper is always the mainline one
  32. #
  33. # Available options for BOOT_SCENARIO are:
  34. # - only-blobs: proprietary rockchip ddrbin, miniloader and ATF
  35. # - spl-blobs: proprietary rockchip ddrin and ATF, but uses mainline u-boot SPL in place of rockchip miniloader
  36. # - tpl-spl-blob: uses mainline u-boot TPL and SPL with proprietary rockchip ATF blob
  37. # - tpl-blob-atf-mainline: proprietary rockchip ddrbin + mainline u-boot SPL + mainline ATF
  38. # - blobless: mainline u-boot TPL + mainline u-boot SPL + mainline ATF
  39. #BOOT_SOC=`expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*'`
  40. BOOT_SOC=${BOOT_SOC:=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*' || true)}
  41. if [[ "a${BOOT_SOC}a" == "aa" ]]; then
  42. display_alert "Could not determine BOOT_SOC from BOOTCONFIG" "BOOTCONFIG: '${BOOTCONFIG}'" "warning"
  43. else
  44. display_alert "Determined BOOT_SOC from BOOTCONFIG" "BOOT_SOC: '${BOOT_SOC}'; BOOTCONFIG: '${BOOTCONFIG}'" "info"
  45. fi
  46. CPUMIN=${CPUMIN:="408000"}
  47. if [[ $BOOT_SOC == rk3399 ]]; then
  48. CPUMAX=${CPUMAX:="2016000"}
  49. elif [[ $BOOT_SOC == rk3328 || $BOOT_SOC == rk3308 ]]; then
  50. CPUMAX=${CPUMAX:="1296000"}
  51. elif [[ "${BOOT_SOC}" == rk3566 ]]; then
  52. CPUMAX=${CPUMAX:="1800000"}
  53. elif [[ "${BOOT_SOC}" == rk3568 ]]; then
  54. CPUMAX=${CPUMAX:="1992000"}
  55. fi
  56. if [[ $BOOT_SOC == rk3328 ]]; then
  57. BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}"
  58. DDR_BLOB="${DDR_BLOB:=rk33/rk3328_ddr_333MHz_v1.16.bin}"
  59. MINILOADER_BLOB='rk33/rk322xh_miniloader_v2.50.bin'
  60. BL31_BLOB='rk33/rk322xh_bl31_v1.44.elf'
  61. elif [[ $BOOT_SOC == rk3399 ]]; then
  62. BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}"
  63. if [[ $BOARD_NAME == "Tinker Board 2" ]]; then
  64. DDR_BLOB="${DDR_BLOB:=rk33/rk3399_ddr_800MHz_v1.27.bin}"
  65. else
  66. DDR_BLOB="${DDR_BLOB:=rk33/rk3399_ddr_933MHz_v1.25.bin}"
  67. fi
  68. MINILOADER_BLOB='rk33/rk3399_miniloader_v1.26.bin'
  69. BL31_BLOB='rk33/rk3399_bl31_v1.35.elf'
  70. elif [[ $BOOT_SOC == rk3399pro ]]; then
  71. BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}"
  72. DDR_BLOB="${DDR_BLOB:=rk33/rk3399pro_npu_ddr_933MHz_v1.02.bin}"
  73. MINILOADER_BLOB='rk33/rk3399pro_miniloader_v1.26.bin'
  74. BL31_BLOB='rk33/rk3399pro_bl31_v1.35.elf'
  75. elif [[ $BOOT_SOC == rk3566 ]]; then
  76. BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}"
  77. DDR_BLOB="${DDR_BLOB:=rk35/rk3566_ddr_1056MHz_v1.10.bin}"
  78. BL31_BLOB='rk35/rk3568_bl31_v1.29.elf'
  79. elif [[ $BOOT_SOC == rk3568 ]]; then
  80. BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}"
  81. DDR_BLOB="${DDR_BLOB:=rk35/rk3568_ddr_1560MHz_v1.13.bin}"
  82. BL31_BLOB='rk35/rk3568_bl31_v1.32.elf'
  83. elif [[ $BOOT_SOC == rk3588 ]]; then
  84. BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}"
  85. DDR_BLOB="${DDR_BLOB:=rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.08.bin}"
  86. BL31_BLOB='rk35/rk3588_bl31_v1.28.elf'
  87. elif [[ $BOARD == rockpi-s ]]; then
  88. BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}"
  89. BOOT_SOC=rk3308
  90. DDR_BLOB="${DDR_BLOB:=rk33/rk3308_ddr_589MHz_uart2_m1_v1.30.bin}"
  91. MINILOADER_BLOB='rk33/rk3308_miniloader_v1.22.bin'
  92. BL31_BLOB='rk33/rk3308_bl31_v2.22.elf'
  93. if [[ ${BRANCH} == legacy ]]; then
  94. DDR_BLOB='rk33/rk3308_ddr_589MHz_uart2_m0_v1.26.bin'
  95. MINILOADER_BLOB='rk33/rk3308_miniloader_sd_nand_v1.13.bin'
  96. BL31_BLOB='rk33/rk3308_bl31_v2.10.elf'
  97. fi
  98. fi
  99. case $BRANCH in
  100. current)
  101. export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel.
  102. KERNELBRANCH="branch:linux-5.15.y"
  103. KERNELPATCHDIR='rockchip64-'$BRANCH
  104. LINUXFAMILY=rockchip64
  105. LINUXCONFIG='linux-rockchip64-'$BRANCH
  106. ;;
  107. edge)
  108. KERNELPATCHDIR='rockchip64-'$BRANCH
  109. export KERNEL_MAJOR_MINOR="6.1" # Major and minor versions of this kernel.
  110. KERNELBRANCH="branch:linux-6.1.y"
  111. LINUXFAMILY=rockchip64
  112. LINUXCONFIG='linux-rockchip64-'$BRANCH
  113. ;;
  114. esac
  115. prepare_boot_configuration() {
  116. if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then
  117. UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb"
  118. ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware'
  119. ATF_COMPILER='aarch64-linux-gnu-'
  120. ATFDIR='arm-trusted-firmware'
  121. ATFBRANCH='tag:v2.6'
  122. ATF_USE_GCC='> 6.3'
  123. ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.elf"
  124. ATF_TOOLCHAIN2="arm-linux-gnueabi-:< 10.0"
  125. [[ $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]] && UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb"
  126. elif [[ $BOOT_SCENARIO == "tpl-spl-blob" ]]; then
  127. UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB idbloader.img u-boot.itb;;idbloader.img u-boot.itb"
  128. ATFSOURCE=''
  129. ATF_COMPILE='no'
  130. elif [[ $BOOT_SCENARIO == "spl-blobs" ]]; then
  131. UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB spl/u-boot-spl.bin u-boot.dtb u-boot.itb;;idbloader.img u-boot.itb"
  132. ATFSOURCE=''
  133. ATF_COMPILE='no'
  134. elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then
  135. UBOOT_TARGET_MAP="u-boot-dtb.bin;;idbloader.bin uboot.img trust.bin"
  136. ATFSOURCE=''
  137. ATF_COMPILE='no'
  138. fi
  139. if [[ $BOOT_SUPPORT_SPI == yes ]]; then
  140. if [[ $BOARD != "rock-3a" ]] && [[ $BOARD != "rock-5b" ]]; then
  141. UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb ${UBOOT_TARGET_MAP} rkspi_loader.img"
  142. else
  143. UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} rkspi_loader.img"
  144. fi
  145. fi
  146. }
  147. uboot_custom_postprocess() {
  148. [[ -z ${BOOT_SOC} ]] && exit_with_error "BOOT_SOC not defined for scenario '${BOOT_SCENARIO}' for BOARD'=${BOARD}' and BOOTCONFIG='${BOOTCONFIG}'"
  149. if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" ]]; then
  150. :
  151. elif [[ $BOOT_SCENARIO == "spl-blobs" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then
  152. # Bomb if DDR_BLOB not defined or does not exist
  153. declare SPL_BIN_PATH="${RKBIN_DIR}/${DDR_BLOB}"
  154. [[ -z ${SPL_BIN_PATH} ]] && exit_with_error "DDR_BLOB not defined for scenario ${BOOT_SCENARIO}"
  155. [[ ! -f "${SPL_BIN_PATH}" ]] && exit_with_error "DDR_BLOB ${SPL_BIN_PATH} does not exist for scenario ${BOOT_SCENARIO}"
  156. display_alert "mkimage for '${BOOT_SOC}' for scenario ${BOOT_SCENARIO}" "SPL_BIN_PATH: ${SPL_BIN_PATH}" "debug"
  157. run_host_command_logged tools/mkimage -n "${BOOT_SOC}" -T rksd -d "${SPL_BIN_PATH}:spl/u-boot-spl.bin" idbloader.img
  158. elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then
  159. local tempfile=$(mktemp)
  160. run_host_command_logged tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin
  161. cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin
  162. run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000
  163. run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini
  164. else
  165. exit_with_error "Unsupported u-boot processing configuration!"
  166. fi
  167. if [[ $BOOT_SUPPORT_SPI == yes ]]; then
  168. if [[ $BOARD == "rock-3a" ]] || [[ $BOARD == "rock-5b" ]] || [[ $BOARD == "orangepi5" ]]; then
  169. dd if=/dev/zero of=rkspi_loader.img bs=1M count=0 seek=16
  170. /sbin/parted -s rkspi_loader.img mklabel gpt
  171. /sbin/parted -s rkspi_loader.img unit s mkpart idbloader 64 7167
  172. /sbin/parted -s rkspi_loader.img unit s mkpart vnvm 7168 7679
  173. /sbin/parted -s rkspi_loader.img unit s mkpart reserved_space 7680 8063
  174. /sbin/parted -s rkspi_loader.img unit s mkpart reserved1 8064 8127
  175. /sbin/parted -s rkspi_loader.img unit s mkpart uboot_env 8128 8191
  176. /sbin/parted -s rkspi_loader.img unit s mkpart reserved2 8192 16383
  177. /sbin/parted -s rkspi_loader.img unit s mkpart uboot 16384 32734
  178. dd if=idbloader.img of=rkspi_loader.img seek=64 conv=notrunc
  179. dd if=u-boot.itb of=rkspi_loader.img seek=16384 conv=notrunc
  180. else
  181. tools/mkimage -n $BOOT_SOC -T rkspi -d tpl/u-boot-tpl.bin:spl/u-boot-spl.bin rkspi_tpl_spl.img
  182. dd if=/dev/zero of=rkspi_loader.img count=8128 status=none
  183. dd if=rkspi_tpl_spl.img of=rkspi_loader.img conv=notrunc status=none
  184. dd if=u-boot.itb of=rkspi_loader.img seek=768 conv=notrunc status=none
  185. fi
  186. fi
  187. }
  188. write_uboot_platform() {
  189. # This is run board-side too, so account for the non-existance of run_host_command_logged
  190. local logging_prelude=""
  191. [[ $(type -t run_host_command_logged) == function ]] && logging_prelude="run_host_command_logged"
  192. if [[ -f $1/rksd_loader.img ]]; then # legacy rk3399 loader
  193. ${logging_prelude} dd if=$1/rksd_loader.img of=$2 seek=64 conv=notrunc status=none
  194. elif [[ -f $1/u-boot.itb ]]; then # $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob"
  195. ${logging_prelude} dd if=$1/idbloader.img of=$2 seek=64 conv=notrunc status=none
  196. ${logging_prelude} dd if=$1/u-boot.itb of=$2 seek=16384 conv=notrunc status=none
  197. elif [[ -f $1/uboot.img ]]; then # $BOOT_SCENARIO == "only-blobs"
  198. ${logging_prelude} dd if=$1/idbloader.bin of=$2 seek=64 conv=notrunc status=none
  199. ${logging_prelude} dd if=$1/uboot.img of=$2 seek=16384 conv=notrunc status=none
  200. ${logging_prelude} dd if=$1/trust.bin of=$2 seek=24576 conv=notrunc status=none
  201. else
  202. echo "Unsupported u-boot processing configuration!"
  203. exit 1
  204. fi
  205. }
  206. write_uboot_platform_mtd() {
  207. if [[ -f $1/rkspi_loader.img ]]; then
  208. dd if=$1/rkspi_loader.img of=$2 conv=notrunc status=none > /dev/null 2>&1
  209. else
  210. echo "SPI u-boot image not found!"
  211. exit 1
  212. fi
  213. }
  214. setup_write_uboot_platform() {
  215. if grep -q "ubootpart" /proc/cmdline; then
  216. local tmp=$(cat /proc/cmdline)
  217. tmp="${tmp##*ubootpart=}"
  218. tmp="${tmp%% *}"
  219. [[ -n $tmp ]] && local part=$(findfs PARTUUID=$tmp 2> /dev/null)
  220. [[ -n $part ]] && local dev=$(lsblk -n -o PKNAME $part 2> /dev/null)
  221. [[ -n $dev ]] && DEVICE="/dev/$dev"
  222. fi
  223. }
  224. family_tweaks() {
  225. if [[ $BOARD == z28pro ]]; then
  226. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable z28pro-bluetooth.service >/dev/null 2>&1"
  227. elif [[ $BOARD == nanopi-r2s || $BOARD == nanopi-r2c || $BOARD == orangepi-r1plus ]]; then
  228. # rename USB based network to lan0
  229. mkdir -p $SDCARD/etc/udev/rules.d/
  230. echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8152", KERNEL=="eth1", NAME="lan0"' > $SDCARD/etc/udev/rules.d/70-rename-lan.rules
  231. elif [[ $BOARD == helios64 ]]; then
  232. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable helios64-heartbeat-led.service >/dev/null 2>&1"
  233. elif [[ -f $SDCARD/lib/systemd/system/rk3399-bluetooth.service ]]; then
  234. # install and enable Bluetooth
  235. chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools"
  236. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable rk3399-bluetooth.service >/dev/null 2>&1"
  237. elif [[ -f $SDCARD/lib/systemd/system/sprd-bluetooth.service ]]; then
  238. # install and enable Bluetooth
  239. chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools"
  240. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable sprd-bluetooth.service >/dev/null 2>&1"
  241. fi
  242. if [[ -f $SDCARD/lib/systemd/system/orangepi5-usb2-init.service ]]; then
  243. # enable usb2 init service
  244. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable orangepi5-usb2-init.service >/dev/null 2>&1"
  245. fi
  246. if [[ $BOARD == nanopim4* ]]; then
  247. # enable fan support
  248. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable nanopim4-pwm-fan.service >/dev/null 2>&1"
  249. fi
  250. if [[ $BOARD == pinebook-pro ]]; then
  251. chroot $SDCARD /bin/bash -c "echo SuspendState=freeze >> /etc/systemd/sleep.conf"
  252. chroot $SDCARD /bin/bash -c "echo HandlePowerKey=ignore >> /etc/systemd/login.d"
  253. fi
  254. if [[ $BOARD == station* ]]; then
  255. cp -R $SRC/packages/blobs/rtl8723bt_fw/* $SDCARD/lib/firmware/rtl_bt/
  256. cp -R $SRC/packages/blobs/station/firmware/* $SDCARD/lib/firmware/
  257. if [[ $BRANCH == legacy && ($BOARD == station-m1) ]]; then
  258. install -m 755 $SRC/packages/bsp/rk3328/m1/rtk_hciattach $SDCARD/usr/bin/rtk_hciattach
  259. sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local
  260. echo "su -c '/usr/bin/rtk_hciattach -n -s 115200 /dev/ttyS2 rtk_h5 &'" >> $SDCARD/etc/rc.local
  261. echo "exit 0" >> $SDCARD/etc/rc.local
  262. fi
  263. if [[ $BRANCH == legacy && ($BOARD == station-m3) ]]; then
  264. install -m 755 $SRC/packages/blobs/station/firefly_fan_control $SDCARD/usr/bin/firefly_fan_control
  265. install -m 755 $SRC/packages/blobs/station/firefly-fan-init $SDCARD/usr/bin/firefly-fan-init
  266. install -m 755 $SRC/packages/blobs/station/firefly-fan.service $SDCARD/usr/lib/systemd/system/firefly-fan.service
  267. chroot $SDCARD /bin/bash -c "systemctl --no-reload enable firefly-fan.service >/dev/null 2>&1"
  268. fi
  269. fi
  270. if [[ $BOARD == khadas-edge2 ]]; then
  271. cp -R $SRC/packages/blobs/station/firmware/* $SDCARD/lib/firmware/
  272. fi
  273. if [[ $BOARD == jetson-nano ]]; then
  274. install -m 755 $SRC/packages/blobs/jetson/jetson.sh $SDCARD/etc/initramfs-tools/hooks/jetson.sh
  275. if [[ $BRANCH == legacy ]]; then
  276. install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware
  277. install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda
  278. install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf
  279. install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrasndt210ref $SDCARD/etc/asound.conf.tegrasndt210ref
  280. install -m 755 $SRC/packages/blobs/jetson/tegra-hda.conf $SDCARD/usr/share/alsa/cards/tegra-hda.conf
  281. install -m 755 $SRC/packages/blobs/jetson/tegra-snd-t210r.conf $SDCARD/usr/share/alsa/cards/tegra-snd-t210r.conf
  282. sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local
  283. echo "su -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'" >> $SDCARD/etc/rc.local
  284. echo "exit 0" >> $SDCARD/etc/rc.local
  285. else
  286. cp -R $SRC/packages/blobs/jetson/firmware/* $SDCARD/lib/firmware/
  287. fi
  288. fi
  289. }
  290. family_tweaks_bsp() {
  291. if [[ $BOOTCONFIG == *3328* ]] && [[ $BRANCH != legacy ]]; then
  292. mkdir -p "$destination"/etc/X11/xorg.conf.d
  293. cat <<- EOF > "$destination"/etc/X11/xorg.conf.d/02-driver.conf
  294. # set fbdev as default driver.
  295. Section "Device"
  296. Identifier "NOGPU"
  297. Driver "fbdev"
  298. EndSection
  299. EOF
  300. fi
  301. if [[ $BOARD == clockworkpi-a06 ]]; then
  302. # rotate screen & disable dpms
  303. mkdir -p "$destination"/etc/X11/xorg.conf.d
  304. cat <<- EOF > "$destination"/etc/X11/xorg.conf.d/10-monitor.conf
  305. # set monitor
  306. Section "Monitor"
  307. Identifier "DSI-1"
  308. Option "Rotate" "right"
  309. Option "DPMS" "false"
  310. EndSection
  311. Section "ServerLayout"
  312. Identifier "ServerLayout0"
  313. Option "BlankTime" "0"
  314. Option "StandbyTime" "0"
  315. Option "SuspendTime" "0"
  316. Option "OffTime" "0"
  317. EndSection
  318. EOF
  319. # fan support
  320. install -Dm644 $SRC/packages/bsp/clockworkpi-a06/temp_fan_daemon_a06.py $destination/usr/share/clockworkpi-a06-fan-daemon/bin/temp_fan_daemon_a06.py
  321. cp $SRC/packages/bsp/clockworkpi-a06/clockworkpi-a06-fan-daemon.service $destination/lib/systemd/system/
  322. # alsa-ucm-conf profile for DevTerm A06
  323. mkdir -p $destination/usr/share/alsa/ucm2/Rockchip/es8388
  324. install -Dm644 $SRC/packages/bsp/clockworkpi-a06/es8388.conf $destination/usr/share/alsa/ucm2/Rockchip/es8388/es8388.conf
  325. install -Dm644 $SRC/packages/bsp/clockworkpi-a06/HiFi.conf $destination/usr/share/alsa/ucm2/Rockchip/es8388/HiFi.conf
  326. mkdir -p $destination/usr/share/alsa/ucm2/conf.d/simple-card
  327. ln -sfv /usr/share/alsa/ucm2/Rockchip/es8388/es8388.conf \
  328. $destination/usr/share/alsa/ucm2/conf.d/simple-card/rockchip,es8388-codec.conf
  329. fi
  330. if [[ $BOARD == z28pro ]]; then
  331. mkdir -p $destination/usr/local/bin
  332. # Bluetooth for Z28 PRO
  333. install -m 755 $SRC/packages/bsp/rk3328/z28pro/8822b_hciattach $destination/usr/bin
  334. install -m 755 $SRC/packages/bsp/rk3328/z28pro/start_bt.sh $destination/usr/local/bin
  335. cp $SRC/packages/bsp/rk3328/z28pro/z28pro-bluetooth.service $destination/lib/systemd/system/
  336. elif [[ $BRANCH == legacy && ($BOARD == rockpi-4[bc] || $BOARD == nanop*4* || $BOARD == orangepi* || $BOARD == firefly*) ]]; then
  337. # Bluetooth for most of others (custom patchram is needed only in legacy)
  338. install -m 755 $SRC/packages/bsp/rk3399/brcm_patchram_plus_rk3399 $destination/usr/bin
  339. cp $SRC/packages/bsp/rk3399/rk3399-bluetooth.service $destination/lib/systemd/system/
  340. if [[ $BOARD == nanop*4* || $BOARD == firefly* || $BOARD == orangepi-rk3399 ]]; then
  341. sed -i s%BCM4345C5%BCM4356A2%g $destination/lib/systemd/system/rk3399-bluetooth.service
  342. fi
  343. fi
  344. if [[ $BOARD == orangepi4-lts ]]; then
  345. # Bluetooth on orangepi 4 LTS board is handled by a Spreadtrum (sprd) chip and requires
  346. # a custom hciattach_opi binary, plus a systemd service to run it at boot time
  347. install -m 755 $SRC/packages/bsp/rk3399/hciattach_opi $destination/usr/bin
  348. cp $SRC/packages/bsp/rk3399/sprd-bluetooth.service $destination/lib/systemd/system/
  349. fi
  350. if [[ $BOARD == nanopim4* ]]; then
  351. # Fan support
  352. cp $SRC/packages/bsp/nanopim4/nanopim4-pwm-fan.service $destination/lib/systemd/system/
  353. install -m 755 $SRC/packages/bsp/nanopim4/nanopim4-pwm-fan.sh $destination/usr/bin/nanopim4-pwm-fan.sh
  354. fi
  355. if [[ $BOARD == helios64 ]]; then
  356. mkdir -p $destination/etc/udev/rules.d/
  357. mkdir -p $destination/etc/systemd/system/fancontrol.service.d/
  358. mkdir -p $destination/lib/systemd/system/
  359. mkdir -p $destination/lib/systemd/system-shutdown/
  360. cp $SRC/packages/bsp/helios64/50-usb-realtek-net.rules $destination/etc/udev/rules.d/
  361. cp $SRC/packages/bsp/helios64/70-keep-usb-lan-as-eth1.rules $destination/etc/udev/rules.d/
  362. cp $SRC/packages/bsp/helios64/90-helios64-ups.rules $destination/etc/udev/rules.d/
  363. cp $SRC/packages/bsp/helios64/asound.conf $destination/etc/
  364. install -m 755 $SRC/packages/bsp/helios64/disable_auto_poweron $destination/lib/systemd/system-shutdown/
  365. ### Fancontrol tweaks
  366. # copy hwmon rules to fix device mapping
  367. # changed to only use one file regardless of branch
  368. install -m 644 $SRC/packages/bsp/helios64/90-helios64-hwmon.rules $destination/etc/udev/rules.d/
  369. install -m 644 $SRC/packages/bsp/helios64/fancontrol.service.pid-override $destination/etc/systemd/system/fancontrol.service.d/pid.conf
  370. # copy fancontrol config
  371. install -m 644 $SRC/packages/bsp/helios64/fancontrol.conf $destination/etc/fancontrol
  372. # LED tweak
  373. if [[ $BRANCH == legacy ]]; then
  374. install -m 644 $SRC/packages/bsp/helios64/helios64-heartbeat-led-legacy.service $destination/etc/systemd/system/helios64-heartbeat-led.service
  375. else
  376. install -m 644 $SRC/packages/bsp/helios64/helios64-heartbeat-led.service $destination/etc/systemd/system/
  377. fi
  378. # UPS service
  379. cp $SRC/packages/bsp/helios64/helios64-ups.service $destination/lib/systemd/system/
  380. cp $SRC/packages/bsp/helios64/helios64-ups.timer $destination/lib/systemd/system/
  381. install -m 755 $SRC/packages/bsp/helios64/helios64-ups.sh $destination/usr/bin/helios64-ups.sh
  382. fi
  383. if [[ $BOARD == rk3318-box ]]; then
  384. # Optional board dtbo selection script
  385. mkdir -p $destination/usr/local/bin
  386. install -m 755 $SRC/packages/bsp/rk3318/rk3318-config $destination/usr/sbin
  387. fi
  388. if [[ $BOARD == pinebook-pro ]]; then
  389. # special keys
  390. mkdir -p "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
  391. cp $SRC/packages/bsp/pinebook-pro/pointers.xml "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/
  392. # touchpad and keyboard tweaks
  393. mkdir -p "${destination}"/etc/X11/xorg.conf.d/
  394. # from https://github.com/ayufan-rock64/linux-package/tree/master/root-pinebookpro
  395. cp "${SRC}"/packages/bsp/pinebook-pro/40-pinebookpro-touchpad.conf "${destination}"/etc/X11/xorg.conf.d/
  396. # keyboard hwdb
  397. mkdir -p "${destination}"/etc/udev/hwdb.d/
  398. cp "${SRC}"/packages/bsp/pinebook-pro/10-usb-kbd.hwdb "${destination}"/etc/udev/hwdb.d/
  399. fi
  400. # Graphics and media
  401. mkdir -p $destination/etc/udev/rules.d
  402. cp $SRC/packages/bsp/rk3399/50-mali.rules $destination/etc/udev/rules.d/
  403. cp $SRC/packages/bsp/rk3399/50-rk3399-vpu.rules $destination/etc/udev/rules.d/
  404. mkdir -p $destination/etc/sysfs.d
  405. cp $SRC/packages/bsp/rk3399/20-gpu-governor.conf $destination/etc/sysfs.d/
  406. }