瑞芯微rk356x板子快速上手

語言: CN / TW / HK

點選左上方藍色“ 一口Linux ”,選擇“ 設為星標

第一時間看乾貨文章  

【乾貨】 嵌入式驅動工程師學習路線

【乾貨】 Linux嵌入式知識點-思維導圖

1

緣巧合最近接觸了一下瑞芯微的 rk3568 平臺,從拿到sdk到完整編譯跑起來,遇到了一些坑,分享給大家。

rk3568

瑞芯微出品的RK3568是一款定位中高階的通用型SoC,採用22nm先進製程工藝,主要面向 工業網際網路、HMI、NVR儲存、車載中控、工業閘道器 等領域。

RK3568兼具CPU、GPU、NPU、VPU於一身,具體效能如下:

CPU

四核64位Cortex-A55

主頻最高2.0GHz

22nm先進工藝

GPU

Mail-G52

支援OpenGLES 1.1/2.0/3.2,OpenCL2.0,Vulkan1.1

內嵌高效能2D加速硬體

NPU

整合高效能AI加速器RKNN NPU

支援1Tops算力

支援Caffe/TensorFlow等主流架構模型的一鍵切換

VPU

硬解碼H.264 4K@30fps、H.265 4K@60fps

硬編碼H.264/H.265 1080P@60fps

8M ISP,支援HDR

一、編譯環境要求

  1. 400G+硬碟

  2. 32G記憶體

  3. ubuntu16.04

二、編譯前準備

0)開發板型號

本文采用公板,引數如下

soc  : rk3568   
board: EVB1-DDR4-V10
軟 件:Android 11
Linux:4.19.232

1)安裝第三方編譯工具

有一些交叉編譯工具sdk中已經全部包含,有一些第三方工具需要自己安裝,

物理隔離的開發環境,可能會有一些麻煩,

我是自己製作了一個虛擬機器,

然後確認編譯沒問題了,才把環境再匯入,

讀者根據自己情況來調整,

安裝的庫:

cp mkimage.sh kernel/
sudo apt-get install openjdk-8-jdk
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
sudo apt-get install lib32ncurses5-dev libx11-dev lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip python-pyelftools
sudo apt-get install python3-pyelftools device-tree-compiler libfdt-dev libfdt1
sudo apt-get install libssl-dev liblz4-tool python-dev

x11protocore-dev需要下載後再安裝

下載地址:

https://launchpadlibrarian.net/340529646/x11proto-core-dev_7.0.31-1~ubuntu16.04.2_all.deb

通過下面命令:

sudo dpkg -i x11proto-core-dev_7.0.31-1_ubuntu16.04.2_all.deb

2)設定adb路徑

【如果windows已經支援adb命令,該步驟可以省略】

3)安裝USB驅動DriverAssitant_v5.1.1

DriverAssitant_v5.1.1安裝包檔案路徑如下:

rk_android11.0_sdk_220718\RKTools\windows\DriverAssitant_v5.1.1.zip

安裝下載映象的USB 驅動

按住音量+ 按鍵,然後開啟電源,就可以在裝置管理器看到如下裝置:

三、快速編譯命令

官方給的文件還算詳細,

對於剛接觸瑞芯微平臺的工程師,可能還是希望直接使用幾個常用命令,而不時去看冗繁的手冊。

至少我就是這樣。

我把操作的常用命令都整理了一下。

0. 第一次拿到sdk操作步驟

一口君拿到的是sdk,直接解壓縮即可

【切記虛擬機器硬碟留夠400G以上空間】

cat rk_android11.0_sdk_xxxxx.tgz | tar -zx 
cd rk_android11.0_sdk_xxxxx/
.repo/repo/repo sync -l

聯網狀態下可以輸入下面命令【實測,即使沒有網路,不輸入這個命令也沒影響】

.repo/repo/repo sync -c

1. 一鍵整體編譯

設定環境變數:

source build/envsetup.sh
lunch rk3568_r-userdebug

編譯:

./build.sh -AUCKu

編譯到裝置樹的時候會要求選擇電壓,

一共 6 個值需要設定,

具體值需要檢視裝置樹檔案中IO Power Domain的資訊

vim arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi +1538

根據裝置樹的電壓來設定 ,否則出錯。

編譯過的映象位於以下目錄:

rk_android11.0_sdk_220718\rockdev\Image-rk3568_r

2. 單獨編譯核心

單獨編譯核心之前,必須要 先整體編譯通過

source build/envsetup.sh
lunch rk3568_r-userdebug
cd kernel
make ARCH=arm64 rockchip_linux_defconfig rk356x_evb.config android-11.config

上面3個只需要執行一次,後面修改了核心源程式,只需要執行下面一條命令即可

make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3568_r/boot.img rk3568-evb1-ddr4-v10.img -j24

編譯完畢,直接燒錄kernel目錄下的

kernel/boot.img

【燒寫時請先載入分割槽表(parameter.txt)】

需要開啟或者關閉某個核心模組,修改下面檔案,將對應模組的巨集開關設定為y即可

rockchip_linux_defconfig

修改完畢

必須重新執行以下命令:

make ARCH=arm64 rockchip_linux_defconfig rk356x_evb.config android-11.config

【瑞芯微將編譯過的核心和裝置樹、開機log等打包在了boot.img,修改了核心和燒錄改檔案即可】

3. 單獨編譯安卓

source build/envsetup.sh
lunch rk3568_r-userdebug
./build.sh -A

編譯完畢,燒錄

rockdev/Image-rk3568_r/super.img

4. 編譯裝置樹

source build/envsetup.sh
lunch rk3568_r-userdebug
./build.sh -KAp

編譯完畢,除了燒錄 dtbo.img ,還必須燒錄 boot.img

rockdev/Image-rk3568_r/boot.img
rockdev/Image-rk3568_r/dtbo.img

此處不知道什麼原因,不用這個命令編譯,看到的裝置樹檔案日期總是不對 有確定知道的老鐵可以給我留言

四、韌體燒錄

1)燒錄工具AndroidTool

Android11的USB驅動DriverAssitant需要更新到V5.1.1版本。

解壓雙擊安裝即可。

Windows燒寫工具AndroidTool_Release_v2.93:

RKTools/windows/AndroidTool/AndroidTool_Release_v2.93.zip

2)選擇分割槽表

燒錄之前,需要匯入分割槽表,

右擊空白處,選擇匯入配置:

修改顯示檔案型別為 All File(* .*

然後找到sdk檔案目錄的parameters.txt

3)選擇映象並燒錄

按住音量+ 按鍵,然後開啟電源上電,出現 發現一個LOADER裝置 即可

選擇對應的映象,點選 執行 即可燒錄img

【此次只用到7 9 15】

五、遇到的問題

1. 編譯不過去

pointer-constant -Wno-deprecated-anon-enum-enum-conversion -Wno-deprecated-enum-enum-conversion -Wno-string-compare -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-pessimizing-move -MD -MF 'out/soong/.intermediates/hardware/interfaces/radio/1.5/[email protected]/android_vendor.30_arm_armv8-2a_cortex-a55_static/obj/.intermediates/hardware/interfaces/radio/1.5/[email protected]_genc++/gen/android/hardware/radio/1.5/RadioIndicationAll.o'.d -o 'out/soong/.intermediates/hardware/interfaces/radio/1.5/[email protected]/android_vendor.30_arm_armv8-2a_cortex-a55_static/obj/.intermediates/hardware/interfaces/radio/1.5/[email protected]_genc++/gen/android/hardware/radio/1.5/RadioIndicationAll.o' 'out/soong/.intermediates/hardware/interfaces/radio/1.5/[email protected]_genc++/gen/android/hardware/radio/1.5/RadioIndicationAll.cpp'
07:03:22 ninja failed with: exit status 1

#### failed to build some targets (10:10 (mm:ss)) ####

Build android failed!

解決方案:

升級記憶體條到32G,調整虛擬機器vmware記憶體

2. 瑞芯微ethernet不能使用

公版有2個以太口,其中1個預設是eth0,一個預設是eth1,

網口連線到家用無線路由器,經測試,

  1. 自帶設定ethernet的程式,可以設定靜態地址到eth0,

  2. 但是無法通過dhcp動態獲取IP地址,

  3. 無法ping通閘道器192.168.0.1

修改1:

修改如下檔案

vim frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java +484

修改程式碼如下:

修改2:

修改裝置樹檔案:

vim arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi +1538
1541 1543行修改為1.8v

使用網路測試APP,測試網路,可以ping通閘道器: 強烈推薦這塊用於在手機上測試的APP

修改說明

由廠商提供的電路圖可知:IO Power Domain Map IO4、 IO6的電壓應該是1.8V

同時文件《Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf》 也有相關說明: 【其他平臺沒有遇遇到類似操作,被坑了將近一週】

六、歡迎大家一起學習進步

後續一口君還會陸續更新瑞芯微相關的一些學習心得,

分享到一口君的瑞芯微粉絲群,

有興趣的朋友,可以加我:yikoupeng

end

一口Linux 

關注,回覆【 1024 】海量Linux資料贈送

精彩文章合集

文章推薦

【專輯】 ARM

【專輯】 粉絲問答

【專輯】 所有原創

專輯 linux 入門

專輯 計算機網路

專輯 Linux驅動

【乾貨】 嵌入式驅動工程師學習路線

【乾貨】 Linux嵌入式所有知識點-思維導圖