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

