/ ai资讯

ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行根系统的定制

发布时间:2025-07-02 17:46:25

ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频最高可达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

ELF 2开发板已经适配了Linux 5.10及Elf2 Desktop 22.04操作系统,其中Elf2 Desktop 22.04系统是专为嵌入式设计的Ubuntu base。虽然其apt-get 等命令支持在线安装软件,但存在明显缺陷:重新烧写镜像后软件会丢失,需再次安装。 这在批量部署多块开发板时,工作量巨大。因此,将软件预先集成到镜像中,实现烧录后无需重新安装,成为亟待解决的问题。

本文将围绕如何在 【RK3588】ELF 2开发板上基于 Ubuntu 22.04 操作系统进行根文件系统的定制展开详细阐述。

1、 开发环境安装QEMU

QEMU 是一款轻量级硬件模拟器,支持多种架构,如 ARM、x86 和 x86-64。 它应用广泛,是 Xen 虚拟化平台和 Android 模拟器等项目的底层基础。在嵌入式领域,开发者常利用 QEMU 深入研究 Linux 系统,进行文件系统优化等工作。

下面我们开始在开发环境(需要开发环境能上网)中安装QEMU,如下:

(1)更新下载

elf@ubuntu:~sudo apt-getupdate

(2)执行命令安装

elf@ubuntu:~sudo apt-getinstall qemu-user-static

2、文件系统挂载

将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 bak
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ cp jammy-rootfs.img bak/

(2)文件系统扩容

文件系统扩容的大小不超过根分区大小(默认根分区为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为块的数量,一个块的大小为4K。

(例如扩容到12G,12G=12x1024x1024=12582912K=3145728x4K,SIZE参数为3145728)

(3)创建挂载目录,并将文件系统挂载到该目录

elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ mkdir rootfs
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$ sudo mount jammy-rootfs.img rootfs/

3、修改配置

(1)将开发环境中的qemu-arm-static拷贝到desktop文件系统中

elf@ubuntu:~/work/ELF2-linux-source/ubuntu$sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/


(2)将开发环境中的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 universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy main universe

4、文件系统隔离

通过chroot进行虚拟化隔离,将隔离步骤写入到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目录下,赋予权限后,通过参数-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、文件系统修改

前面我们挂载了文件系统,已将文件系统挂载到了QEMU模拟器,下面就可以安装我们所需要的软件了。

(1)更新下载源

root@ubuntu:/# apt update

(2)软件安装与卸载

至此,便可以安装所需软件了,在这里用apt-get安装自己所需软件,根据所需安装。我们这里来安装一个minicom串口测试工具。如下:


root@ubuntu:/# exit
elf@ubuntu:~/work/ELF2-linux-source/ubuntu$

此外通过dpkg --list命令查看所有安装的软件,如果想裁剪文件系统,可以使用【apt-get remove 软件包名称】进行卸载相关软件。

(3)安装完成后,exit退出QEMU

root@ubuntu:/# exit

(4)执行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

6、打包镜像

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开发板上进行根文件系统的定制工作,这一过程不仅简化了批量生产中的软件安装流程,还显著提升了开发效率。各位小伙伴如果在实践过程遇见各种问题,欢迎随时留言探讨。

  • 单片机 单片机 关注

    关注

    6067

    文章

    44969

    浏览量

    649138

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com