ELF 2開發(fā)板基于瑞芯微RK3588高性能處理器設計,擁有四核ARM Cortex-A76與四核ARM Cortex-A55的CPU架構,主頻最高可達2.4GHz,內置6TOPS算力的NPU,這一設計讓它能夠輕松駕馭多種深度學習框架,高效處理各類復雜的AI任務。

?
ELF 2開發(fā)板已經適配了Linux 5.10及Elf2 Desktop 22.04操作系統,其中Elf2 Desktop 22.04系統是專為嵌入式設計的Ubuntu base。雖然其apt-get 等命令支持在線安裝軟件,但存在明顯缺陷:重新燒寫鏡像后軟件會丟失,需再次安裝。 這在批量部署多塊開發(fā)板時,工作量巨大。因此,將軟件預先集成到鏡像中,實現燒錄后無需重新安裝,成為亟待解決的問題。
?
本文將圍繞如何在 【RK3588】ELF 2開發(fā)板上基于 Ubuntu 22.04 操作系統進行根文件系統的定制展開詳細闡述。
?
QEMU 是一款輕量級硬件模擬器,支持多種架構,如 ARM、x86 和 x86-64。 它應用廣泛,是 Xen 虛擬化平臺和 Android 模擬器等項目的底層基礎。在嵌入式領域,開發(fā)者常利用 QEMU 深入研究 Linux 系統,進行文件系統優(yōu)化等工作。
?
下面我們開始在開發(fā)環(huán)境(需要開發(fā)環(huán)境能上網)中安裝QEMU,如下:
(1)更新下載源
elf@ubuntu:~?sudo apt-get?update
?
(2)執(zhí)行命令安裝
elf@ubuntu:~?sudo apt-get?install qemu-user-static
將SDK中ELF 2 Desktop 文件系統鏡像jammy-rootfs.img進行掛載,掛載后可以被訪問操作。
?
(1)文件系統備份
操作前先對文件系統鏡像備份,如若操作出現異常,可回退使用最初鏡像。
elf@ubuntu:~$?cd work/ELF2-linux-source/ubuntu/ ??#SDK源碼路徑需修改為個人路徑elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?mkdir bakelf@ubuntu:~/work/ELF2-linux-source/ubuntu$?cp jammy-rootfs.img bak/
?
(2)文件系統擴容
文件系統擴容的大小不超過根分區(qū)大?。J根分區(qū)為14G)
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?e2fsck -f jammy-rootfs.imgelf@ubuntu:~/work/ELF2-linux-source/ubuntu$?resize2fs jammy-rootfs.img?3145728
?
resize2fs IMAGE SIZE
IMAGE為要修改的鏡像名稱;
SIZE為塊的數量,一個塊的大小為4K。
(例如擴容到12G,12G=12x1024x1024=12582912K=3145728x4K,SIZE參數為3145728)
?
(3)創(chuàng)建掛載目錄,并將文件系統掛載到該目錄
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?mkdir rootfself@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo mount jammy-rootfs.img rootfs/
?
(1)將開發(fā)環(huán)境中的qemu-arm-static拷貝到desktop文件系統中
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/
?
(2)將開發(fā)環(huán)境中的DNS配置拷貝到desktop文件系統中,因為安裝程序時要用絡
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo cp -b /etc/resolv.conf ?rootfs/etc/resolv.conf
?
(3)修改下載源
?sudo vim rootfs/etc/apt/sources.list
?
添加:
deb?http://ports.ubuntu.com/ubuntu-ports/ jammy main universedeb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main universe
?
通過chroot進行虛擬化隔離,將隔離步驟寫入到ch-mount.sh腳本中。
function?mnt() {echo?"MOUNTING"sudo mount -t proc /proc?${2}procsudo mount -t sysfs /sys?${2}syssudo mount -o?bind?/dev?${2}devsudo?chroot?${2}}function?umnt() {echo?"UNMOUNTING"sudo umount?${2}procsudo umount?${2}syssudo umount?${2}dev}if?[?"$1"?==?"-m"?] && [ -n?"$2"?] ;thenmnt?$1?$2elif?[?"$1"?==?"-u"?] && [ -n?"$2"?];thenumnt?$1?$2elseecho?""echo?"Either 1'st, 2'nd or both parameters were missing"echo?""echo?"1'st parameter can be one of these: -m(mount) OR -u(umount)"echo?"2'nd parameter is the full path of rootfs directory(with trailing '/')"echo?""echo?"For example: ch-mount -m /media/sdcard/"echo?""echo?1st parameter :?${1}echo?2nd parameter :?${2}fi
?
ch-mount.sh腳本放到ELF2-linux-source/ubuntu目錄下,賦予權限后,通過參數-m指定掛載路徑:
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo chmod a+x ch-mount.shelf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo ./ch-mount.sh -m rootfs/root@ubuntu:/#
?
前面我們掛載了文件系統,已將文件系統掛載到了QEMU模擬器,下面就可以安裝我們所需要的軟件了。
(1)更新下載源
root@ubuntu:/# apt update
?
(2)軟件安裝與卸載
至此,便可以安裝所需軟件了,在這里用apt-get安裝自己所需軟件,根據所需安裝。我們這里來安裝一個minicom串口測試工具。如下:
root@ubuntu:/# apt-get install minicom
此外通過dpkg --list命令查看所有安裝的軟件,如果想裁剪文件系統,可以使用【apt-get remove 軟件包名稱】進行卸載相關軟件。
?
(3)安裝完成后,exit退出QEMU
root@ubuntu:/# exitelf@ubuntu:~/work/ELF2-linux-source/ubuntu$
?
(4)執(zhí)行ch-mount.sh腳本卸載文件系統,指定參數-u,后打印如下:
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo ./ch-mount.sh -u rootfs/elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?sudo umount rootfs
?
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$?cd ..elf@ubuntu:~/work/ELF2-linux-source$?./build.sh updateimg
在ELF2-linux-source/rockdev路徑下會生成新的update.img。
?
通過以上步驟,我們成功完成了 【RK3588】ELF 2開發(fā)板上進行根文件系統的定制工作,這一過程不僅簡化了批量生產中的軟件安裝流程,還顯著提升了開發(fā)效率。各位小伙伴如果在實踐過程遇見各種問題,歡迎隨時留言探討。
