Rockpi4 支援不同種類的OS。以下為編譯 Debian、Yocto 以及 Android OS 的過程記錄。
1. Debian
下載 Source Code。
$ git clone -b master https://github.com/radxa/rockchip-bsp.git
$ cd rockchip-bsp
$ git submodule init
$ git submodule update --progress
記得 submodule update 要加上--progress 。因為 update 的過程實在有夠久,久到懷疑人生。沒有加上 progress 參數,你不知道他已經跑到哪裡了。
以後想要 Update Source Code 的話,只要下以下的命令。
$ cd rockchip-bsp
$ git checkout master
$ git fetch origin
$ git rebase origin/master
$ git submodule update --progress
下載 Toolchain。
$ cd rockchip-bsp
$ wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
$ sudo tar xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
下載安裝其他必要元件。
$ sudo apt-get install gcc-aarch64-linux-gnu device-tree-compiler libncurses5 libncurses5-dev build-essential libssl-dev mtools
$ sudo apt-get install bc python dosfstools
編譯 u-boot。
$ cd rockchip-bsp
$ export CROSS_COMPILE=${PWD}/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
$ export PATH=${PWD}/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/:$PATH
$ ./build/mk-uboot.sh <board_type>
其中 <board_type> 根據你想要編譯的板子下不同的參數。如 rockpi4a 或是 rockpi4b 。
編譯 kernel。
$ cd rockchip-bsp
$ export CROSS_COMPILE=${PWD}/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
$ export PATH=${PWD}/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/:$PATH
$ ./build/mk-kernel.sh <board_type>
編譯 rootfs。
$ export ARCH=arm64
$ cd rockchip-bsp
$ cd rootfs
$ sudo apt-get install binfmt-support qemu-user-static cpio gdisk
$ sudo dpkg -i ubuntu-build-service/packages/*
$ sudo apt-get install -f
$ RELEASE=buster TARGET=desktop ARCH=arm64 ./mk-base-debian.sh
$ RELEASE=buster ARCH=arm64 ./mk-rootfs.sh
$ ./mk-image.sh
將u-boot、kernel 和 rootfs 合併起來,製作成 system.img 。
$ build/mk-image.sh -c rk3399 -b rockpi4 -t system -r rootfs/linaro-rootfs.img
可以在 out 底下看到 system.img。
2. Yocto
下載Source Code。
$ mkdir yocto
$ cd yocto
$ git clone git://git.yoctoproject.org/poky -b zeus
$ cd poky
$ git clone git://git.openembedded.org/meta-openembedded.git -b zeus
下載 radax 相關的編譯檔案。
$ git clone https://github.com/radxa/meta-radxa.git -b zeus
設定所要編譯的板子。
$ cd poky
$ source oe-init-build-env
$ cd ..
$ cp meta-radxa/conf/bblayers.conf.sample build/conf/bblayers.conf
$ cp meta-radxa/conf/local.conf.sample build/conf/local.conf
編輯 build/conf/local.conf 。根據你要支援的板子,將相對應的設定去掉註釋 。例如要支援 rockpi4a ,就在檔案中找到下列所示的設定,去掉其註釋。
MACHINE ?= "rockpi-4a-rk3399"
去掉以下註釋以支援 deb 系統。
PACKAGE_CLASSES ?= "package_deb"
加上以下設定以支援平行編譯。
BB_NUMBER_THREADS = "N"
PARALLEL_MAKE = "-j N"
其中 N 改為你想要 Yocto 執行的平行編譯個數。
編譯 Image。
$ cd yocto/poky
$ source oe-init-build-env
$ bitbake -k radxa-desktop-image
3. Android
根據 Android 官網 下載所需要的套件。以 Ubuntu 18.04 為例,需安裝以下套件。
$ sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
下載 repo。
$ mkdir rockpi4-android
$ cd rockpi4-android
$ wget 'https://storage.googleapis.com/git-repo-downloads/repo'
$ sudo chmod +x repo
下載 Source Code。
$ cd rockpi4-android
$ ./repo init -u https://github.com/radxa/manifests.git -b Android11_Radxa_rk10.1 -m rockchip-r-release.xml
$ ./repo sync -d --no-tags -jN
其中 N 為你想要的平行下載數目。這個也是等到懷疑人生,只能多點耐性了。
先編譯 u-boot 。
$ cd rockpi4-android/u-boot
$ make clean
$ make mrproper
$ make distclean
#if build Rock PI 4AB
$./make.sh rockpi4b
#if build Rock PI 4C
$ ./make.sh rockpi4c
再來編譯 kernel 。
$ cd rockpi4-androidkernel
$ ADDON_ARGS="CC=../prebuilts/clang/host/linux-x86/clang-r383902b/bin/clang LD=../prebuilts/clang/host/linux-x86/clang-r383902b/bin/ld.lld"
$ make clean
官網上的 Toolchain 是用 Android 自帶的 clang 。但我這邊編譯起來會有問題,所以我就用編譯Debian時下載的 Toolchain 。因此我個人的 ADDON_ARGS 為:
ADDON_ARGS="CC=/where/your/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc LD=
/where/your/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld"
開始編譯 kernel 。
#if build Rock PI 4AB
$ make $ADDON_ARGS ARCH=arm64 rockchip_defconfig android-11.config rockpi_4b.config
$ make $ADDON_ARGS ARCH=arm64 rk3399-rockpi-4b.img -jN
#if build Rock PI 4C
$ make $ADDON_ARGS ARCH=arm64 rockchip_defconfig android-11.config rockpi_4c.config
$ make $ADDON_ARGS ARCH=arm64 rk3399-rockpi-4c.img -jN
其中 N 為你想要的平行編譯的數目。
初始化 Android 編輯環境。
$ cd rockpi4-android
$ source build/envsetup.sh
$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. PX30_Android11-user
2. PX30_Android11-userdebug
3. aosp_arm-eng
4. aosp_arm64-eng
5. aosp_blueline_car-userdebug
6. aosp_bonito_car-userdebug
7. aosp_car_arm-userdebug
8. aosp_car_arm64-userdebug
9. aosp_car_x86-userdebug
10. aosp_car_x86_64-userdebug
11. aosp_coral_car-userdebug
12. aosp_crosshatch_car-userdebug
13. aosp_flame_car-userdebug
14. aosp_x86-eng
15. aosp_x86_64-eng
16. car_x86_64-userdebug
17. qemu_trusty_arm64-userdebug
18. rk3126c_rgo-user
19. rk3126c_rgo-userdebug
20. rk3288_Android10-user
21. rk3288_Android10-userdebug
22. rk3288_Android11-user
23. rk3288_Android11-userdebug
24. rk3326_pie-user
25. rk3326_pie-userdebug
26. rk3326_q-user
27. rk3326_q-userdebug
28. rk3326_r-user
29. rk3326_r-userdebug
30. rk3326_rgo-user
31. rk3326_rgo-userdebug
32. rk3328_atv-user
33. rk3328_atv-userdebug
34. rk3328_box-user
35. rk3328_box-userdebug
36. rk3328_box_32-user
37. rk3328_box_32-userdebug
38. rk3399_Android10-user
39. rk3399_Android10-userdebug
40. rk3399_Android11-user
41. rk3399_Android11-userdebug
42. rk3399_ROCKPI4B_Android11-user
43. rk3399_ROCKPI4B_Android11-userdebug
44. rk3399_ROCKPI4C_Android11-user
45. rk3399_ROCKPI4C_Android11-userdebug
46. rk3399_ROCKPIFuhai_Android11-user
47. rk3399_ROCKPIFuhai_Android11-userdebug
48. rk3399_atv-user
49. rk3399_atv-userdebug
50. rk3399_mid-user
51. rk3399_mid-userdebug
52. rk3566_32bit-user
53. rk3566_32bit-userdebug
54. rk3566_eink-user
55. rk3566_eink-userdebug
56. rk3566_einkw6-user
57. rk3566_einkw6-userdebug
58. rk3566_r-user
59. rk3566_r-userdebug
60. rk3566_rgo-user
61. rk3566_rgo-userdebug
62. rk3566_rock_cm3_r-user
63. rk3566_rock_cm3_r-userdebug
64. rk3568_r-user
65. rk3568_r-userdebug
66. rk3568_rock_3a_r-user
67. rk3568_rock_3a_r-userdebug
68. rk356x_box-user
69. rk356x_box-userdebug
70. rk356x_box_32-user
71. rk356x_box_32-userdebug
72. rk356x_rock_3a_box-user
73. rk356x_rock_3a_box-userdebug
74. uml-userdebug
Which would you like? [aosp_arm-eng]
選擇你想要支援的板子。例如想要支援Rockpi4A Debug 版的話就選43。
編譯。
其中 N 為你想要的平行編譯的數目。
參考連結:
https://wiki.radxa.com/Rockpi4/dev/Debian
https://wiki.radxa.com/Yocto-layer-for-radxa-boards
https://wiki.radxa.com/Rockpi4/rockpi-android11