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。

編譯。

$ make -jN

其中 N 為你想要的平行編譯的數目。

參考連結:

https://wiki.radxa.com/Rockpi4/dev/Debian

https://wiki.radxa.com/Yocto-layer-for-radxa-boards

https://wiki.radxa.com/Rockpi4/rockpi-android11

 

arrow
arrow
    創作者介紹
    創作者 阿轟師 的頭像
    阿轟師

    阿轟師與他的快樂夥伴

    阿轟師 發表在 痞客邦 留言(0) 人氣()