rk3588根文件系统制作和导出镜像img

前言

在我们做过根文件系统精简以后,我们需要将目前精简过的根文件系统导出,制成镜像文件,方便生产烧录。

一、准备工作

一台运行着精简根文件系统的RK3588开发板,一台Ubuntu主机(或者虚拟机),两者可以相互ping通,或者都连接到了公网。

二、文件系统镜像制作

将该脚本复制到ubuntu主机,赋予可执行权限,然后执行

chmod a+x generate_rootfs_img.sh
./generate_rootfs_img.sh

然后根据提示,输入RK3588开发板的用户名和ip。即可在ubuntu根目录下生成rootfs.img根文件系统镜像。

脚本如下:

#! /bin/bash

# acquire root privilege
if [ ! "$UID" -eq 0 ]; then
    echo "This script require root privilege."
    exit 0
fi

function check_ip() 
{   
    local IP=$1   
    VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')   
    if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then   
        if [ $VALID_CHECK == "yes" ]; then   
         echo "IP $IP  available!"   
            return 0   
        else   
            echo "IP $IP not available!"   
            return 1   
        fi   
    else   
        echo "IP format error!"   
        return 1   
    fi   
}   
while true ;do   
    read -p "Enter your username and ip:" userName IP   
    check_ip $IP   
    [ $? -eq 0 ] && break   
done
# Install the rsync
if ! type rsync >/dev/null 2>&1; then
    echo 'rsync did not install,Now we will intall rsync!'
    apt update
    apt install rsync
fi
# Test ip
if  ping -c 2 ${IP} >/dev/null ; then
    echo 'The IP is conneted!'   
else 
    echo 'The IP can not conneted! '
    exit 0
fi
# New path
rm -rf /root/rootfs
if [ ! -d "/root/rootfs" ]; then
  mkdir /root/rootfs
fi
# Download rootfs
rsync -avx $userName@$IP:/ /root/rootfs

# Creat new img by dd 
dd if=/dev/zero of=rootfs.img  bs=1M count=15000
mkfs.ext4 -F -L linuxroot rootfs.img
if [ ! -d "/ubuntu-mount" ]; then
    mkdir /ubuntu-mount
fi
mount rootfs.img /ubuntu-mount
cp -rfp /root/rootfs/* /ubuntu-mount
umount /ubuntu-mount
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
exit 0

三、完整镜像制作

通过上述的文件系统制作流程,我们得到了一个rootfs.img镜像,该镜像可以直接通过rockchip提供的工具进行烧录,如果需要制作一个完整的镜像包含uboot、kernel和rootfs,需要将rootfs.img放
/sdk/rk3588_repo_sdk_v1.0.2a/ubuntu_rootfs目录下(firefly开发板),运行指令:

./build.sh

即可在目录/sdk/rk3588_repo_sdk_v1.0.2a/rockdev/pack下看到名为ITX-3588J_Ubuntu_*.img文件即完整的镜像文件,使用rockchip的烧录工具进行完整烧录。
在目录/rk3588_repo_sdk_v1.0.2a/rockdev下有一个 名字为 parameter.txt的软连接文件,其中描述了各个分区的地址和大小,如下所示:

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3588
MACHINE_ID: 007
MANUFACTURER: RK3588
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00004000@0x00004000(uboot),0x00002000@0x00008000(misc),0x00080000@0x0000a000(boot:bootable),0x00040000@0x0008a000(recovery),0x00010000@0x000ca000(backup),0x00c00000@0x000da000(rootfs),-@0x00cda000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

uboot的起始地址在0x00004000,大小为0x00004000=8M,其他部分的大小:

uboot 4000= 8M
misc  0x00002000=4M
boot 0x00080000 = 256M
recovery 0x00040000=128M
backup  0x00010000 = 32m
rootfs  0x00c00000  =6G
userData =

我们自己制作的根文件系统大小可能超过了6G,那么我们需要修改rootfs和userdata的大小和起始地址,例如,如果我们的根文件系统大小为8G多,那么可以指定rootfs大小为9G,那么 parameter.txt就应该如下所示:

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3588
MACHINE_ID: 007
MANUFACTURER: RK3588
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00004000@0x00004000(uboot),0x00002000@0x00008000(misc),0x00080000@0x0000a000(boot:bootable),0x00040000@0x0008a000(recovery),0x00010000@0x000ca000(backup),0x001200000@0x000da000(rootfs),-@0x0012da000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

同步修改了rootfs的大小和userdata的起始地址。

参考资料

根文件制作和导出

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙蒂锅巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值