nanopc t3开发板系统烧录_《开发板 — 备份RK3399整个文件系统,进行批量烧录》...

本文档介绍了如何备份RK3399开发板的整个文件系统,以便进行批量烧录。首先配置PC机与开发板的网络连接,确保能通过SSH登录root账户。接着在开发板上安装rsync和openssh-server,虚拟机中安装相应工具。使用rsync导出文件系统,然后打包成img文件。过程中涉及脚本的编写、文件系统的检查和调整,以及解决设备空间不足的问题。最后,简述了下载文件系统到其他开发板的过程。
摘要由CSDN通过智能技术生成

1.起因

因为在3399板子上搭建完环境,需要把整个文件系统导出备份。进行批量烧录生产。

2.环境配置

一台PC机(虚拟机),开发板,一根网线。开发板必须设置root的密码,后续导出文件需要用到密码。

2.1 网络配置

用PC机和开发板直连,让虚拟机和开发板可以ping通。

2.2 开发板安装环境

sudo apt-get install rsync

sudo apt-get install openssh-server

sudo vi/etc/ssh/sshd_config

修改PermitRootLogin选项用以确保root登录权限足够。

重启开发板或者重启ssh服务(/etc/init.d/ssh restart)。

经过这此修改后就可以远程登陆root帐户了,可以通过ssh工具验证。

要确保,外界可以通过ssh 登录root账户,只有这样才能将本地所有文件导出。(无法ssh登录,需进行ssh的安装和启动)。

2.3 虚拟机安装ssh和rsync

sudo apt-get install openssh-client

sudo apt-get install rsync

2.4 在虚拟机中创建目录,用来同步保存开发板上的文件系统

mkdir ubuntu (随便一个地方都可以,文件夹名字要跟3.2中的49行对应)

到处开发板上的文件系统:

rsync -avx root@192.168.137.5:/ ubuntu

其中ip是开发板上的ip,根据实际情况修改。

输入root密码。这个时候就会导出文件系统,等待其完成。

3.将导出的文件系统打包成img文件(该步骤都在虚拟机中完成)

3.1在ubuntu文件夹下面增加文件/etc/onlyone.sh

#!/bin/sh

read line< /proc/cmdlinefor arg in $line; do

if [ "5" -le "$(expr length $arg)"]; thenif [ "root=" = "$(expr substr $arg 1 5)"]; then

{

debug_arg=$(expr $arg : 'root=\(.*\)')

resize2fs $debug_arg

}

fi

fi

done

这个具体用来干嘛的,不太确定。好像也可以不用添加这个脚本。

更改文件权限sudo chmod 777 /etc/onlyone.sh

3.2 使用打包文件系统脚本

1 #!/bin/bash2

3 #ubuntu(ubuntu-core) build already annotation4 #not Often compiled .......too slow and need root5 MAKE_THEARD=`cat /proc/cpuinfo| grep "processor"| wc -l`6 RESULT="Image-rk3288-ubuntu"

7

8 function creat_result_dir()9 {10 if [ ! -d $RESULT ];11 then12 {13 mkdir Image-rk3288-ubuntu14 }15 fi16 }17

18 function ubuntu_core_build()19 {20 dd if=/dev/zero of=linux-rootfs-core.img bs=1M count=1000

21 sudo mkfs.ext4 -F -L linuxroot linux-rootfs-core.img22

23 if [ ! -d mount ];24 then25 {26 mkdir mount27 }28 fi29 sudo mount linux-rootfs-core.img mount30 sudo cp -a ubuntu_core/*mount31 sudo umount mount32 e2fsck -p -f linux-rootfs-core.img33 resize2fs -M linux-rootfs-core.img34 rm -rf mount35 mv linux-rootfs-core.img $RESULT36 }37 function ubuntu_build()38 {39 dd if=/dev/zero of=linux-rootfs.img bs=1M count=500040 sudo mkfs.ext4 -F -L linuxroot linux-rootfs.img41

42 if [ ! -d mount ];43 then44 {45 mkdir mount46 }47 fi48 sudo mount linux-rootfs.img mount49 sudo cp -a ubuntu/* mount50 sudo umount mount51 e2fsck -p -f linux-rootfs.img52 resize2fs -M linux-rootfs.img53 rm -rf mount54 mv linux-rootfs.img $RESULT55 }56

57 function ubuntu_clean()58 {59 rm $RESULT/linux-rootfs.img60 }61 function ubuntu_core_clean()62 {63 rm $RESULT/linux-rootfs-core.img64 }65 function result_clean()66 {67 rm -rf $RESULT68 }69

70 creat_result_dir71 if [ $1 == "clean" ]72 then73 {74 if [ ! -n $2 ]75 then76 {77 ubuntu_core_clean78 ubuntu_clean79 result_clean80 echo clean Img oK81 }82 elif [ $2 == "ubuntu" -o $2 == "ubuntu/" ]83 then84 {85 ubuntu_clean86 }87 elif [ $2 == "ubuntu_core" -o $2 == "ubuntu_core/" -o $2 == "ubuntu-core" -o $2 == "ubuntu-core/" ]88 then89 {90 ubuntu_core_clean91 }92 else93 {94 ubuntu_core_clean95 ubuntu_clean96 result_clean97 echo clean Img oK98 }99 fi100 }101 elif [ $1 == "ubuntu_core" -o $1 == "ubuntu_core/" -o $1 == "ubuntu-core" -o $1 == "ubuntu-core/" ]102 then103 {104 ubuntu_core_build105 }106 elif [ $1 == "ubuntu" -o $1 == "ubuntu/" ]107 then108 {109 ubuntu_build110 }111 else112 {113 ubuntu_core_build114 ubuntu_build115 }116 fi

根据文件系统实际大小,可以修改39行的count参数。来调整大小。

将make_ubuntu.sh脚本放在虚拟机中创建ubuntu(下图中的ubuntusystem是错误的,应该修改成ubuntu)的目录中:

执行脚本

./make_ubuntu.sh ubuntu

提示无法获取ubuntu/* 的文件状态:没有那个文件或目录。

原因:我们创建的目录是ubuntusystem。

修改脚本49行:

sudo cp -a ubuntu/*mount

修改成:sudo cp -a ubuntusystem/* mount

使用这种方法一直提示我:设备空间不足,但是我通过df -h,并没有发现100%被占用。

原因:

我使用的dd创建出来的初始化文件小于我要同步的文件系统大小,所以提示我设备空间不足。

解决方法:

du -h --max-depth=0 /ubuntu //查看ubuntu的大小

扩大初始化文件大小,修改行39中count的参数。

4.不直接使用脚本,分步打包img

4.1 制作镜像了,用dd工具创建镜像文件:

dd if=/dev/zero of=linuxroot.img bs=1M count=4094

count的大小根据实际文件系统大小,可以在开发板通过df -h查看。

4.2格式化镜像文件

sudo mkfs.ext4 linuxroot.img

4.3挂载镜像并往里面拷入修改后的文件系统

mkdir rootfs

sudo mount linuxroot.img rootfs/sudo cp-rfp ubuntusystem/*rootfs/

提示:设备上没有空间

查看一下发现是rootfs满了,应该是镜像创建小了。扩大镜像大小。

du -h --max-depth=1

发现导出的文件系统太大了。竟然有21个G,果断有问题,/mnt/data应该是硬盘,但是没挂载成功。导致重复导出文件。

重新导出文件系统,然后:

成功。

4.4 卸载镜像

sudo umount rootfs

4.5 裁剪镜像

这样linuxroot.img里就已经有刚才制作的根目录内容了,但linuxroot.img文件大小却是定义的分区大小,不是文件系统的实际大小,所以还要经过一些处理才能发布。

检查并修复linuxroot.img镜像的文件系统,不熟悉的朋友可以通过网络了解此工具。

e2fsck -p -f linuxroot.img

减小linuxroot.img镜像文件的大小:

resize2fs -M linuxroot.img

额!好像都一样。这样文件系统就制作好了

4. 下载文件系统到另一个开发板

略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值