一、系统镜像和固件
1.1 镜像文件格式
镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,RAID 1和RAID 10使用的就是镜像。常见的镜像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。
-
ISO
这种格式的镜像扩展名为.ISO,是以ISO-9660格式保存的光盘镜像文件,是最常见的光盘镜像格式。安装Ubuntu系统时,我们使用到了Ubuntu提供的.iso后缀的系统镜像文件。 -
IMG
主要用于创建磁盘的镜像文件(disk image), 它可以用来打包整个磁盘或光盘的内容。img是iso文件格式的超集,它向后兼容iso文件格式。
嵌入式单板机一般没有光驱,而它们通常支持运行SD卡里的操作系统,所以嵌入式的系统镜像通常使用img文件的形式发布。 人们通常在PC上使用软件通过读卡器把img镜像文件烧录至SD卡,然后把SD接入到嵌入式单板机上运行。部分工具生成的镜像文件后缀名不一定是img,例如使用yocto生成的系统镜像,通常是以“.sdcard”为后缀的。
1.2 Debian镜像
基于debian社区提供的构建工具制作的debian 10 buster稳定发行版。
野火提供适用于i.MX6开发板的debian镜像可在如下链接下载:
https://pan.baidu.com/s/1pqVHVIdY97VApz-rVVa8pQ 提取码:uge1
-
imx6ull-lubancat-carp-console-armhf-2022-02-10.img.xz
: Debian的纯净版固件,没有带桌面环境和野火的QT App。 -
imx6ull-lubancat-carp-qt-armhf-2022-02-10.img.xz
: 具有QT App功能的Debian固件,系统启动后会进入QT App的界面。
野火提供的debian镜像特点:
- 经过整合,SD、NAND和eMMC存储器使用同一个uboot固件和内核固件。
- 使用插件设备树和fire-config工具,能在系统运行时调整设备树,适配不同的硬件使用场景。
- 通过apt工具可以安装各种软件,达到调整文件系统的目的。例如使用我们提供的debian纯净版系统, 直接通过apt工具就能安装全功能的野火Qt-App,变成我们提供的Full-Qt版镜像。 用户可以根据自己的需要安装各种软件工具而不需要重新制作和烧录镜像。
- 可以直接在运行的系统复制粘贴替换除uboot外的系统固件,使用apt-update可在线更新包括uboot在内的系统固件。
- SD卡的镜像能直接原样刷机至NAND和eMMC存储器,量产非常方便。
1.3 Yocto镜像
基于NXP提供的yocto工具配置构建的。
yocto工具生成的文件后缀默认是sdcard,它实际上是img格式的文件,野火提供适用于i.MX6开发板的yocto镜像可在如下链接下载:
https://pan.baidu.com/s/1kJdJ6xc12Yg4rPby_MatDA 提取码:4u7d
由于该yocto生成的镜像是针对特定硬件定制化的,通用性不好。例如我们针对7寸屏幕与4.3寸屏幕就需要分别提供两种镜像文件。 而且此处提供的镜像文件只能适配SD卡,不支持烧录至NAND和eMMC存储器中。 使用yocto镜像时需要严格按照硬件功能进行烧录和定制,相对debian镜像使用起来非常麻烦。
1.4 系统固件
上面的debian镜像和yocto镜像都是img格式的文件,这些镜像都是由 bootloader
、设备树
、Linux内核
、根文件系统
四部分固件构成的。
以野火提供的部分yocto固件进行说明:
-
bootloader固件
此处使用uboot,分别适配sd卡、NAND flash以及eMMC存储器:
-
设备树固件
适配eMMC存储器,由于某些设备引脚共用,只能同时使用其中一个,需要不同的设备树进行适配:
适配NAND存储器,跟eMMC的类似:
-
Linux内核固件
适配5寸屏、4.3寸显示屏:
-
根文件系统固件
不同用途的根文件系统,由于没法通过apt安装软件,所以针对不同的应用提供了多种不同的文件系统示例:
上面这些固件都是通过yocto工具构建出来的,单从它生成的文件类型就我们可以感受到yocto工具的强大之处, 即它能够针对不同的应用场景进行细致的定制。
不过,如果我们对这些固件都打包成img格式的镜像文件,将会有非常多的组合,不方便镜像发布和调整。 而且img格式的镜像文件目前只适用于SD卡,没法烧录至板载的NAND FLASH或eMMC存储器上。
一般来说芯片厂商会提供专用的工具来把这些独立的固件烧录到存储器,如NXP提供了mfgtools
工具。 使用这样的工具可以直接用上面的固件自己组合并烧录至存储器中,省去了打包成img格式文件的麻烦。
1.5 Debian、Yocto(Buildroot)镜像的差异
我们把buildroot与yocto镜像都归类为 自定义镜像
。很多系统工程师使用buildroot来构建镜像,buildroot工具构建出来的镜像与yocto镜像类似, 不过buildroot工具使用起来相对简单一点
。
-
使用方便
由于debian镜像与自定义镜像的根文件系统不同,导致两种镜像的使用感受差异非常大。 使用debian镜像时,可以保留我们在x86 PC上使用Debian、Ubuntu的习惯,
通过apt包管理工具直接安装各种各样的软件
, 例如python、java、php等运行环境,各种使用配置也跟PC上的类似,这会给我们的开发和学习带来极大的便利。而使用yocto(buildroot)镜像时,如果我们想给系统安装某些软件,就
需要重新使用yocto(buildroot)工具构建文件系统,再烧录到开发板上
,非常麻烦。 特别是对Linux系统不熟悉的用户,使用它来学习效率会非常非常低。
-
占用大小
使用yocto(buildroot)镜像的主要优势是:如果有需要,它
可以把镜像做得非常小
,我们制作的debian镜像最小的约为340MB,如果再裁剪的话,可能很多debian系统的功能都会没用了,没有意义。 而使用yocto(buildroot)工具可以制作出50MB以内的镜像。当然了,如果想要用yocto(buildroot)工具做出debian系统的效果,它并不会比debian镜像小。 所以通常在产品功能固定、应用程序本身依赖小、flash容量要求苛刻且有非常熟悉系统的工程师时,才会采用这种方案定制自己的镜像。简单来说,debian镜像是整个开源社区的力量制作出来的,而且无论是在x86、arm等各种平台上使用它都非常多,基于debian还衍生出各种各样的Linux发行版。
强烈建议先学习好如何构建debian镜像,再去研究buildroot,最后再学习yocto工具。
二、通过SD卡烧录Debian镜像
2.1 安装Etcher工具
官网下载:https://www.balena.io/etcher/
百度网盘:https://pan.baidu.com/s/1mChjnYzWHs_GlLveZzQqgA?pwd=vlbo 提取码:vlbo
2.2 烧录Debian镜像至SD卡
- 下载野火最新发布的Debian系统镜像
https://pan.baidu.com/s/1pqVHVIdY97VApz-rVVa8pQ 提取码:uge1
- console版本: Debian的纯净版固件,没有带桌面环境和野火的QT App。(解压后约340M)
- carp-qt版本: 具有QT App功能的Debian固件,系统启动后会进入QT App的界面。
准备Micro SD卡
推荐使用闪迪class 10的SD卡,容量2GB以上就完全足够。-
使用管理员身份打开安装好的Etcher工具
否则等会报以下错误:
-
选择要烧录的镜像
-
选择要烧录的SD卡,然后点击Flash按钮开始进行烧录
-
烧录过程会显示镜像的烧录进度,如下图
-
等到软件出现出现如下界面时,表示镜像已经成功烧录完毕
2.3 设置为SD卡启动模式
开发板插入烧录好Debian镜像的SD卡。
根据以下BOOT拨码开关启动配置表,调整拨码开关为SD卡启动方式,即2-5-8位拨到on,其他位拨到0
。
编号 | 名称 | NAND FLASH | eMMC | SD | USB |
---|---|---|---|---|---|
1 | MODE0 | 0 | 0 | 0 | 1 |
2 | MODE1 | 1 | 1 | 1 | 0 |
3 | CFG1-4 | 1 | 0 | 0 | X |
4 | CFG1-5 | 0 | 1 | 0 | X |
5 | CFG1-6 | 0 | 1 | 1 | X |
6 | CFG1-7 | 1 | 0 | 0 | X |
7 | CFG2-3 | 0 | 1 | 0 | X |
8 | CFG2-5 | 0 | 0 | 1 | X |
然后注意使用SD卡时开发板右下角的J2竖排针不要盖有跳帽需断开(此为WIFI模块供电,核心板只引出一路SDIO,SD卡和WIFI不能同时用)
注意:开发板第一次从SD卡启动时,系统会自动进行SD卡扩容, 以保证充分利用SD卡存储空间。扩容完毕后,系统自动重启生效。
2.4 通过fire-config刷机
注意: 刷机不建议用ssh远程登录来操作,避免开发板重启后, ssh断开连接而不能及时看到相关的刷机信息提示。
-
执行
sudo fire-config
,选择Advanced
项。
-
在
Advanced
,能够选择从sd烧写镜像到emmc或nand中,也可以选择从emmc或nand烧写系统到sd卡中, 从sd烧写镜像到emmc或nand可选择单次烧录,也可选择持续烧录模式方便量产使用,普通用户选择单次烧录即可。此处我们选择从sd单次烧录到emmc或nand选项
。
-
系统提示: “Would you like the flasher to be enabled”,选择
<Enable>
。
-
系统提示:“The flasher is enabled”,选择
<Ok>
。
-
返回fire-config初始界面,使用键盘方向
→
键,选择<Finish>
。
-
在初始界面,选择<Finish>项。 系统提示:“Some config will take effect after reboot,would you like to reboot now?” 选择
<Yes>
。
-
系统自动重启,重启后的系统将自动进行emmc或者nand flash刷机。
-
耐心等待刷机结束,刷机过程大约持续2分30秒左右。刷机完成后,控制台会重新进入串口登录页面, 此时观察开发板的LED灯,如果LED在持续闪烁,说明刷机成功。
无论是emmc,还是nand flash,刷机成功后,调整拨码开关为相应启动方式,重新上电启动系统即可。
根据以下BOOT拨码开关启动配置表,调整拨码开关为NAND FLASH启动方式,即2-3-6位拨到on,其他位拨到0
。
编号 | 名称 | NAND FLASH | eMMC | SD | USB |
---|---|---|---|---|---|
1 | MODE0 | 0 | 0 | 0 | 1 |
2 | MODE1 | 1 | 1 | 1 | 0 |
3 | CFG1-4 | 1 | 0 | 0 | X |
4 | CFG1-5 | 0 | 1 | 0 | X |
5 | CFG1-6 | 0 | 1 | 1 | X |
6 | CFG1-7 | 1 | 0 | 0 | X |
7 | CFG2-3 | 0 | 1 | 0 | X |
8 | CFG2-5 | 0 | 0 | 1 | X |
注意: 如果是选择持续烧录模式,想要停止持续烧录,使用读卡器将SD卡接入到电脑,打开sd卡boot分区, 修改该分区的uEnv.txt文件,修改内容见下图:
• 由 Leung 写于 2022 年 9 月 1 日
• 参考:8. 烧录Debian镜像至SD卡