百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux文件系统打包及镜像制作,触觉智能RK3562开发板演示

gudong366 2025-05-15 18:20 8 浏览

本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成镜像批量烧录。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。


工具获取

本文所介绍的方法需要使用到Linux环境下的一些工具。工具可联系触觉智能客服或留言获取。下载Ubuntu PC环境后,需要解包后使用,解包方法如下:

nbsp;tar -vxf ido-pack-tools.tar -C ./

解包后的文件内容如下:

工具包脚本默认芯片信息是rk3562,如果使用其他芯片,则需要修改芯片信息,对应路径
ido-pack-tools/mkupdate.sh


文件系统打包及文件系统镜像制作

  • 从开发板中打包出文件系统

先在开发板中插入U盘或TF卡,然后通过mount命令查看文件系统分区节点,如下所示:

root@ido:/# mount
/dev/mmcblk2p8 on / type ext4 (rw,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=996844k,nr_inodes=249211,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,size=1008396k,nr_inodes=252099)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=201680k,nr_inodes=252099,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,nr_inodes=252099)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=1008396k,nr_inodes=252099,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=201676k,nr_inodes=252099,mode=700)
tmpfs on /run/user/1001 type tmpfs (rw,nosuid,nodev,relatime,size=201676k,nr_inodes=252099,mode=700,uid=1001,gid=1001)
gvfsd-fuse on /run/user/1001/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1001,group_id=1001)
/dev/mmcblk2p7 on /media/ido/oem type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2)
/dev/mmcblk2p6 on /media/ido/userdata type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2)
/dev/sda1 on /media/ido/U type vfat (rw,nosuid,nodev,relatime,uid=1001,gid=1001,fmask=0022,dmask=0022,codepage=936,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

由上面命令第2和29行可以看到

/dev/mmcblk2p8 on/type ext4 (rw,relatime),/dev/mmcblk2p8

挂载到根目录,/dev/mmcblk2p8就是我们需要的节点。U盘挂载目录为/media/ido/U

# 挂载根文件目录
nbsp;sudo mount /dev/mmcblk2p8 /mnt
# 进入挂载文件夹
nbsp;cd /mnt
nbsp;rm var/lib/misc/firstrun
nbsp;sudo tar -czf  /media/ido/U/ido-rootfs.tar.gz ./*
nbsp;sync

注意:打包使用tar命令需要用sudo权限。

  • 压缩包解压

将打包出的压缩包,解压至Ubuntu PC端环境,命令如下:

nbsp;mkdir -p your/target/path/
nbsp;sudo tar -xzf ido-rootfs.tar.gz -C your/target/path/
  • 文件系统镜像制作

查看文件系统大小,如下所示:

nbsp;sudo du -sh your/target/path/

制作镜像需要的脚本文件mk-rootfs-image.sh,文件位于工具包的pack-tools/roofs_mk/目录。根据系统大小修改 mk-rootfs-image.sh 脚本第25行的参数,默认镜像大小设置为4096MB。

dd if=/dev/zero of=${ROOTFSIMAGE} bs=1M count=0 seek=4096

注意:一般脚本中设置的镜像大小需要大于 du 返回值。

nbsp;sudo cd pack-tools/roofs_mk/
nbsp;sudo ./mk-rootfs-image.sh ../../your/target/path/

脚本正常运行退出后,可在目录得到rootfs.img的文件系统镜像。


制作整包固件update.img

前面文章得到了rootfs.img散包固件,接下来我们制作update.img整包固件。

此处分两种情况:

1. 只修改文件系统,只需将原本烧录的update.img镜像解包后,替换新制作的rootfs.img

2. 如果除了文件系统外还有其他修改,则可以修改sdk源码编译脚本,编译的时候使用自定义的文件系统。


  • 只修改文件系统的情况

将需要解包的完整镜像文件拷贝到工具包 pack-tools 目录下,此处以完整镜像
IDO-EVB3562-V1B_MIPI-800x1280_Ubuntu20_QT5_240719.img
为例。

执行解包脚本,将update镜像按照分区拆分出分区镜像。

nbsp;./unpack.sh IDO-EVB3562-V1B_MIPI-800x1280_Ubuntu20_QT5_240719.img

执行结果如下:

分区文件解包存放到./output/目录

将文章第2节中打包好的文件系统镜像复制替换到./output/rootfs.img,文件名称必须为rootfs.img

最后执行./mkupdate.sh脚本将分区镜像合并为一个完整的镜像update.img

脚本运行成功后,将会产生新的整包文件./output/update.img

  • 除了文件系统外还有其他修改的情况

不同SDK修改的地方不一致,在sdk中新建自定义目录myrootfs,把rootfs.img放入其中(myrootfsbuild.sh同级目录)。

mkdir myrootfs
#将rootfs.img放入myrootfs中
ls myrootfs/rootfs.img

情况一:直接修改build.sh,使其编译时使用我们的rootfs.img打包。在build.sh的function build_rootfs()函数中,添加24-27行代码。

function build_rootfs(){
        check_config RK_ROOTFS_IMG || return 0
        RK_ROOTFS_DIR=.rootfs
        ROOTFS_IMG=${RK_ROOTFS_IMG##*/}
        rm -rf $RK_ROOTFS_IMG $RK_ROOTFS_DIR
        mkdir -p ${RK_ROOTFS_IMG%/*} $RK_ROOTFS_DIR
        case "$1" in
                yocto)
                        build_yocto
                        ln -rsf yocto/build/latest/rootfs.img \
                                $RK_ROOTFS_DIR/rootfs.ext4
                        ;;
                debian)
                        build_debian
                        ln -rsf debian/linaro-rootfs.img \
                                $RK_ROOTFS_DIR/rootfs.ext4
                        ;;
                distro)
                        build_distro
                        for f in $(ls distro/output/images/rootfs.*);do
                                ln -rsf $f $RK_ROOTFS_DIR/
                        done
                        ;;
              	myrootfs)
                      	ln -rsf myrootfs/rootfs.img \
                          	$RK_ROOTFS_DIR/rootfs.ext4
                      	;;
                *)
                        build_buildroot
                        for f in $(ls buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.*);do
                                ln -rsf $f $RK_ROOTFS_DIR/
                        done
                        ;;
        esac

在执行build.sh lunch后,执行以下命令:

export RK_ROOTFS_SYSTEM=myrootfs

最后执行build.sh即可生成包含了rootfs.imgupdate.img整包固件。

./build.sh

rockdev/update.img即为我们所需的完整固件。


情况二:如果build.sh脚本中没有function build_rootfs()函数,则修改

./device/rockchip/common/scripts/mk-rootfs.sh,添加以下8-12行与35行代码:

....省略部分代码........
build_ubuntu20()
{
ln -rsf "$PWD/ubuntu/rootfs-ubuntu20.04-desktop.img" $ROOTFS_DIR/rootfs.ext4
	finish_build build_ubuntu20 $@
}


build_myrootfs()
{
ln -rsf "$PWD/myrootfs/rootfs.img" $ROOTFS_DIR/rootfs.ext4
	finish_build build_myrootfs $@
}


....省略部分代码........
build_hook()
{
	check_config RK_ROOTFS_TYPE || return 0
if [ -z "$1" -o "$1" = rootfs ]; then
		ROOTFS=${RK_ROOTFS_SYSTEM:-buildroot}
else
		ROOTFS=$1
fi
	ROOTFS_IMG=rootfs.${RK_ROOTFS_TYPE}
	ROOTFS_DIR="$RK_OUTDIR/rootfs"
echo "=========================================="
echo "          Start building rootfs($ROOTFS)"
echo "=========================================="
rm -rf "$ROOTFS_DIR"
mkdir -p "$ROOTFS_DIR"
case "$ROOTFS" in
		yocto) build_yocto "$ROOTFS_DIR" ;;
		debian) build_debian "$ROOTFS_DIR" ;;
		buildroot) build_buildroot "$ROOTFS_DIR" ;;
		ubuntu) build_ubuntu20 "$ROOTFS_DIR" ;;
		myrootfs)build_myrootfs "$ROOTFS_DIR" ;;
		*) usage ;;
esac

修改

./device/rockchip/common/configs/Config.in.rootfs,添加以下7、20、21行代码:

config RK_ROOTFS_SYSTEM
        string
        default "buildroot" if RK_ROOTFS_SYSTEM_BUILDROOT
        default "debian" if RK_ROOTFS_SYSTEM_DEBIAN
        default "yocto" if RK_ROOTFS_SYSTEM_YOCTO
        default "ubuntu" if RK_ROOTFS_SYSTEM_UBUNTU
        default "myrootfs" if RK_ROOTFS_SYSTEM_MYROOTFS
choice
        prompt "default rootfs system"
        help
          Default rootfs system.
config RK_ROOTFS_SYSTEM_BUILDROOT
        bool "buildroot"
        depends on RK_BUILDROOT_BASE_CFG != ""
config RK_ROOTFS_SYSTEM_DEBIAN
        bool "debian"
        depends on RK_DEBIAN_VERSION != ""
config RK_ROOTFS_SYSTEM_UBUNTU
        bool "ubuntu"
config RK_ROOTFS_SYSTEM_MYROOTFS
        bool "myrootfs"

在执行build.sh lunch命令后,执行以下命令:

export RK_ROOTFS_SYSTEM=myrootfs

最后执行build.sh命令,即可生成包含了rootfs.imgupdate.img整包固件。

./build.sh

rockdev/update.img即为我们所需的完整固件。

相关推荐

梦幻诛仙12职业1亿元宝版本架设教程(包含资源下载)

架设教程:1;上传脚本zx到bin文件夹,给权限chmod-R777/bin2;输入zx安装宝塔面板输入对应序号,中途输入Y继续3;安装好之后,会给个宝塔地址及账号密码,复制地址...

Java零基础入门,科普Java你应该了解什么

最近很多人问我想学Java但是一点基础没有,网上看了一堆学习线路图还是无从下手。今天耗时3小时整理了一套保姆级的Java入门教程,建议收藏按照线路图一点点学习。一、Java的概况Java是1995年6...

01.Java发展历史(java发展历史简要)

1.Java发展历史Java由SunMicrosystems公司(现为Oracle公司)的JamesGosling及其团队在1991年开发,最初命名为"Oak",后改名为"...

Ubuntu16.04.1安装Java8(ubuntu终端安装java)

上篇文章讲解了怎么在Windows下安装Java8《Windows10安装Java8》,这里讲解下怎么在Linux下安装Java。由于之前已经安装了Ubuntu16.04.1《VmwareWorkst...

性能测试能力提升-JVM GC监控和优化

一、背景接着上一篇的知识:性能测试能力提升-JVMGC原理,本篇文章,我们将主要介绍JVMGC监控和优化相关的知识:命令行方式监控GC图形化方式监控GC什么时候需要开始GC优化?GC优化的目的GC...

Spring Boot Jar 包秒变 Docker 镜像实现多环境部署

你是否在互联网大厂后端开发工作中,遇到过这样的困扰?当完成一个SpringBoot项目开发,准备将Jar包部署到不同环境时,却发现各个环境依赖不同、配置复杂,部署过程繁琐又容易出错,不仅耗费...

「JDK 11」关于 Java 模块系统,看这一篇就够了

继2014年3月Java8发布之后,时隔4年,2018年9月,Java11如期发布,其间间隔了Java9和Java10两个非LTS(LongTermSupp...

对Java学习的10条建议(对java的认识和理解)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

JAVA入门教程-第1章 概述(java入门指南)

大道至简-JAVA入门教程在本教程中,你将学习Java语言的基础知识。Java基础内容涵盖:Java基础概念、Java词法结构、Java数组、Java流程控制、Java字符串、Java...

推荐一款Java音频视频编码器,很赞

Jave2是什么JAVE2(Java音频视频编码器)库是ffmpeg项目上的Java包装器。开发人员可以利用JAVE2将音频和视频文件从一种格式转码为另一种格式。在示例中,您可以将AVI文件转换为MP...

【JAVA教程】JAVA入门及开发环境安装

一、Java开发环境概述Java开发需要三个核心组件:JDK(JavaDevelopmentKit)-Java开发工具包,开发、编译、调试Java程序JRE(JavaRuntimeE...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

记Tomcat优化方案(tomcat优化的几种方法)

Tomcat服务吞吐量评估方案问题:评估方案在一台8核16G的linux服务器上,使用tomcat容器部署服务。在正常情况下如何评估这个tomcat服务可处理的连接数,即服务的吞吐量,请在正常情况下考...

JVM GC诡异问题排查,k8s差点害死我……

前言本文将通过一个真实的生产环境案例,详细展示如何系统性地排查和解决JVM垃圾收集问题。这个案例涵盖了从问题发现、分析诊断到最终解决的完整过程,对于理解JVM调优实战具有重要的参考价值。系统背景我们的...

Thorium Reader - 功能强大的跨平台免费电子书阅读器

在日常阅读日益普及的今天,选择一款合适的电子书阅读器至关重要。ThoriumReader作为一款独具特色的阅读应用,正逐渐在众多同类产品中崭露头角,为用户带来了卓越的阅读体验。  跨平台的便捷性...