全志ARM926 Melis2.0系统的开发指引④
- 编写目的
- 7. 固件打包脚本
- 7.1.概要描述
- 7.2.术语定义
- 7.2.1. makefile
- 7.2.2. image.bat
- 7.3.工具介绍
- 7.4.打包步骤
- 7.4.1. makefile 部分
- 7.4.2. image.bat 部分
- 7.5.问题与解决方案
- 7.5.1. 固件由那些文件构成
- 7.5.2. melis100.fex 文件包含什么内容
- 7.5.3. ramdisk.iso
- 7.5.4. udisk.iso
- 7.5.5. 如何对 sysdata 分区进行添加
- 7.5.6. 分区对齐设置
- 7.5.7. 固件烧录后打印提示 spinor 不支持
- -. 全志相关工具和资源
- -.1 全志固件镜像修改工具 ImageModify.exe 下载
- -.2 全志固件USB刷机工具 PhoenixSuit 下载
- -.3 全志Melis2.0 用户手册.pdf下载
- -.4 全志melis2.0 sdk源码库下载
编写目的
本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。
7. 固件打包脚本
7.1.概要描述
打包固件是下载前的最后一步。系统应用程序、驱动编写完成,经过编译得到输出文件,加上各种中
间件、资源文件、配置文件、系统内核等统一打包生成固件,固件下载到开发板上就可以运行了。在 melis2.0中,是利用批处理 image.bat 进行打包操作。打包主要工作有三方面。一方面在生成的各种源文件中拷贝需要的文件到打包路径下,第二方面利用更新工具对源文件进行更新,第三方面根据配置文件将源文件按照一定规则进行打包操作,最终生成可以烧录的固件。
7.2.术语定义
7.2.1. makefile
makefile 是自动化编译脚本。makefile 文件描述了工程的编译和连接规则。包括工程中那些源文件需
要编译以及如何编译、需要调用那些库文件,设置最后生成文件的路径等等。每个应用程序、模块等工作目录都有几个特定文件,包括 makefile magic.c make.cfg。Magic.c 是模块、驱动的入口,具有统一形式。
Make.cfg 是配置文件,目前主要关注的是 target,它指明源文件生成路径以及生成文件的名字。
7.2.2. image.bat
bat 批处理文件是一系列 dos 命令的集合。文件的每一行都是一条 dos 命令。将特定命令编写完成运行就可以简化日常或重复性的任务。Image.bat 文件是打包批处理文件,运行它就可以生成最新的固件。
7.3.工具介绍
1、update_boot 工具:update_boot 会根据配置文件,修正 boot 中的参数。
2、BurnMBR 工具:BurnMBR 工具主要是用来生成 MBR 数据,其输出文件为 mbr.bin。
3、minfs 工具:制作 minfs 分区。
4、fsbuild 工具:fsbuild 工具用于制作 fat16 文件系统。
5、fix_file 工具:fix_file 工具较为简单,只是将输入文件延长为指定长度的输出文件,其中的延
长部分是 0。
6、dragon 工具:打包。
7.4.打包步骤
7.4.1. makefile 部分
首先对整个工程进行编译,生成源文件。在 cygwin 环境下在工程根目录使用 make clean;make 命令对整个工程进行编译(如果只修改其中一些部分可以只编译修改部分)。Makefile 会将各部分生成文件分类存放到指定路径。本工程生成路径是 ROOT\c500_net_theater\workspace\suniv。
7.4.2. image.bat 部分
固件打包的工作路径是 ROOT\c500_net_theater\workspace\suniv\beetles。打包固件以前,要确认配
置文件正确,并且 makefile 生成的源文件是最新的。
Image.cfg 是配置文件,它指定了那些文件需要打包到固件中,设置固件名字、版本等信息。在生成的image.txt 文件中可以看到各个被打包文件的信息,包括大小、路径、主键、子键等信息。
Image.bat 的工作流程如下:
1、首先进行一些初始化操作。将原有的镜像删除,设置打包工具路径等。
2、运行 update.bat 批处理文件。查看生成的 update.txt 文件,update.bat 主要是完成文件复制操作,将需要使用的文件按照分类存放到打包路径待用。
3、使用打包工具解析脚本文件(.fex 文件)、更新 boot0 和 boot1 文件头、生成 MBR 文件、更新 fes1、uboot 文件头。如 Boot 阶段使用的__boot0_file_header_t 结构体,在本阶段使用脚本文件更新部分参数,包括 dram、uart、jtag_para、spi 参数等。
4、根据配置文件,生成 MBR 文件,大小为 1kb。
5、更新 usb 烧录文件,根据系统配置文件 sys_config.fex 来修正 fes1 和 uboot 的各项参数。
6、生成文件系统镜像,运行 fsbuild.bat。根据 rootfs.ini、ramfs.ini、udisk.ini 文件将需要的文
件进行打包,分别生成 rootfs.iso、ramfs.iso、udisk.iso。根据不同的命令制作 rootfs.iso、ramfs.iso
两个 minfs 文件系统镜像,和 udisk.iso 的 fat 文件系统镜像。
7、对 boot0 和 boot1 的文件大小进行填充 boot0 为 24kb,boot1 为 120kb。
8、将 boot0.bin boot1.bin mbr.bin rootfs.iso udisk.iso 连接打包成为 melis100.fex 文件,并且
生成校验文件 verify.fex。
9、运行 deagon 工具,根据配置信息 image.cfg 生成镜像包文件 ePDKv100.img。
10、删除清理临时文件,可以在脚本中用#注释掉一些删除,观察临时文件的大小是否符合预期。
7.5.问题与解决方案
7.5.1. 固件由那些文件构成
固件由资源文件、配置文件、系统内核、应用程序、驱动、中间件构成。
7.5.2. melis100.fex 文件包含什么内容
以 8M 固件系统未加载 sysdata 分区为例,melis100.fex 是在 do_checksum()中生成的。melis100.fex 是固件里面的重要内容,包含了 boot0.bin boot1.bin mbr.bin rootfs.iso udisk.iso 共计 5 个部分。其中 boot0大小为 24KB,boot1 大小为 120KB,MBR 大小为 1KB,这三部分固定不变,同时 boot 部分都预留空间,保留。
Rootfs 部分为 7919KB,udisk 部分为 128KB。整个文件大小为 8192KB。具体模型如下图:
图40:
7.5.3. ramdisk.iso
Ramdisk 在系统启动阶段提供帮助。系统启动时需要挂载根文件系统,根文件系统包含了各种驱动和模块和各种源文件(内核是精简的,不可能把所有的驱动和模块编译进内核,这会让内核很大)。问题就在于挂载根文件系统却需要根文件系统上面的驱动和模块,这是相互矛盾的问题。Ramdisk 包含了系统启动必要的驱动和模块,在启动阶段 ramdisk 和内核都被预先加载到内存中,再通过 ramdisk 里边的驱动和模块帮助启动系统,最终挂载根文件系统。
7.5.4. udisk.iso
Udisk 保存系统运行过程中需要保存的用户数据,包括音量、语言设置等信息。
7.5.5. 如何对 sysdata 分区进行添加
(1)更新打包工具
更新\tools\build_tools 目录下的 BurnMBR.exe 和 script.exe 工具;
(2) 配置 sysdatafs 盘符,修改分区大小
在 sys_config.fex 文件中按需求添加 sysdatafs 盘符,字符串需带引号””表示才能解析;打包路径下的
sysdata.ini,rootfs.ini,udisk.ini 里 面 的 size 大 小 需 与 配 置 文 件 中 对 应 。 并 且 要 注 意 , 如 果
sys_config.fex 中不存在 UDISK,这个分区,则在工具中会自动加上,所以,当 part_num 为 2 时,总共有
三个分区。
图41:
(3) 创建 sysdatafs.iso 镜像
fsbuild.bat 文件添加如下语句以创建 sysdatafs.iso,大小在 beetles 文件夹下的 sysdatafs.ini 文件中
配置;(注:在第(2)步中定义的分区大小,需要和 ini 后缀文件中定义的大小需一致)
…\tools\build_tools\fsbuild200\fsbuild.exe .\sysdatafs.ini
(4) 添加 sysdatafs.iso 镜像到固件
在打包文件 image.bat 中将 sysdatafs.iso 添加到固件中:
type boot0.bin boot1.bin mbr.bin rootfs.iso sysdatafs.iso udisk.iso > melis100.fex
(5) 更新 spinor.drv 驱动
7.5.6. 分区对齐设置
由问题一可知分区分布情况,其中 sysdata 和 udisk 分区是可读写分区,norfalsh 是必须先将需要写
的区域进行擦除,才能正常进行写操作,而擦除 nor 的操作暂时是以 64K 为单位,因此要求 sysdata 和 udisk分区的起始地址和大小都需要 64K 对齐。(sysdata 和 udisk 分区数据保存请参考文档《用户数据保存》)
当分区未按 64K 对齐时,可能引发用户数据保存失败等未知错误。
7.5.7. 固件烧录后打印提示 spinor 不支持
在首次使用机器烧录固件,或者更换新 NORFLASH 后烧录固件,有可能出现下图打印:
图42:
此时打印提示 spinor 不支持,并且给出了 norflash 的 id为 0x17701c。因此我们需要在 sys_config.fex文件中将该型号的 nor 添加上去,具体如何修改,请参考文件中的说明。完成 norflash 型号的添加后如下图:
图43:
-. 全志相关工具和资源
-.1 全志固件镜像修改工具 ImageModify.exe 下载
下载地址:
固件镜像修改工具 ImageModify.exe下载 ImageModify_20230906.rar
-.2 全志固件USB刷机工具 PhoenixSuit 下载
下载地址:
USB刷机工具 PhoenixSuit下载 PhoenixSuit_CN_V1.1.1_20230906.rar
-.3 全志Melis2.0 用户手册.pdf下载
下载地址:
全志Melis2.0 用户手册.pdf下载 documents_20230906_melis_v2.0.rar
-.4 全志melis2.0 sdk源码库下载
下载地址:
全志melis2.0 sdk源码库下载 melis2.0-sdk-release_20230906V2.0.rar