01介紹
今天的文章主題是分享與探討關于Purple Pi OH開發板Android開發之搭建編譯環境及編譯Android固件。
為什么同樣是ARM架構的芯片,我以前開發STM32的時候只需要在Windows里的MDK5點一點就可以了。現在我想要使用Purple Pi OH開發板進行RK3566芯片開發,反而要使用虛擬機,要使用Linux黑乎乎的終端敲打一長串的命令,要關注內核版本、編譯工具鏈的安裝和配置、開發環境是否支持編譯等等!對比習慣了Windows開發的人員一時之間也是無法快速上手的。
因此在今天的文章中小智會跟你說為什么同樣是嵌入式開發,我們需要學習如此多的知識和做這么多的準備。
在Linux虛擬機環境中進行RK3566開發有很多原因,這里我只例舉比較重要的幾個原因:
PC虛擬機通常具有比嵌入式硬件更強的計算和內存資源,這意味著在虛擬機上編譯內核和程序可以大幅縮短編譯時間。
使用虛擬機可以確保開發環境的一致性,有助于減少因環境差異導致的問題,尤其是在團隊成員之間同步工作環境時。
通過虛擬機,可以將開發環境與主機系統隔離開來,避免對主機系統的潛在影響,如系統崩潰或數據丟失等風險。
在開發過程中,可能需要頻繁地測試和修改系統配置,這可能會帶來安全風險。使用虛擬機可以在一個封閉的環境中進行這些操作,從而保護主機系統不受潛在的惡意軟件或誤操作的影響。
某些開發工具和編譯器可能只在特定的Linux發行版上提供最佳支持,使用虛擬機可以輕松地安裝和運行這些工具。
綜上所述,搭建Linux虛擬機環境對于RK3566開發來說是非常有益的,它不僅能夠提高編譯效率,還能提供一個安全、一致且易于管理的開發環境。
來看我們用到的開發板長什么樣子
Purple Pi OH開發板
02固件源碼獲取
2.1源碼下載
當我們拿到一塊Linux開發板時,我們就需要同步進行開發的初期準備。
首先就是獲取資料,通常包括板子的芯片手冊、數據手冊、原理圖等。
獲取到資料后第二步就是通過查閱資料了解到源碼的獲取方式,其他的芯片資料可以先不看。因為通常源碼都非常大,我們需要時間從網絡上進行獲取。
第三步即開發環境搭建,通常我們也是通過官方資料查閱編譯SDK所需要的環境要求并搭建一個編譯環境。

注意:所有的補丁都是基于1.1中的sdk整包生成。

2.2開發環境搭建
接下來我們需要使用VMWare或者VirtualBox創建虛擬機,環境搭建的教程通常在網上搜索即可獲取大量資料。
只要根據要求配置編譯環境即可,以下是Android11推薦編譯主機配置:
1.Ubuntu18.04 操作系統
2.64 位 CPU
3.16GB 物理內存+交換內存
4.250GB 空閑的磁盤空間
2.3VMWare文件傳輸
在完成源碼獲取和編譯環境搭建后,我們需要將源碼拖動到虛擬機內,這就涉及到Windows和Linux虛擬機之間的傳輸文件方式,通常我們可以通過共享文件夾、FTP或SFTP、網絡傳輸工具等方式,我通常使用的是共享文件夾方式,其配置簡單且速度快,方便開發。
它可以直接在Windows資源管理器中訪問,即Linux虛擬機和Windows共享一塊存儲空間,兩邊都可以直接訪問和操作。過去我總是在Windows下直接通過VScode打開文件夾進行編碼,在Linux中進入文件夾直接編譯或者復制出來在其他地方編譯都可。
接下來我將講解如何創建與配置共享文件夾:
1. 首先將VMWare Tools安裝好,安裝詳細流程可以在網上搜索并學習。
2. 點擊【編輯虛擬機設置】,選中【選項】即可查看到共享文件夾的設置,
如下圖所示:

3. 點擊【總是啟用】,彈出下圖中第二步的【添加共享文件夾向導】。
在電腦中選擇合適的位置建立共享文件夾。這里我是和虛擬機位置放在一起的。
如下圖所示:

4. 在設置好共享文件夾路徑后,點擊下一步時記得選中啟用此共享。
如下圖所示:

5. 接著我們在電腦資源管理器中訪問位置即可查看到,此時往文件夾拖文件就可以在Linux中的/mnt/hgfs/文件夾下即可實時看到,如下圖所示:

03SDK編譯3.1源碼解壓
將源碼傳輸進Linux中后,
我們通過如下命令可以將源碼壓縮文件解壓縮至我們想要的路徑:
cat purple_pi_android11.tar.gza* | tar -xz -C target_path
語句意思為在當前文件夾下查看全部以
“purple_pi_android11.tar.gza”開頭的文件,
并將其結果使用tar命令解壓至[ target_path ],target_path即你想要解壓到的文件夾路徑。
效果如下圖所示:

3.2uboot編譯
接著我們進入SDK根目錄下的文件夾u-boot執行如下命令:
cd u-boot./make.shrk3566
執行命令后結果如下圖所示:

若編譯成功結果如下圖所示:

3.3kernel編譯
內核配置文件路徑:kernel/arch/arm64/configs/rockchip_purple_pi_3566_defconfig設備樹文件路徑:kernel/arch/arm64/boot/dts/rockchip/
我們提供了兩種顯示屏的適配,分別是:
1. “ido-pi-oh3566-v1.dts”,顯示屏驅動適配HDMI接口;
2. “ido-pi-oh3566-v1-dsi0-mipi.dts”,顯示屏驅動適配MIPI接口;
我們以編譯HDMI屏內核為例,編譯命令如下:
cd kernel make ARCH=arm64 rockchip_purple_pi_3566_defconfig rk356x_evb.config android-11.configmakeARCH=arm64ido-pi-oh3566-v1.img-j10
命令解釋:

分別是:
Purple Pi OH默認的配置文件,包含了該開發板的默認設置和選項;
Rockchip RK356x的配置文件,包含了針對該板的特定設置和選項;
Android 11版本的配置文件,包含了針對Android 11操作系統的特定設置和選項。

特別注意:
部分開發者遇到編譯失敗時,可能是虛擬機的內存分配不夠,此時我們可以嘗試調小并行任務數編譯,例如 -j10調整為 –j4 或 –j1。
如果編譯提示選擇io_domain電壓,vccio4和vccio5選擇1.8v,其它選擇3.3v。
以上方式編譯完成后,kernel目錄生成的boot.img文件不能直接燒錄。
需要使用build.sh -K 命令來編譯kernel,編譯后燒寫rockdev/Image-rk3566_r/boot.img。
單獨編譯kernel生成可直接燒錄的boot.img。
此處的編譯方法的前提已存在rockdev/Image-rk3566_r/boot.img文件(即Android代碼已經完全編譯過一次或者執行過build.sh -K)。
編譯的原理為在kernel目錄下將編譯生成的 kernel.img 和 resource.img 替換到舊的 boot.img 中,命令如下:
cd kernel make ARCH=arm64 rockchip_purple_pi_3566_defconfig rk356x_evb.config android-11.configmakeARCH=arm64BOOT_IMG=../rockdev/Image-rk3566_r/boot.imgido-pi-oh3566-v1.img-j10
使用此方法編譯出kernel/boot.img文件可以直接用于燒錄至boot分區,kernel編譯結果如下圖所示:

3.4Android編譯及固件生成步驟
使用如下命令編譯
source build/envsetup.shlunch rk3566_r-userdebugmake-j10
編譯過程如下圖所示:

Android編譯成功結果如下圖所示:

需要編譯內核選擇的屏幕修改Android主顯和系統方向時可以修改如下參數:
1)HDMI: A)device/rockchip/rk356x/rk3566_r/rk3566_r.mk PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=HDMI-A-1B)device/rockchip/rk356x/BoardConfig.mk SF_PRIMARY_DISPLAY_ORIENTATION := 0
2)MIPI: A)device/rockchip/rk356x/rk3566_r/rk3566_r.mk PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI B)device/rockchip/rk356x/BoardConfig.mk SF_PRIMARY_DISPLAY_ORIENTATION := 270
3.5固件打包
編譯完成后,執行 SDK 根目錄下的 mkimage.sh 腳本生成固件,所有燒寫所需的各分區鏡像將都
rockdev/Image-rk3566_r/目錄下,
命令如下:
./mkimage.sh
結果如下:

將所有分區鏡像合并成單個的鏡像,命令如下:
cd RKTools/linux/Linux_Pack_Firmware/rockdev/./mkupdate_rk356x.sh
結果如下:

執行mkupdate_rk356x.sh 命令后
會將各分區鏡像合并成一個update.img 的鏡像文件,如下圖所示:

當我們做到這一步時,我們的固件編譯就完成啦!
由于固件編譯本身就是一個非常復雜和繁瑣的活,因此本篇內容的篇幅較長,非常感謝有耐心看到這里的小伙伴!
-
Android
+關注
關注
12文章
4024瀏覽量
133978 -
開發板
+關注
關注
26文章
6289瀏覽量
118058 -
Purple
+關注
關注
0文章
8瀏覽量
395
發布評論請先 登錄
【觸覺智能 Purple Pi開發板試用】系統重燒固件及ffmpeg編譯
【觸覺智能 Purple Pi OH 開發板體驗】檢測Android系統的完備性
Purple Pi OH Android11 ROOT方法
Purple Pi OH Android11 ROOT方法
3568編譯環境搭建
瑞芯微RK3566鴻蒙開發板Ubuntu虛擬機環境搭建教程,觸覺智能Purple Pi OH主板
瑞芯微RK3566鴻蒙開發板Ubuntu虛擬機環境搭建教程,觸覺智能Purple Pi OH主板
RK3568 Android11編譯環境搭建及報錯解決指南
Purple Pi OH又開外掛!帶你搭建編譯環境及編譯Android 11固件
評論