ELF 2開發(fā)板基于瑞芯微RK3588高性能處理器設(shè)計(jì),擁有四核ARM Cortex-A76與四核ARM Cortex-A55的CPU架構(gòu),主頻最高可達(dá)2.4GHz,內(nèi)置6TOPS算力的NPU,這一設(shè)計(jì)讓它能夠輕松駕馭多種深度學(xué)習(xí)框架,高效處理各類復(fù)雜的AI任務(wù)。
本文將圍繞如何在 【RK3588】ELF 2開發(fā)板上基于 Ubuntu 22.04 操作系統(tǒng)進(jìn)行根文件系統(tǒng)的定制展開詳細(xì)闡述。
1、 開發(fā)環(huán)境安裝QEMU
下面我們開始在開發(fā)環(huán)境(需要開發(fā)環(huán)境能上網(wǎng))中安裝QEMU,如下:
elf@ubuntu:~ sudo apt-get update
(2)執(zhí)行命令安裝
elf@ubuntu:~ sudo apt-get install qemu-user-static
2、文件系統(tǒng)掛載
將SDK中ELF 2 Desktop 文件系統(tǒng)鏡像jammy-rootfs.img進(jìn)行掛載,掛載后可以被訪問操作。
(1)文件系統(tǒng)備份
操作前先對(duì)文件系統(tǒng)鏡像備份,如若操作出現(xiàn)異常,可回退使用最初鏡像。
elf@ubuntu:~$ cd work/ELF2-linux-source/ubuntu/ #SDK源碼路徑需修改為個(gè)人路徑
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ mkdir bak
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ cp jammy-rootfs.img bak/
(2)文件系統(tǒng)擴(kuò)容
文件系統(tǒng)擴(kuò)容的大小不超過根分區(qū)大小(默認(rèn)根分區(qū)為14G)
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ e2fsck -f jammy-rootfs.img
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ resize2fs jammy-rootfs.img 3145728
resize2fs IMAGE SIZE
- IMAGE為要修改的鏡像名稱;
- SIZE為塊的數(shù)量,一個(gè)塊的大小為4K。
(例如擴(kuò)容到12G,12G=12x1024x1024=12582912K=3145728x4K,SIZE參數(shù)為3145728)
(3)創(chuàng)建掛載目錄,并將文件系統(tǒng)掛載到該目錄
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ mkdir rootfs
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ sudo mount jammy-rootfs.img rootfs/
3、修改配置
(1)將開發(fā)環(huán)境中的qemu-arm-static拷貝到desktop文件系統(tǒng)中
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/
(2)將開發(fā)環(huán)境中的DNS配置拷貝到desktop文件系統(tǒng)中,因?yàn)榘惭b程序時(shí)要用絡(luò)
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 universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main universe
4、文件系統(tǒng)隔離
通過chroot進(jìn)行虛擬化隔離,將隔離步驟寫入到ch-mount.sh腳本中。
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
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目錄下,賦予權(quán)限后,通過參數(shù)-m指定掛載路徑:
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ sudo chmod a+x ch-mount.sh
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ sudo ./ch-mount.sh -m rootfs/
root@ubuntu:/#
5、文件系統(tǒng)修改
前面我們掛載了文件系統(tǒng),已將文件系統(tǒng)掛載到了QEMU模擬器,下面就可以安裝我們所需要的軟件了。
(1)更新下載源
root@ubuntu:/# apt update
(2)軟件安裝與卸載
至此,便可以安裝所需軟件了,在這里用apt-get安裝自己所需軟件,根據(jù)所需安裝。我們這里來安裝一個(gè)minicom串口測(cè)試工具。如下:
root@ubuntu:/# apt-get install minicom
此外通過dpkg --list命令查看所有安裝的軟件,如果想裁剪文件系統(tǒng),可以使用【apt-get remove 軟件包名稱】進(jìn)行卸載相關(guān)軟件。
(3)安裝完成后,exit退出QEMU
root@ubuntu:/# exit
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$
(4)執(zhí)行ch-mount.sh腳本卸載文件系統(tǒng),指定參數(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
6、打包鏡像
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ cd ..
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh updateimg
在ELF2-linux-source/rockdev路徑下會(huì)生成新的update.img。
通過以上步驟,我們成功完成了 【RK3588】ELF 2開發(fā)板上進(jìn)行根文件系統(tǒng)的定制工作,這一過程不僅簡(jiǎn)化了批量生產(chǎn)中的軟件安裝流程,還顯著提升了開發(fā)效率。各位小伙伴如果在實(shí)踐過程遇見各種問題,歡迎隨時(shí)留言探討。