RK3568常見問題手冊-如何快捷的使用瑞芯微RK3568J開發闆

概述
本文詳細介紹了RK3568在Linux、Android、Ubuntu系統編譯過程中可能遇到的問題,包括設備樹路徑、源碼編譯不通過、内核編譯配置錯誤、buildroot編譯問題、交叉編譯工具位置、編譯與燒寫區别、rockdev目錄映像文件、串口數據丢失問題、menuconfig配置不生效以及源碼解壓與編譯問題等,并給出了相應的解決方案,對于開發者在編譯RK3568系統時具有很好的指導意義。
操作系統:Linux、Android、Ubuntu
目錄
1、Linux設備樹的路徑是什麼?
2、Linux 源碼編譯不通過,是什麼原因?
3、Linux單獨編譯内核提示Actions Semi Platforms (ARCH_ACTIONS) [N/y/?] (NEW),導緻編譯失敗,這是為什麼?
4、Linux在buildroot編譯qt5webengine 5.14.2時出錯退出,是什麼原因?
5:Linux在buildroot編譯linux-tools時報錯出錯退出,是什麼原因?
6、Linux源碼目錄下的交叉編譯工具的位置在哪?
7、Linux交叉編譯配置的環境變量路徑: Linux執行./build.sh buildroot與執行全編譯的區别
8:Linux在rockdev目錄下的misc.img oem.img recovery.img userdata.img分别是什麼意思?
9:Linux為什麼運行我們官方的QT程序會報以下錯誤?
10:Linux系統在使用串口和其他傳感器模塊,會發生丢少量字節,怎樣保證串口不丢失數據?
11:Linux/Ubuntu 通過make ARCH=arm64 menuconfig 配置内核後沒有生效,是什麼原因?
12:Linux/Ubuntu/Android源碼解壓失敗,報錯EOF歸檔失敗?
13:Android 源碼編譯不通過?
14:Android手冊内沒有單獨燒寫部分,是不是不支持單獨燒寫?
15:源碼編譯圖形界面配置錯誤電壓。
--正文開始--
本文基于飛淩嵌入式RK3568開發闆作為硬件平台展開論述,同時也對其他開發闆用戶提供了參考價值。文章深入探讨了在編譯RK3568芯片所支持的Linux、Ubuntu及Android系統過程中,開發者可能遇到問題。通過對這些常見編譯問題的細緻剖析,并配以相應的解決思路,以期幫助開發者在編譯RK3568相關系統時能更加順暢無阻。 在此過程中,我們特别提醒開發者,面對編譯中的複雜性與不确定性,需保持高度的耐心與細緻入微的态度。同時,鼓勵開發者積極利用官方發布的詳盡文檔以及活躍的社區資源,希望各位開發者都能成功構建出穩定可靠的RK3568 Linux、Ubuntu及Android系統。
1、Linux設備樹的路徑是什麼?
當您的産品是飛淩嵌入式RK3568系列闆卡時,在Linux内核中,設備樹的路徑通常位于kernel/arch/arm64/boot/dts/rockchip/目錄下,具體文件名為OK3568-C-common.dtsi。這個文件包含了與OK3568-C系列處理器相關的設備樹定義。
2:Linux 源碼編譯不通過,是什麼原因?
問題排查方向,你可以參考以下幾項。
①、源碼路徑與名稱的穩定性:
全編譯流程結束後,請确保源碼的存儲路徑未發生變動,且源碼文件夾的名稱也未被更改。任何路徑或名稱的修改都可能阻礙後續的源碼編譯進程。
②、操作系統與虛拟環境的核查:
驗證您的電腦是否運行的是Windows 10操作系統。
檢查VMware虛拟機的版本是否為15。
核實Ubuntu操作系統的版本是否為18.04。
檢查電腦是否達到16G内存,虛拟機是否是達到8G内存,虛拟機處理器數量4,每個處理器内核數量1(如果編譯報錯,可以增大内存到10G,配置為4M倍數)。
③、編譯過程中的内存與線程管理:
編譯失敗的一個常見原因是編譯過程中線程數量過多,導緻内存資源被過度占用。因此,合理管理編譯線程的數量,以避免内存耗盡。
④、源碼完整性的校驗:
在拷貝并合并文件後,請利用md5sum OK3568-linux-source.tar.bz2命令生成校驗碼,并将其與OK3568-linux-source.tar.bz2.checksum.txt文件中的内容進行比對,以确保源碼的完整性。
⑤、虛拟機庫文件的安裝情況:
請檢查虛拟機中是否已安裝所有基本庫和必要的開發庫,這些庫文件對于編譯過程至關重要。
⑥、網絡連接的穩定性:
使用ping www.bczlgz.com命令或打開浏覽器訪問網頁,以驗證網絡連接是否穩定。網絡連接問題可能會影響編譯過程中的文件下載或更新。
⑦、特定編譯錯誤的應對措施:
若您在首次編譯RK3568 Linux時遇到錯誤,建議再次執行./build.sh腳本進行嘗試。有時,初次編譯中的某些錯誤可能由于環境或配置的小幅波動而産生,再次執行腳本可能會解決這些問題。
3:在Linux系統中單獨編譯内核時,提示“Actions Semi Platforms (ARCH_ACTIONS) [N/y/?] (NEW)”,并且導緻編譯失敗,這是為什麼?
這種情況的原因是 .config 文件中的架構配置被錯誤地修改為X86架構。通常發生在用戶直接在内核源代碼目錄下執行 make menuconfig 命令時,沒有指定正确的目标架構。正确的命令應該是 make ARCH=arm64 menuconfig,其中 ARCH=arm64 指定了目标架構為ARM64。
為了解決這個問題,可以取消之前對編譯腳本所做的修改,讓編譯腳本能夠重新生成 .config 文件。重新生成 .config 文件後,使用正确的命令執行配置過程,這樣就可以确保使用正确的架構配置進行内核編譯。
4:在Buildroot環境中編譯Qt5WebEngine 5.14.2時,Linux系統報錯并退出,可能的原因是什麼?
編譯Qt5WebEngine 5.14.2時出錯并退出的原因通常是由于虛拟機(VM)可用的運行内存不足。推薦的最低VM配置是8GB運行内存和200GB存儲空間。然而,很多用戶的宿主機隻有8GB運行内存,這在實際操作中會導緻問題。即使VM被設置為使用8GB運行内存,宿主機本身也需要占用一定的運行内存來維持其正常運行,因此實際上VM可用的内存會少于8GB。
此外,有些用戶可能會修改産品資料中提供的VM鏡像配置,比如增加内核數或調整運存大小。在某些情況下,為了成功編譯Qt5WebEngine,用戶可能需要将VM的運存增加到10GB或更高。
因此,如果在編譯Qt5WebEngine時遇到内存不足的報錯,解決方法通常是增加VM可用的運存空間。建議确保宿主機的運行内存在16GB及以上,以便為VM分配足夠的内存資源。如果宿主機内存不足,可以嘗試關閉一些不必要的應用程序或服務,或者升級宿主機的硬件配置。
5、在Buildroot環境中編譯linux-tools時,Linux系統報錯并退出,可能的原因是什麼?
A:在Buildroot環境中編譯linux-tools時遇到報錯并退出,通常是因為當前開發環境中的/usr/bin/python軟鍊接指向了Python 3,而linux-tools的源碼編譯過程可能需要使用Python 2。為了驗證這一點,可以使用ls -l /usr/bin/python命令來查看/usr/bin/python軟鍊接實際指向的是哪個Python版本。
如果/usr/bin/python指向的是Python 3,那麼你需要将其更改為指向Python 2。可以通過删除現有的軟鍊接并重新創建一個指向Python 2的軟鍊接來完成。具體的命令如下:
首先,删除現有的/usr/bin/python軟鍊接(需要管理員權限):
sudorm/usr/bin/python
然後,創建一個新的軟鍊接指向/usr/bin/python2(同樣需要管理員權限):
sudoln-s /usr/bin/python2 /usr/bin/python
注意,在執行這些命令之前,确保你的系統中已經安裝了Python 2,并且/usr/bin/python2是可用的。此外,更改系統級的軟鍊接可能會影響其他依賴于特定Python版本的程序,因此進行此類更改之前,請備份重要數據。
6、Linux源碼目錄下的交叉編譯工具的位置在哪?
A:在正常使用情況下,我們推薦用戶采用位于OK3568-linux-source/buildroot/output/OK3568/host/bin目錄下的aarch64-linux-gcc和aarch64-linux-g++作為交叉編譯工具。
該編譯器查找的庫文件路徑位于OK3568-linux-source/buildroot/output/OK3568/host/aarch64-buildroot-linux-gnu/sysroot/usr目錄下。用戶可以在Buildroot的配置中實時更新或添加所需的編譯庫。
值得注意的是,因為源碼的第一次編譯耗時較長,對于某些用戶而言可能并不希望進行全編譯。針對這種情況,用戶可以嘗試使用位于OK3568-linux-source/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-***-gnu/bin目錄下的aarch64-linux-gnu-gcc和aarch64-linux-gnu-g++作為交叉編譯工具。
關于gcc-linaro-6.3.1和gcc-buildroot-9.3.0的詳細信息,用戶可以查閱OK3568-linux-source/docs/Rockchip_Developer_Guide_Linux_Software_CN.pdf這一瑞芯微官方文檔。在該文檔的5.2.4章節中,用戶可以找到關于交叉編譯工具的詳細介紹和使用指南。
7:Linux交叉編譯配置的環境變量路徑:
配置環境變量:
export PATH=$PATH:/home/forlinx/linux-3568/OK3568-linux-source/buildroot/output/OK3568/host/bin
設置交叉編譯并運行程序的命令行:
export PATH=/home/forlinx/3568/OK3568-linux-source/buildroot/output/OK3568/host/bin/:$PATH
aarch64-linux-gcc test.c -o test
8:Linux環境下執行./build.sh buildroot與執行全編譯的區别
執行./build.sh buildroot
執行./build.sh buildroot隻會在/OK3568-linux-source/buildroot/output/OK3568/images目錄下生成文件系統鏡像;
執行全編譯:
執行全編譯才會在/OK3568-linux-source/IMAGE/OK3568-C-LINUX_20230714.0034_RELEASE_TEST/IMAGES目錄下生成各個分區文件和update.img文件。
執行./build.sh buildroot與進行全編譯的主要區别在于它們的目标和輸出。前者可能隻生成一個或幾個特定的文件系統鏡像文件,而後者則生成一個完整的、可用于部署的軟件包或鏡像文件集合。使用RK3568進行開發或部署時,您應根據具體需求選擇适當的構建方式。
9:Linux在rockdev目錄下的misc.img oem.img recovery.img userdata.img分别是什麼意思?
misc.img:
解釋:此映像文件包含了一些雜項(miscellaneous)信息,這些信息通常與設備啟動和配置相關。例如,bootloader的狀态(如鎖定或解鎖),以及其他與設備安全和啟動流程相關的參數。
oem.img:
解釋:此映像文件包含了設備制造商(OEM)定制的數據。這些數據一般包括設備制造商的LOGO、特定的驅動程序、配置文件,以及用于設備初始化或特定功能的腳本。
recovery.img:
解釋:此映像文件包含了Recovery模式的文件系統。Recovery模式是一個獨立于主操作系統的環境,用于設備的恢複、更新、修複問題,或創建/恢複備份。它通常提供了一個簡單的用戶界面,允許用戶在沒有主操作系統的情況下執行這些操作。
userdata.img:
解釋:此映像文件包含了用戶數據,如應用程序數據、用戶設置、任務信息等。這是用戶在使用設備時創建和存儲的數據,對于設備的個性化配置和用戶體驗至關重要。
這些映像文件通常在設備刷機或升級時被使用。因此,在進行相關操作時,須格外小心謹慎,以避免因操作不當而導緻的設備損壞或數據丢失。
10:Linux為什麼運行我們官方的QT程序會報以下錯誤?
qt.qpa.wayland: No shell integration named “xdg-shell” found
A:此情況屬于正常現象,在編譯命令執行完畢後,RK3568開發闆連接顯示屏時即可觀察到QT程序的界面已正常呈現。
11:Linux系統在使用串口和其他傳感器模塊,會發生丢少量字節,怎樣保證串口不丢失數據?
可嘗試修改設備樹中與串口相關的配置,以啟用直接内存訪問(DMA)模式。具體操作步驟包括在對應的串口配置函數中,添加如下配置:
dma-names = “tx” , “rx”;
通過啟用DMA模式,可以更有效地管理串口數據的傳輸,進而減少數據丢失的風險。
12:Linux/Ubuntu 通過make ARCH=arm64 menuconfig 配置内核後沒有生效,是什麼原因?
在Linux内核編譯過程中,使用menuconfig命令主要是用于生成和修改.config文件,該文件包含了内核編譯時的各種配置選項。然而,如果在執行menuconfig後,又通過編譯腳本(如build.sh)來生成鏡像,且該腳本中包含make defconfig命令,那麼原本通過menuconfig設置的.config文件可能會被make defconfig命令重新生成的.config文件覆蓋。
基于這一原理,要使menuconfig的配置生效,可以采取以下兩種方法:
①、直接編輯defconfig文件:
找到與你的目标硬件(如飛淩嵌入式RK3568開發闆)相對應的配置文件,通常位于kernel/arch/arm64/configs/目錄下,文件名為OK3568-C-linux_defconfig。你可以直接編輯這個文件,将需要的配置選項添加進去,或者基于這個文件創建一個新的配置文件。然後,在編譯時,使用make ARCH=arm64 OK3568-C-linux_defconfig命令來生成.config文件,這樣.config文件就會包含你在defconfig文件中設置的配置選項。
②、修改編譯腳本:
打開你的build.sh編譯腳本,找到其中包含make defconfig命令的行(第509行),并将其注釋掉。這樣,在執行編譯腳本時,就不會再執行make defconfig命令,從而避免覆蓋通過menuconfig設置的.config文件。
13:在Linux/Ubuntu系統上解壓Android源碼時遇到“EOF歸檔失敗”的錯誤
遇到“EOF歸檔失敗”的錯誤通常意味着壓縮包在下載或傳輸過程中可能已損壞,或者解壓時使用的文件不完整。為了解決這個問題,請按照以下步驟操作:
①、驗證MD5碼:
首先,需要确認你下載的壓縮包的MD5碼是否與提供的一緻。MD5碼是一種校驗和,用于驗證文件的完整性和真實性。可以使用md5sum命令(在Linux/Ubuntu上)來計算下載的壓縮包的MD5碼,并将其與提供的MD5碼進行比較。
如果MD5碼不一緻,那麼很可能是文件在下載過程中出現了損壞,或者下載的不是正确的文件。此時,應該重新下載文件,并确保下載過程中沒有中斷。
②、檢查壓縮包數量:
如果MD5碼一緻,但解壓時仍然出現錯誤,那麼需要注意,RK3568系闆卡的源碼包是以切包的方式存儲的,即生成了多個壓縮包(如.aa, .ab, .ac等,統稱為a*壓縮包)。在解壓前,需要将這些壓縮包合并成一個完整的壓縮包。
③、合并壓縮包:
使用cat命令将多個壓縮包合并成一個完整的壓縮包。例如 cat OK3568-linux-source.tar.bz2.a* > OK3568-linux-source.tar.bz2,這條命令會将所有以OK3568-linux-source.tar.bz2.a開頭的文件合并成一個名為OK3568-linux-source.tar.bz2的完整壓縮包。
④、解壓合并後的壓縮包:
使用tar命令 tar -xvf OK3568-linux-source.tar.bz2 解壓合并後的壓縮包,這條命令會解壓OK3568-linux-source.tar.bz2文件,并将其内容提取到當前目錄下。
請确保在執行這些步驟時,你有足夠的磁盤空間和正确的權限來訪問和修改這些文件。如果問題仍然存在,請檢查你的系統環境是否支持解壓該類型的壓縮包,或者嘗試在不同的系統或環境中進行解壓。
14:Android 源碼編譯不通過?
有用戶反饋,在編譯3568Android源碼的過程中,首次編譯會遇到錯誤,但再次編譯時卻能成功,且之前的報錯似乎并未對最終的編譯結果産生影響。
針對用戶反饋的這一問題,我們注意到Android源碼編譯前需要執行兩條關鍵命令,它們分别是:
①、source build/envsetup.sh
②、lunch ok3568_r-userdebug
這兩條命令的主要作用是配置編譯所需的環境變量,這些配置是臨時的,它們與當前的終端窗口緊密相關。若用戶在新建的終端窗口中執行編譯操作,那麼需要重新執行這兩條命令,以确保環境變量得到正确配置。
15:Android手冊内沒有單獨燒寫部分,是不是不支持單獨燒寫?
A:Android系統在經曆過一次全編譯後,是支持單獨編譯和燒寫的。
Q:源碼編譯過程中電壓域配置錯誤導緻内核編譯失敗的解決方案
在源碼編譯過程中,若因圖形界面配置錯誤電壓域而導緻内核編譯失敗,首先,确認你正在編譯的是Linux系統、Forlinx Desktop系統還是Android系統,這幾個操作系統的編譯和修複步驟略有不同。可按照以下步驟進行故障排查與修複
①、針對Linux系統與Forlinx Desktop系統
定位并删除臨時文件:
首先,需定位至内核設備樹(DTS)文件所在的目錄。在Ubuntu系統中,若使用飛淩嵌入式提供的OK3568開發闆源碼,該目錄通常位于~/OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip。在此目錄下,查找名為.OK3568-C-linux.dtb.dts.tmp.domain的臨時文件,并使用rm命令将其删除。執行ls -a命令可确認文件是否已成功删除。
重新編譯内核鏡像:
删除臨時文件後,返回至Linux源碼的根目錄(如~/OK3568-linux-source),并執行編譯腳本(如./build.sh)以重新編譯内核鏡像。
②、針對Android系統
定位并删除臨時文件:
對于Android系統,同樣需定位至内核設備樹(DTS)文件所在的目錄,該目錄在Android源碼中通常位于~/android-ok3568/OK3568-android11-source/kernel/arch/arm64/boot/dts/rockchip。在此目錄下,查找名為.OK3568-C-android.dtb.dts.tmp.domain的臨時文件,并使用rm命令将其删除。執行ls -a命令确認文件删除情況。
設置編譯環境并重新編譯:
删除臨時文件後,返回至Android源碼的根目錄(如~/android-ok3568/OK3568-android11-source),并執行以下命令以設置編譯環境、選擇編譯目标并重新編譯鏡像:
source build/envsetup.sh:設置Android編譯環境變量。
lunch ok3568_r-userdebug:選擇編譯目标配置。
./build.sh -UKAup:執行編譯命令,其中-UKAup參數可能根據具體編譯需求而有所調整。
相關産品 >
-
FET3568-C核心闆
RK3568性能強而穩 國産芯|飛淩嵌入式RK3568系列核心闆,采用瑞芯微國産高性能AI處理器RK3568設計生産,RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價比在同類産品中具有較高優勢,RK3568處理器是一款定位中高端的通用型SoC, 飛淩RK3568核心闆主要面向工業互聯網、HMI、NVR存儲、車載中控、工業網關等領域。目前RK3568系列已經批量穩定出貨
了解詳情 -
OK3568-C開發闆
強而穩,國産芯,1Tops算力,多路高速接口|飛淩RK3568系列RK3568開發闆基于國産工業級AI處理器RK3568四核64位Cortex-A55 處理器設計。RK3568作為國産化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達到1Tops,飛淩RK3568系列核心闆提供瑞芯微RK3568規格書_datasheet_數據手冊_原理圖等,