RK3576 開發(fā)板 Docker 編譯實戰(zhàn)|Ubuntu22.04 編譯環(huán)境搭建方案
Forlinx
2026-03-10 13:04:00
RK3576 開發(fā)板
Docker 編譯
作者簡介
我是燕南無聲,一名擁有12年嵌入式開發(fā)經(jīng)驗的工程師,長期專注于嵌入式開發(fā)板的源碼編譯、開發(fā)環(huán)境搭建及底層驅(qū)動開發(fā),擅長運用容器技術(shù)高效解決嵌入式開發(fā)中的多環(huán)境沖突問題。
開發(fā)背景與環(huán)境沖突解決方案選型
我正在基于飛凌RK3576開發(fā)板(OK3576-C開發(fā)板)開展源碼開發(fā)工作,當前開發(fā)虛擬機為Ubuntu 18.04系統(tǒng)。由于編譯RK3576開發(fā)板源碼必須依賴Ubuntu 22.04環(huán)境,且我需在該虛擬機上維護其他平臺的源碼,無法直接升級系統(tǒng),因此面臨編譯環(huán)境與現(xiàn)有開發(fā)環(huán)境沖突的核心痛點。
嵌入式開發(fā)中,不同開發(fā)板的源碼編譯對系統(tǒng)版本、編譯工具鏈有著嚴格要求,飛凌RK3576開發(fā)板的6.1.75 Forlinx Desktop24.04版本源碼,僅能在Ubuntu 22.04環(huán)境下正常編譯。若直接將虛擬機Ubuntu 18.04升級至22.04,會破壞原有其他平臺的源碼編譯環(huán)境,增加后續(xù)維護成本;若重新搭建虛擬機,不僅造成開發(fā)資源冗余,還會降低跨虛擬機的源碼文件管理效率,不利于多平臺源碼的同步維護與調(diào)試。
Docker作為輕量級容器技術(shù),可實現(xiàn)完全的環(huán)境隔離,無需修改虛擬機系統(tǒng),就能快速搭建指定版本的編譯環(huán)境;同時其支持本地目錄掛載功能,可直接調(diào)用虛擬機的源碼文件,完美解決了本次開發(fā)中的環(huán)境沖突問題,這也是嵌入式多平臺開發(fā)中解決環(huán)境兼容問題的常用高效方案。
具體實施步驟
為高效解決該環(huán)境沖突問題,我采用Docker搭建Ubuntu 22.04獨立編譯環(huán)境,全程操作基于虛擬機Ubuntu 18.04,具體實施步驟如下:
1. 配置網(wǎng)絡環(huán)境
登錄Docker Hub需科學上網(wǎng),通過CLASH配置好代理及上網(wǎng)參數(shù),確保鏡像下載網(wǎng)絡通暢,避免因網(wǎng)絡問題導致鏡像拉取失敗。
2. 下載Ubuntu22.04 Docker鏡像
訪問Docker Hub官網(wǎng)(https://hub.docker.com/search?q=ubuntu22.04),該網(wǎng)站搜索結(jié)果有非常多的Ubuntu22.04相關(guān)鏡像,主要包括homebrew/ubuntu22.04、openroad/ubuntu22.04、jharwell/ubuntu22.04等。其中homebrew/ubuntu22.04鏡像內(nèi)置Homebrew開源包管理器,更適合作為嵌入式編譯基礎(chǔ)環(huán)境,因此在虛擬機終端執(zhí)行以下拉取命令,選擇該鏡像:
docker pull homebrew/ubuntu22.04
拉取完成后,執(zhí)行sudo docker images命令,可查看已下載的鏡像信息,確認目標鏡像ID,本次拉取的homebrew/ubuntu22.04鏡像ID為80fdda227e1a。查看結(jié)果示例如下:
|
forlinx@forlinx:/T_2T/forlinx/ok3576/docker$ sudo docker images [sudo] password for forlinx: REPOSITORY TAG IMAGE ID CREATED SIZE #這是我們下拉取的鏡像 homebrew/ubuntu22.04 latest 80fdda227e1a 7 days ago 1.58GB ubuntu 22.04 5a81c4b8502e 8 months ago 77.8MB <none> <none> 990c7d4bdad8 12 months ago 1.12GB okt507-android7.1-docker18_09_3-ubuntu14_04_6_lts latest f4b83c391255 2 years ago 693MB jianghaiyang/ubuntu12.04 static_web c3cbc44231c0 7 years ago 228MB |
3. 啟動容器并掛載源碼路徑
為滿足飛凌RK3576開發(fā)板的源碼編譯需求,啟動容器時需將虛擬機源碼路徑掛載至容器內(nèi),執(zhí)行以下命令:
sudo docker run --privileged=True --rm \ --mount type=bind,source=/T_2T/forlinx/ok3588/Linux-code/OK3588_Linux_fs,target=/mnt \ -i -t 80fdda227e1a
命令中,source為虛擬機源碼絕對路徑,target為容器內(nèi)掛載路徑,80fdda227e1a為已下載的Ubuntu22.04鏡像ID。進入容器后,執(zhí)行cd /mnt/即可訪問虛擬機源碼并執(zhí)行編譯命令。需注意:直接拉取的原生鏡像可能無法直接完成SDK編譯,需補充后續(xù)依賴工具;且退出容器后,所有環(huán)境配置會全部丟失,后續(xù)將介紹環(huán)境留存方法。
4. 補充編譯所需工具
原生Ubuntu22.04鏡像缺少嵌入式源碼編譯所需的基礎(chǔ)工具,需在容器內(nèi)執(zhí)行以下命令,安裝所有必要依賴:
sudo apt-get install build-essential libncurses* lzop net-tools
5. 留存配置好的編譯環(huán)境
補充依賴工具后,容器可正常編譯飛凌RK3576開發(fā)板源碼,但退出容器后,所有環(huán)境配置會丟失。為實現(xiàn)環(huán)境復用,需將配置好的容器保存為鏡像,提供以下兩種保存方式,適配不同使用場景:
方式一:云保存(需科學上網(wǎng))
適用于跨設備遠程復用環(huán)境,需提前在Docker Hub注冊個人倉庫(本次注冊倉庫為forlinx123/linux_3576),具體步驟如下:
① 查看運行中的容器ID(本次為dbd2586e6e36);
sudo docker run --privileged=True --rm --mount type=bind,source=/T_2T/forlinx/ok3588/Linux-code/OK3588_Linux_fs,target=/mnt -i -t 80fdda227e1a
② 在虛擬機打開1個新終端,執(zhí)行以下命令將當前容器提交為本地鏡像:
sudo docker commit -m="linux_3576" -a="forlinx123" dbd2586e6e36 forlinx123/linux_3576:v1
參數(shù)說明:-m:指定提交描述信息;-a:指定鏡像作者;dbd2586e6e36:當前運行的容器ID;forlinx123/linux_3576:v1:目標鏡像名(格式為“作者名/倉庫名:標簽”,需與Docker Hub注冊的倉庫信息一致)。
③ 執(zhí)行以下命令登錄Docker Hub,驗證身份:
sudo docker login -u forlinx123 -p 這里換成自己的密碼
④ 登錄成功后,將本地鏡像推送到遠程倉庫,完成云保存:
sudo docker push forlinx123/linux_3576:v1
后續(xù)跨設備使用時,直接執(zhí)行docker pull forlinx123/linux_3576:v1命令,即可拉取配置好的編譯環(huán)境鏡像,無需重復配置。
方式二:本地保存(無需網(wǎng)絡)
適用于局域網(wǎng)內(nèi)設備間環(huán)境復用,無需網(wǎng)絡,核心是將配置好的鏡像打包為tar文件,具體步驟如下:
① 同云保存步驟①②,提交容器為本地鏡像;
② 執(zhí)行以下命令,將本地鏡像打包為tar文件:
sudo docker save -o linux_3576_v1.tar forlinx123/linux_3576:v1
參數(shù)說明:-o:指定輸出的tar文件名稱;forlinx123/linux_3576:v1:需保存的本地鏡像完整名稱。
③ 其他設備需使用該環(huán)境時,執(zhí)行以下命令加載tar包,即可快速恢復編譯環(huán)境:
sudo docker load -i linux_3576_v1.tar
本次基于homebrew/ubuntu22.04鏡像制作的飛凌RK3576 AMP編譯容器,tar包大小約3.07G,建議開發(fā)者自行按步驟制作容器tar包。 如需壓縮包請聯(lián)系客服索取。
實踐驗證與開發(fā)總結(jié)
通過上述全部步驟,我成功在Docker中搭建了Ubuntu 22.04編譯環(huán)境,掛載虛擬機源碼后,可正常執(zhí)行飛凌RK3576開發(fā)板源碼的全編譯命令;補充編譯工具后,編譯過程無任何環(huán)境相關(guān)報錯,最終實現(xiàn)了在不修改虛擬機Ubuntu 18.04系統(tǒng)的前提下,完成OK3576源碼編譯,同時保留了原有其他平臺源碼的維護環(huán)境。
將配置好的容器保存為鏡像后,我在另一臺Ubuntu虛擬機中,分別通過Docker Hub拉取和本地tar包加載兩種方式測試,均能快速恢復完整編譯環(huán)境,無需重新安裝依賴工具,大幅提升了開發(fā)效率。本次實踐再次驗證,在嵌入式多平臺開發(fā)中,容器技術(shù)是解決環(huán)境隔離與環(huán)境復用問題的高效方案之一,通過標準化的鏡像保存與分發(fā),可有效降低跨設備、跨團隊的開發(fā)環(huán)境搭建成本。
結(jié)合本次實踐經(jīng)驗,使用Docker搭建嵌入式編譯環(huán)境時,需重點注意三點:一是鏡像基礎(chǔ)版本的合理選擇,優(yōu)先選擇內(nèi)置必要工具(如Homebrew)的鏡像,減少后續(xù)依賴安裝工作量;二是源碼路徑的正確掛載,避免因路徑錯誤導致無法訪問源碼;三是編譯工具的完整安裝,確保滿足源碼編譯需求。同時建議及時將配置好的環(huán)境保存為鏡像,避免重復進行環(huán)境配置。
Docker常用命令
1. 查看所有鏡像:sudo docker images
2. 刪除單個鏡像:sudo docker rmi 鏡像名:標簽(示例:sudo docker rmi homebrew/ubuntu22.04、sudo docker rmi forlinx123/linux_3576:v1)
3. 查看正在運行的容器:sudo docker ps
咨詢立即獲得專屬報價
華北區(qū)負責人
華東區(qū)負責人
華南區(qū)負責人
中西區(qū)負責人
相關(guān)產(chǎn)品 >
-
FET3576-C核心板
飛凌嵌入式RK3576核心板集成了強大的處理器和豐富的接口,提供出色的計算能力和擴展性。RK3576核心板以其卓越的性能、低功耗和穩(wěn)定性,成為工業(yè)、AIoT、邊緣計算、智能移動終端等領(lǐng)域的理想選擇。無論是數(shù)據(jù)處理還是邊緣計算,RK3576都能為項目提供強大的硬件支持。核心板推薦選擇飛凌嵌入式瑞芯微系列RK3576J業(yè)級核心板、RK3576高性能核心板。 了解詳情
-
OK3576-C開發(fā)板
RK3576開發(fā)板CPU選用瑞芯微RK3576,采用核心板+底板分體式設計,采用4個100Pin板對板連接器的方式將處理器的功能引腳以最便利的方式全部引出,并針對不同的功能做了深度優(yōu)化,方便用戶二次開發(fā)的同時簡化用戶設計,為您的項目提供良好的評估及設計依據(jù)。RK3576是瑞芯微專為AIoT市場打造的一款高算力、高性能、低功耗的國產(chǎn)化應用處理器,集成了4個ARM Cortex-A72和4個 ARM Cortex-A53高性能核;內(nèi)置6TOPS超強算力NPU;嵌入式3D GPU加之帶有MMU的專用2D硬件引擎,最大限度提升顯示性能;H.265超清硬解碼,最高支持8K分辨率。 了解詳情

