全志ARM926 Melis2.0系统的开发指引④

全志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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5+Qt设计师初探

在上一篇文章中我们搭建好了PyQt5的开发环境,打铁到趁热我们基于搭建好的环境来简单实战一把 一:PyQt5包模块简介 PyQt5包括的主要模块如下。 QtCore模块——涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及的时间、文件、目录、数…

水浒传数据集汇总

很喜欢《水浒传》,希望能将它融入我的考研复习中,打算用水浒传数据来贯穿数据结构的各种知识,先汇总下找到的数据集 天池上看到的一个水浒传文本数据集:https://tianchi.aliyun.com/dataset/36027 Hareric/masterworkNLP: 基于社…

Go基础之变量和常量

Go基础之变量和常量 文章目录 Go基础之变量和常量一. 标识符、关键字、内置类型和函数1.1 标识符1.2 关键字1.3 保留字1.4 内置类型1.4.1 值类型:1.4.2 引用类型:(指针类型)1.5 内置函数1.6 内置接口error 二.Go变量命名规范2.1 采用驼峰体命名2.2 简单、…

多层神经网络和激活函数

多层神经网络的结构 多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了层的概念,常见的多层神经网络有如下结构: 1)输入层(Input layer),众多神经元(Neuron&#xff…

2023-09-28 monetdb-databae的概念和作用-分析

摘要: 每个数据库对于db,schema以及user,role都有一套自己的设计, 不同数据库间对于相同名字的东西例如database和schema可以说南辕北辙, 例如mysql中schema其实是database的同义词. 本文分析monetdb的database的概念和作用 database的概念和作用: 和mysql的database完全不同…

学会安装Redis数据库到服务器或计算机(Windows版)

Redis 是一个基于内存的开源数据库系统,被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等,并提供了多种操作命令。 Redis 的特点如下: 内存存储&#xf…

spring security(二)--授权

零.前情提要 这篇文章主要借鉴B站三更大大关于spring security的教程,这篇文章的大部分内容也来自于那个教程,写这个的主要目的是记录加强印象,总结,并且在文章中我也有穿插自己的想法。 前面的文章【spring security教程&#…

一文读懂UTF-8的编码规则

之前写过一篇文章“一文彻底搞懂计算机中文编码”里面只是介绍了GB2312编码知识,关于utf8没有涉及到,经过查询资料发现utf8是对unicode的一种可变长度字符编码,所以再记录一下。 现在国家对于信息技术中文编码字符集制定的标准是《GB 18030-…

sheng的学习笔记-【中英】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第四周测验

课程1_第4周_测验题 目录:目录 第一题 1.在我们的前向传播和后向传播实现中使用的 “缓存” 是什么? A. 【  】它用于在训练期间缓存成本函数的中间值。 B. 【  】我们用它将在正向传播过程中计算的变量传递到相应的反向传播步骤。它包含了反向传…

html 边缘融合加载

html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>边缘融合加载</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {height: 100vh;padding-bottom: 80px;b…

DP读书:《openEuler操作系统》(四)鲲鹏处理器

鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容&#xff1a;鲲鹏处理器 架构与编程&#xff08;一&#xff09;处理器与服务器…

uboot启动流程-uboot内存分配工作总结

一. uboot 启动流程 _main 函数中会调用 board_init_f 函数&#xff0c;本文继续简单分析一下 board_init_f 函数。 本文继续具体分析 board_init_f 函数。 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-uboot内存分配_凌肖战的博客-CSDN博客 二…

Flutter笔记:关于应用程序中提交图片作为头像

Flutter笔记 关于应用程序中提交图片作为头像 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133418554…

【Vue组件化编程】

Vue组件化编程 1 对组件的理解2 非单文件组件2.1 基本使用2.2 几个注意点2.3 组件的嵌套2.4 VueComponent构造函数2.5 一个重要的内置关系 3 单文件组件 1 对组件的理解 组件&#xff1a;实现应用中局部功能代码和资源的集合。优点&#xff1a;文件好维护&#xff1b;依赖关系不…

SDL2绘制ffmpeg解析的mp4文件

文章目录 1.FFMPEG利用命令行将mp4转yuv4202.ffmpeg将mp4解析为yuv数据2.1 核心api: 3.SDL2进行yuv绘制到屏幕3.1 核心api 4.完整代码5.效果展示 本项目采用生产者消费者模型&#xff0c;生产者线程&#xff1a;使用ffmpeg将mp4格式数据解析为yuv的帧&#xff0c;消费者线程&am…

力扣 -- 96. 不同的二叉搜索树

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int numTrees(int n) {vector<int> dp(n1);//初始化dp[0]1;//填表for(int i1;i<n;i){for(int j1;j<i;j){//状态转移方程dp[i](dp[j-1]*dp[i-j]);}}//返回值return dp[n];} }; 你学会了吗&…

nodejs+vue养老人员活体鉴权服务系统elementui

系统 统计数据&#xff1a;统计报表、人员台账、机构数据、上报数据、核验报表等&#xff0c;养老人员活体鉴权服务是目前国家养老人员管理的重要环节&#xff0c;主要为以养老机构中养老人员信息为基础&#xff0c;每月进行活体鉴权识别并统计数据为养老补助等管理。前端功能&…

基于安卓android微信小程序的校园维修平台

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

Monkey基本使用及介绍

1 简介.. 1 1.1 Monkey是干什么的.. 1 1.2 我们为什么要用monkey. 1 1.3 试行monkey的计划.. 2 2 monkey使用.. 4 2.1 基本常识.. 4 2.2 基本使用.. 6 2.2.1 通过adb 来启动monkey. 6 2.2.2 一些命令选项.. 7 2.2.3 一些测试例子.. 7 2.2.4 执行注意事项.. 9 2.2.5侦…

Centos7 安装mysql 8.0.34并设置不区分大小写

索引 Centos7 安装mysql 8.0.34准备工作安装教程安装并配置配置MySQL配置远程访问重新启动MySQL服务 为已安装的MySQL8设置不区分大小写背景操作步骤 Centos7 安装mysql 8.0.34 准备工作 centos7 服务器 xshell 安装教程 安装并配置 在安装MySQL之前&#xff0c;我们应该…