前 言
本文檔主要演示Linux系統(tǒng)開發(fā)流程。包括LinuxSDK的配置與編譯、U-Boot、Kernel及Rootfs的開發(fā),以及系統(tǒng)鏡像的替換方法。同時介紹系統(tǒng)鏡像的打包與解包、關鍵計算單元(CPU、GPU、NPU)和內(nèi)存子系統(tǒng)(DDR)性能策略配置與管理的詳細步驟,旨在幫助開發(fā)者完成系統(tǒng)開發(fā)。
開發(fā)環(huán)境
Windows開發(fā)環(huán)境:Windows1064bit、Windows764bit
Linux開發(fā)環(huán)境:VMware16.2.5、Ubuntu20.04.6 64bit
LinuxSDK:LinuxSDK-[版本號](基于rk3562_linux_sdk_release_v1.2.0)
系統(tǒng)版本:Tronlong-Desktop 20.04(類Ubuntu)、Linux-5.10.209、U-Boot-2017.09
交叉編譯工具鏈:
應用開發(fā)交叉編譯工具鏈:aarch64-linux-gnu-gcc(版本為9.4.0)
U-Boot開發(fā)、內(nèi)核開發(fā):gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf
備注:本文基于2GByte LPDDR4X、16GByte eMMC配置單板機進行演示。
術語表
為便于閱讀,下表對文檔出現(xiàn)的關鍵術語進行解釋;對于廣泛認同釋義的術語,在此不做注釋。

注意事項
(1)單板機默認鏡像(已包含對應的設備樹文件)支持創(chuàng)龍科技EX-TLBaseUART擴展板、EX-TLMultiUART擴展板、EX-TLMultiETH擴展板的外設,更換不同擴展板無需手動切換設備樹文件。
(2)Linux系統(tǒng)各鏡像可通過命令行方式和瑞芯微開發(fā)工具替換,具體如下表所示。

備注:Rootfs鏡像需參考“完整鏡像打包與解包”章節(jié)打包成完整系統(tǒng)鏡像后才能替換。
(3)Linux系統(tǒng)相關軟件包位于產(chǎn)品資料“4-軟件資料Linux”目錄下,具體如下表所示。
備注:我司推薦使用最新版本的LinuxSDK,亦可根據(jù)“4-軟件資料LinuxLinuxSDKLinuxSDK-feature-support.pdf”的變更說明,自行替換對應模塊(如device/rockchip)至舊版本LinuxSDK進行使用。

(4)我司提供的單板機內(nèi)核鏡像已包含設備樹編譯后的二進制文件(.dtb),具體說明如下:

1LinuxSDK安裝
1.1安裝依賴軟件
請先執(zhí)行如下命令,更新軟件列表。
Host# sudo apt-get update
圖 1
執(zhí)行如下命令,安裝LinuxSDK開發(fā)包依賴的庫和工具集。
備注:安裝過程中,請保證Ubuntu可正常訪問互聯(lián)網(wǎng),若提示"*** is already the newest version ***"表示該軟件已安裝,請忽略。
Host# sudo apt-get install -y git ssh make gcc libssl-dev
liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath
diffstat binfmt-support qemu-user-static live-build bison flex fakeroot
cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev
libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev
libmpc-dev bc python-is-python3 python2 libpkgconf-dev
圖 2
圖 3
若安裝失敗,可通過更換軟件源解決。點擊如下圖標進入軟件源更新的圖形界面。
圖 4
點擊"Download from"。
圖 5
點擊"Other…",出現(xiàn)彈窗,找到"China",即可選擇軟件源,推薦使用清華大學鏡像軟件源,以匹配我司開發(fā)文檔,然后點擊"ChooseServer"。
圖 6
圖 7
圖 8
輸入登錄虛擬機Ubuntu的密碼,然后點擊"Authenticate"。
圖 9
點擊"Close",完成更換軟件源。
圖 10
執(zhí)行如下命令,檢查主機的Python版本(需安裝Python 3.6及以上版本)。
Host# python --version
圖 11
1.2解壓LinuxSDK
打開Ubuntu,執(zhí)行如下命令,創(chuàng)建RK3562工作目錄并進入該目錄。
Host# mkdir -p /home/tronlong/RK3562
圖 12
請將產(chǎn)品資料“4-軟件資料LinuxLinuxSDK”目錄下的LinuxSDK-[版本號].tar.gz開發(fā)包解壓至Ubuntu系統(tǒng)的RK3562工作目錄中,執(zhí)行如下命令進行解壓。耗時約5min后解壓完成,生成rk3562_linux_sdk_release_v1.2.0文件夾,即為LinuxSDK源碼目錄。
Host# cd /home/tronlong/RK3562/
Host# tar -zxf LinuxSDK-v1.0.tar.gz
備注:LinuxSDK版本號以實際情況為準。
圖 13
執(zhí)行如下命令,查看當前LinuxSDK源碼目錄。
Host# cd rk3562_linux_sdk_release_v1.2.0/
Host# ls -l
圖 14

2LinuxSDK配置與編譯
請先參考“LinuxSDK安裝”章節(jié)正確安裝LinuxSDK和依賴軟件,再執(zhí)行以下步驟。
2.1配置編譯選項
進入LinuxSDK源碼目錄,配置LinuxSDK編譯選項。
Host# ./build.sh sbc_tl3562_ubuntu_defconfig
配置編譯設備樹文件
我司提供的設備樹文件位于LinuxSDK源碼"kernel/arch/arm64/boot/dts/rockchip"目錄。設備樹文件根據(jù)單板機部分復用外設功能進行區(qū)分。具體說明如下表。

單板機使用的設備樹文件存在多級的依賴關系,具體如下表所示。表中的下一級設備樹文件,被上一級設備樹文件所引用。

LinuxSDK默認編譯的設備樹文件為sbc-tl3562.dts,如需替換為支持對應功能的其他設備樹,請參考以下步驟修改。本次操作以替換為sbc-tl3562-mipi-lcd.dts設備樹(支持MIPI顯示)進行演示,如需使用其他設備樹,修改方法同理。
執(zhí)行如下命令,進入內(nèi)核配置界面。
Host# ./build.sh sbc_tl3562_ubuntu_defconfig
Host# make menuconfig
圖 15
選擇"Kernel",按Enter鍵進入到下一級配置選項。
圖 16
選擇"device-tree scriptname",按Enter鍵后,進入編輯頁面。
圖 17
進入編輯頁面將"sbc-tl3562"修改為"sbc-tl3562-mipi-lcd",選擇"Ok",按Enter鍵退出編輯頁面。
圖 18
選擇"Save",按Enter鍵保存配置。
圖 19
在彈出的界面中按選擇"Ok",按Enter鍵保存。
圖 20
在彈出的界面中按Enter鍵完成保存操作。
圖 21
配置完成后,連續(xù)按下Esc鍵,退出圖形配置界面。
執(zhí)行如下命令,保存設備樹相關的編譯配置項,并通過查看生成的"sbc_tl3562_ubuntu_defconfig"文件,確定設備樹文件是否已正確配置。
Host# make savedefconfig
Host# cat device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig
圖 22
除上述圖形化配置方法外,亦可通過執(zhí)行如下命令,直接修改"sbc_tl3562_ubuntu_defconfig"文件。
Host# vim device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig
圖 23
修改內(nèi)容如下:
RK_KERNEL_DTS_NAME="sbc-tl3562-mipi-lcd" //將"sbc-tl3562"修改為"sbc-tl3562-mipi-lcd"
圖 24
配置內(nèi)核選項
我司默認配置的是Linux內(nèi)核(推薦使用)。如需修改內(nèi)核編譯選項配置,請繼續(xù)執(zhí)行"make -j8 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 menuconfig"命令打開圖形配置界面。此命令通過讀取當前目錄的.config文件,以圖形界面的方式提供內(nèi)核編譯配置查看和修改方法。如無需修改內(nèi)核編譯選項配置,可跳過此步驟。
menuconfig是一套圖形化的配置工具,需要ncurses庫支持。ncurses庫提供了一系列的API函數(shù)供調(diào)用者生成基于文本的圖形界面,因此需要先執(zhí)行如下命令通過網(wǎng)絡安裝ncurses庫。
Host# sudo apt-get install libncurses5-dev
圖 25
Host# sudo apt-get install libncursesw5-dev
圖 26
ncurses庫安裝完成后,執(zhí)行如下命令配置交叉編譯工具鏈。
Host# cd /home/tronlong/RK3562/rk3562_linux_sdk_release_v1.2.0/kernel
Host# export PATH=/home/tronlong/RK3562/rk3562_linux_sdk_release_v1.2.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
圖 27
在配置內(nèi)核前,先使用如下命令清理內(nèi)核:
Host# make CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 distclean
圖 28
執(zhí)行如下命令,配置內(nèi)核。
Host# make -j8 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 rockchip_linux_defconfig
圖 29
ncurses庫安裝完成后,執(zhí)行如下命令打開圖形配置界面。
Host# make -j8 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 menuconfig
圖 30
圖 31
可通過鍵盤的方向鍵選中對應菜單欄。在被選中的情況下,可按Enter鍵進入子菜單。菜單選項中藍色高亮的字母代表此菜單選項的快捷鍵,可在鍵盤上按下對應的字母快速選中對應的菜單選項。每個菜單選項前的括號內(nèi)容表示當前菜單選項的配置狀態(tài)。選中對應的菜單選項后,按下Y鍵,會將相應的選項配置編譯到內(nèi)核中,同時菜單選項前面變?yōu)? * >。按下N鍵,不會將相應的選項配置編譯到內(nèi)核中。按下M鍵,會將相應的選項配置編譯為內(nèi)核模塊,菜單選項前面變?yōu)? M >。如需搜索,可按下/鍵打開搜索框,然后輸入要搜索的內(nèi)容。配置完畢后,選中,按Enter鍵保存配置選項。然后選中,按Enter鍵退出。請執(zhí)行如下命令,保存配置選項至arch/arm64/configs/rockchip_linux_defconfig文件,再將defconfig文件內(nèi)容覆蓋至rockchip_linux_defconfig文件。Host# make -j8 CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=arm64 savedefconfigHost# mv defconfig arch/arm64/configs/rockchip_linux_defconfig圖 322.2拷貝根文件系統(tǒng)鏡像我司已提供Rootfs根文件系統(tǒng)鏡像位于“4-軟件資料LinuxFilesystemTronlong-Desktop-20.04imageTronlong-Desktop-20.04-[版本號]-[Git系列號]”目錄下(版本號、Git系列號請以實際情況為準),請將其拷貝至LinuxSDK源碼目錄的"ubuntu"目錄下。圖 332.3編譯LinuxSDK在編譯LinuxSDK時,可根據(jù)實際需要選擇是否多設備樹打包功能,即將多個設備樹文件(.dts)編譯為二進制文件(.dtb)并嵌入同一內(nèi)核鏡像中。若僅需單一設備樹支持,無需將多個設備樹文件(.dts)打包進同一內(nèi)核鏡像,請執(zhí)行如下操作,禁用多設備樹打包功能,并重新編譯內(nèi)核。備注:若未修改"sbc_tl3562_ubuntu_defconfig"文件,則默認編譯設備樹為"sbc-tl3562.dts"。Host# export ENABLE_MULTI_DTB=nHost# ./build.sh kernel圖 34圖 35編譯完成后,生成的內(nèi)核鏡像中僅包含sbc-tl3562.dts編譯后的設備樹數(shù)據(jù)。并且生成sbc-tl3562.dtb設備樹二進制文件(.dtb),位于"kernel/arch/arm64/boot/dts/rockchip/"目錄。若需打包多設備樹文件(.dts)至同一內(nèi)核鏡像,請先參考上文“配置編譯設備樹文件”章節(jié),將需要打包的設備樹文件(.dts)逐一進行配置,并重新編譯內(nèi)核,生成對應的設備樹二進制文件(.dtb)。本次操作以獲取sbc-tl3562-ex-tlbaseuart.dtb文件進行演示。Host# vim device/rockchip/rk3562/sbc_tl3562_ubuntu_defconfig圖 36修改內(nèi)容如下:RK_KERNEL_DTS_NAME="sbc-tl3562-ex-tlbaseuart" //將"sbc-tl3562"修改為"sbc-tl3562-ex-tlbaseuart"圖 37執(zhí)行如下命令重新編譯內(nèi)核,生成對應的設備樹二進制文件(.dtb)文件。Host# ./build.sh sbc_tl3562_ubuntu_defconfigHost# ./build.sh kernel圖 38圖 39重復上述步驟,編譯生成sbc-tl3562-ex-tlmultiuart.dtb和sbc-tl3562-ex-tlmultieth.dtb。編譯完成后,查看目錄下是否有對應設備樹二進制文件(.dtb)。Host# ls kernel/arch/arm64/boot/dts/rockchip/sbc-tl3562*.dtb圖 40執(zhí)行如下命令,將多個設備樹的二進制文件(.dtb)打包進內(nèi)核鏡像中。備注:若修改了任一設備樹文件(.dts),需重新編譯生成對應的二進制文件(.dtb),再執(zhí)行打包操作。例如,當修改sbc-tl3562-ex-tlmultiuart.dts設備樹文件后,需編譯生成sbc-tl3562-ex-tlmultiuart.dtb,再執(zhí)行如下命令將多個設備樹進行打包。Host# export ENABLE_MULTI_DTB=yHost# ./build.sh kernel圖 41圖 42請確保已參照“配置編譯選項”章節(jié)正確配置LinuxSDK編譯選項,然后在LinuxSDK的LinuxSDK源碼目錄下執(zhí)行如下命令,一鍵編譯生成U-Boot、Kernel、文件系統(tǒng)、Recovery等鏡像,并打包生成系統(tǒng)鏡像。備注:若未設置"ENABLE_MULTI_DTB"環(huán)境變量,進行內(nèi)核編譯時系統(tǒng)將默認啟用單設備樹打包模式,即僅將一個設備樹文件(.dts)編譯并嵌入內(nèi)核鏡像,具體打包的設備樹文件由sbc_tl3562_ubuntu_defconfig文件的RK_KERNEL_DTS_NAME選項指定。Host# ./build.sh圖 43預計耗時約2小時后編譯完成,最終在rockdev目錄下生成U-Boot、Kernel、文件系統(tǒng)、Recovery系統(tǒng)等鏡像如下所示。圖 44圖 452.4系統(tǒng)組件鏡像說明編譯LinuxSDK后生成的系統(tǒng)組件鏡像具體功能和作用如下表所示。由于篇幅過長等原因,部分內(nèi)容均不逐一展示,如需獲取完整版詳細資料,請關注Tronlong創(chuàng)龍科技微信公眾號或官網(wǎng),或者評論區(qū)留言,感謝您的支持!
審核編輯 黃宇
-
u-boot
+關注
關注
0文章
135瀏覽量
39747 -
單板機
+關注
關注
1文章
42瀏覽量
18868 -
RK3562
+關注
關注
0文章
99瀏覽量
689
發(fā)布評論請先 登錄
RK3562 單板機圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(二)
RK3562 單板機圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(一)
RK3562 單板機 Linux 應用開發(fā)實戰(zhàn)手冊:LED/CAN/TCP/UART 案例與 Python 開發(fā)(二)
深入解析U-Boot image.c:RK平臺鏡像處理核心邏輯
RK3562 單板機 Linux-RT 系統(tǒng)開發(fā)指南:內(nèi)核配置、實時性優(yōu)化與案例詳解
3562 單板機 Linux 系統(tǒng)固化完全指南:從 SD 卡啟動到 eMMC 永久部署
RK3562單板機系統(tǒng)使用與開發(fā)手冊:基礎操作、升級部署與工具鏈配置(一)
告別燒固件,RK3562開發(fā)板Android系統(tǒng)屏幕方向臨時設置小妙招
迅為RK3562開發(fā)板2900頁+資料_多種系統(tǒng)適配全開源
觸覺智能RK3562開發(fā)板新版強勢亮相
瑞芯微RK3506 3核A7@1.5GHz+雙網(wǎng)口+雙CAN-FD 工業(yè)開發(fā)板—Linux系統(tǒng)開發(fā)手冊
RK3562 單板機系統(tǒng)開發(fā)完全手冊:U-Boot/Kernel/Rootfs 開發(fā)與性能優(yōu)化
評論