以下以RK3308 V20 的開發板為例子, 將一步步說明改如何修改SDK 裡的設定來製作符合開發板的 image, 當中學到編譯 image 的相關技巧也可以用在非開發板的板子上.
1. 找到絲印
首先在開發板的PCB 上找到絲印編號, 由於RK3308 開發板是由兩片板子所組成.(如下圖)
板子正面
板子背面
我們可以分別在RK3308 的主板以及 MIPI 屏幕或是 MIC array 的子板. 兩片板子上各找到一個絲印如下照片所示.
主板絲印
子板絲印
從板子上我們可以找到絲印
主板為 RK_EVB_RK3308_DDR3P116SD4_V20
子板為RK_EVB_RK3308B屎-S_MIPI_DISPLAY V10_20210902KYY
由於RK3308 Linux SDK 的發布說明文件 Rockchip_RK3308_Linux_SDK_Release_V1.3.2_20191031_CN.pdf 沒有更新, 文件裡最新只有寫到V13板的開發板編譯說明,
而由主板跟子板搭配的開發板版本只有到V11, 沒有編譯V20 開發板的相關說明, 如下圖所示.
-
板級文件
我們必須到SDK 的目錄裡尋找RK3308B V20 開發板的板級文件, 然後在編譯 image 時選用適當的板級文件才能正確編譯出可以在RK3308B V20 開發板上執行的image,
因為板級文件裡記錄了板子的硬件配置, 如果板級文件配置不正確, 編譯出來的 image 燒錄到開發板就會不開機, 問題嚴重時甚至可能會弄壞板子.
-
開發板線路
由於我們不清楚開發板上有那些硬件的配置, 在開始確認RK3308B V20 開發板的板級文件之前, 先把RK3308B V20 開發板的線路圖打開確認一下板子的規格.
線路圖的檔案名稱會與板子上的絲印相同, 開發板主板與子板的線路圖檔名分別是
RK_EVB_RK3308_DDR3P116SD4_V20_20211027_final
RK_EVB_RK3308B-S_MIPI_DISPLAY_V10_20210902ZXT
從開發板主板的線路圖名稱我們發現RK3308的型號是RK3308B-S, RK3308 有多種型號, 例如內建DDR2的RK3308G, 或是與RK3308B規格相同但是在不同晶圓廠生產的RK3308B-S.(RK3308B-S 與 RK3308B 的硬件差異可以在文件 RK3308_Series_S-version_Chip_Hardware_Design_Modification_Introduction_V1.0.1_20211019.pdf 查詢, 軟件部份如果已經同步SDK 版本到 rk3308_linux_release_v1.5.2_20220124.xml 之後的版本就有支援RK3308B-S 不需要額外打補釘.)
知道RK3308的版本之後, 我們可以開始來確認SDK裡有無適合RK3308B V20 的板級文件, 板級文件在device/rockchip/rk3308 的目錄下如圖所示.
很幸運的我們可以看到只有兩個板級文件的檔名符合RK3308B-S, 分別是32/64bit 兩種
BoardConfig_RK3308BS_32bit.mk
BoardConfig_RK3308BS_64bit.mk
我們以BoardConfig_RK3308BS_64bit.mk 為例子, 從內容找到deconfig 以及dts的檔案名稱, 再確認其內容.
# Kernel defconfig 描述的是 deconfig 的檔名
# Kernel dts 描述的是 dts 的檔名
從板級文件的內容找到 deconfig 以及 dts 的檔名如下, 至此我們還無法確認這兩個檔案的設定是不是符合RK3308 V20 開發板, 還需要詳細比對檔案內容與線路圖是否符合我們的開發板.
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=rk3308_linux_defconfig
# Kernel dts
export RK_KERNEL_DTS=rk3308bs-evb-amic-v11
雖然手冊沒有V20的開發板說明, 但是我們還是可以依照說明手冊 Rockchip_RK3308_Linux_SDK_Release_V1.3.2_20191031_CN.pdf 找到檔案的名稱從命名規則來幫助我們縮小範圍, 從文件裡的表格我們知道有帶屏幕的deconfig 與dts的檔名如下圖.
rk3308_linux_rk618_display_defconfig (有display 表示有顯示螢幕)
rk3308-evb-mipi-display v10.dts (有display 表示有顯示螢幕)
(開發板子板的 dts 檔名有 display 字樣, 表示是有帶LCD螢幕的版本, 從 SDK release note 文件可以發現開發板子板有多種樣式.)
從SDK 裡搜尋檔案名稱找到
rk3308_linux_rk618_display_defconfig 檔案在 kernel/arch/arm64/configs 底下
rk3308-evb-mipi-display v10.dts 檔案在 kernel/arch/arm64/boot/dts/rockchip 底下
如下圖所示.
再度很幸運的在 kernel/arch/arm64/configs 下我們可以看到只有三個檔案跟RK3308有關,
在 deconfig 的部分就可以確定選用 rk3308_linux_rk618_display_defconfig 是有帶屏幕的設定.
rk3308_linux_defconfig
rk3308_linux_rk618_display_defconfig
rk3308_robot_defconfig
但在kernel/arch/arm64/boot/dts/rockchip 下的dts 檔案就很多了, 依照說明手冊rk3308-evb-mipi-display v10.dts 是V11板帶屏幕的設定,
我們的RK3308 V2.0的EVB 是RK3308B-S, 而且是有帶屏幕, 以display 跟B-S這兩個條件來篩選後,
我們發現同時有 bs 以及 display 字樣的 rk3308bs-evb-mipi-display-v11.dts 是唯一的選擇, Lucky~.
-
修改板級文件 BoardConfig_RK3308BS_64bit.mk
確定了deconfig 跟 dts 檔案之後, 我們就可以自行修改板級文件. 把 deconfig 跟 dts 替換我們找到的檔案名稱,
之後就可以用這個板級文件來編譯image了.
rk3308_linux_rk618_display_defconfig
rk3308bs-evb-mipi-display-v11.dts
BoardConfig_RK3308BS_64bit.mk 修改後的內容如下
#!/bin/bash
# Target arch
export RK_ARCH=arm64
# Uboot defconfig
export RK_UBOOT_DEFCONFIG=rk3308
# SPL INI
export RK_SPL_INI_CONFIG=RK3308MINIALL_UART4.ini
# Kernel defconfig
export RK_KERNEL_DEFCONFIG= rk3308_linux_rk618_display_defconfig
# Kernel dts
export RK_KERNEL_DTS= rk3308bs-evb-mipi-display-v11
export RK_BOOT_IMG=zboot.img
# kernel image path
export RK_KERNEL_IMG=kernel/arch/arm64/boot/Image.lz4
# parameter for GPT table
export RK_PARAMETER=parameter-64bit.txt
# Buildroot config
export RK_CFG_BUILDROOT=rockchip_rk3308_bs_release
.bin
.
.
.
以下省略
-
編譯image
編譯指令只有以下兩個步驟, 等程式跑完 image 就編譯完成了.
- 選用板級文件
./build.sh device/rockchip/rk3308/BoardConfig_RK3308BS_64bit.mk
- 開始編譯
./build.sh
評論