为了快速复制克隆嵌入式设备,把当前已经调试好的设备的系统做成image系统镜像,无疑是最快捷的。对于树莓派系统来说,属于嵌入式设备,使用树莓派的imager去烧写出系统,然后安装必要的软件,当系统完全设置好之后就可以克隆了,下面讲述整个过程。

1、安装准备

安装操作系统,需要使用树莓派的烧写程序,将SD卡放入读卡器,查到电脑上,当U盘使用

imager下载地址:https://downloads.raspberrypi.org/imager/imager_latest.exe

如果是linux,可以用命令行安装:

sudo apt install rpi-imager 

2、安装ubuntu

此次将安装ubuntu,对于这种嵌入式设备,选择ubuntu server no desktop的版本,因为图形桌面太耗费资源,虽然树莓派已经算是比较强的,但是desktop版的系统在树莓派上运行,还是会出现各种问题的。

SD卡的磁盘镜像文件 镜像sd卡和克隆_SD卡的磁盘镜像文件

SD卡的磁盘镜像文件 镜像sd卡和克隆_arm_02

SD卡的磁盘镜像文件 镜像sd卡和克隆_单片机_03

 

SD卡的磁盘镜像文件 镜像sd卡和克隆_SD卡的磁盘镜像文件_04

 

SD卡的磁盘镜像文件 镜像sd卡和克隆_arm_05

SD卡的磁盘镜像文件 镜像sd卡和克隆_单片机_06

SD卡的磁盘镜像文件 镜像sd卡和克隆_SD卡的磁盘镜像文件_07

SD卡的磁盘镜像文件 镜像sd卡和克隆_单片机_08

 3、系统设置

3.1、修改系统密码

该版本系统安装好之后,默认的账号密码是ubuntu/ubuntu,第一次登陆会强制修改密码。按照系统引导提示去修改默认密码就可以。

3.2、修改IP地址

 树莓派默认的是dhcp配置,嵌入式设备一版都是设置静态IP,这就需要修改配置文件,按照下面的格式写这个配置文件,空格什么的最好都不要错:

sudo vim /etc/netplan/50-cloud-init.yaml

SD卡的磁盘镜像文件 镜像sd卡和克隆_单片机_09

3.3、打开树莓派串口

树莓派默认已经打开uart1,其他的串口需要配置重启才能生效:

sudo vim /boot/firmware/config.txt

打开改文件最后增加如下配置:

dtoverlay=uart2

dtoverlay=uart3

dtoverlay=uart4

dtoverlay=uart5

 重启之后你可以看到下面这些设备

SD卡的磁盘镜像文件 镜像sd卡和克隆_单片机_10

 3.4、关闭NTP

ntp是树莓派提供的一个从互联网自动同步时间的服务,我们如果想让树莓派设定自己想要的时间,那么就需要关闭这个服务即可:

- open:sudo timedatectl set-ntp true

- close:sudo timedatectl set-ntp false

3.5、安装必要软件

树莓派的ubuntu安装好之后很多基础的软件都不具备,因此需要手动安装

3.5.1、安装软件时总是报错,可以修改配置文件

系统安装好之后,每次安装软件总是会报一些错误,需要修改如下配置:

sudo vim /etc/needrestart/needrestart.conf

找到这样内容:#$nrconf{ucodehints} = 0;

删掉#,保存退出

3.5.2、安装python2.7

python3并不是完全向下兼容的,有些老项目调用的python函数到python3并不支持,那么就需要安装老版本

sudo apt-get install python2.7

做好符号链接

sudo ln -s /usr/bin/python2.7 /usr/bin/python

3.5.3、安装make

sudo apt install make

3.5.4、安装gcc

sudo apt-get install gcc

3.5.5、设置应用程序自动启动

sudo vim /lib/systemd/system/rc-local.service

在这个文件最后增加:

[Install] 
WantedBy=multi-user.target
Alias=rc-local.service

修改文件权限:

sudo chmod 777 /lib/systemd/system/rc-local.service

打开此文件增加启动脚本:

sudo vim /etc/rc.local

如果文件不存在,则新建文件,在文件最后增加:

#!/bin/sh
cd /home/ubuntu/app
sudo nohup ./myprogramme.bin &
echo "myprogramme start ok!"
exit 0

 增加可执行权限

sudo chmod +x /etc/rc.local

做符号链接:

sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/

 4、克隆SD卡

一个系统安装设置好之后,为了快速克隆到其他设备上,就需要将当前的系统做成image,这样就避免重复去做这些繁琐的安装和配置了。树莓派是一个嵌入式系统,和普通的PC上的系统不同,它的文件系统需要时busybox构建出来,和sd卡大小、分区、等因素相关,所以必须把文件系统也克隆过去,不能简单的只克隆操作系统文件,因此在PC上普通的那种制作依赖于文件目录的ISO的方式,IMAGE都不可行了,以下方法在此种情形下不可用:

sudo apt-get install genisoimage
sudo genisoimage -l -r -J -o /home/one/project/fs20/tool/simulator.iso /mnt/usb/

只能使用linux系统下的dd命令进行整个SD卡的克隆,而且如果克隆的不是整个SD卡,那么系统也将不可用。

4.1、挂在SD卡

 先查看linux下挂在了哪些设备

sudo fdisk -lu

lsblk

创建挂在目录

sudo mkdir /mnt/usb

挂在设备:

sudo mount /dev/sdc2 /mnt/usb

卸载设备:

sudo umount /mnt usb

4.2、整盘克隆

如果是32G的sd卡,整盘复制下来还是挺大的,有32G,因此复制过程中,同时使用压缩算法,进行文件压缩,这样结果文件会小一些。

sudo dd if=/dev/sdd | bzip2 > /home/tool/raspberry_32G.img

这个img文件就可以随意拷贝其他目录下,往相同容量大小的sd卡进行恢复了

sudo bzip2 -dc /home/tool/raspberry_32G.img | sudo dd of=/dev/sde

5、总结

在嵌入式系统上做这些实验还是很耗费时间的,前后花了几天时间,某些操作也不能拿PC系统上的经验来做,经过不断摸索,还是有很多收获,对于嵌入式系统也有了更深入的了解。