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

news2024/9/22 10:08:50

全志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.coloradmin.cn/o/1060856.html

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

相关文章

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 (1)修改Makfile.sdk (2)设置环境变量 (3)编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…

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侦…

pandas read_json时ValueError: Expected object or value的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

数据结构 1.2 算法

算法的基本概念 算法的定义 算法是对特定问题求解步骤的一种描述,它是指定的有限序列,其中的每条指令表示一个或多个操作。 例、 算法的特性 (5个) 1.有穷性 一个算法总在执行有穷步之后结束,且每一步都可以在有穷…

Redis作为缓存,mysql的数据如何与redis进行同步?

Redis作为缓存,mysql的数据如何与redis进行同步? 一定要设置前提,先介绍业务背景 延时双删 双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 读操作:缓存命中,直接返回;缓存未…

位移贴图和法线贴图的区别

位移贴图和法线贴图都是用于增强模型表面细节和真实感的纹理贴图技术,但是它们之间也存在着差异。 1、什么是位移贴图 位移贴图:位移贴图通过在模型顶点上定义位移值来改变模型表面的形状。该贴图包含了每个像素的高度值信息,使得模型的细节…

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会,最常…

基于Java Web 的购物网站

本系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上。 开发环境: JDK版本:JDK1.8 服务器&…

【前后缀技巧】2022牛客多校3 A

登录—专业IT笔试面试备考平台_牛客网 题意: 思路: 这种是典中典中典,对于gcd,背包问题都是一样的处理方式 预处理出前缀lca和后缀lca,枚举哪个消失即可,可以统计方案数 Code: #include &l…

karmada v1.7.0安装指导

前言 安装心得 经过多种方式操作,发现二进制方法安装太复杂,证书生成及其手工操作太多了,没有安装成功;helm方式的安装,v1.7.0的chart包执行安装会报错,手工修复了报错并修改了镜像地址,还是各…

在Ubuntu 20.04搭建最小实验环境

sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates安装导入GPG公钥所需的依赖包。 sudo wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -导入GPG密钥。 sudo apt-get -y install --no-install-recommends software-p…

【APUE】文件系统 — 类 du 命令功能实现

一、du命令解析 Summarize disk usage of the set of FILEs, recursively for directories. du 命令用于输出文件所占用的磁盘空间 默认情况下,它会输出当前目录下(包括该目录的所有子目录下)的所有文件的大小总和,以 1024B 为单…

包装机(栈和队列的应用)

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品&#x…

论文阅读——Pyramid Grafting Network for One-Stage High Resolution Saliency Detection

目录 基本信息标题目前存在的问题改进网络结构CMGM模块解答为什么要用这两个编码器进行编码 另一个写的好的参考 基本信息 期刊CVPR年份2022论文地址https://arxiv.org/pdf/2204.05041.pdf代码地址https://github.com/iCVTEAM/PGNet 标题 金字塔嫁接网络的一级高分辨率显著性…

虚拟机通过nat模式端口映射实现内网穿透

虚拟机通过nat模式端口映射实现内网穿透 1.网络状态 windows虚拟主机的IP为局域网的私有IP192.168.1.7linux的虚拟主机IP为nat的172.36.4.1062.linux修改nat模式的端口映射 3.windows宿主机防火墙添加规则,(或者直接关闭公共网络防火墙,不安全&#xf…

多个excel合并

目的:将同一个文件下的多个 “京东差评.xlsx” 合并为一个:“京东汇总.xlsx" 代码如下: # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…

ffmpeg之去除视频水印

ffmpeg去除水印使用delogo视频滤镜。 delogo参数: x,y,w,h分别表示logo区域的左上角位置及宽度和高度; show:0表示不显示logo区域,1表示显示logo区域。 执行下面的命令: ffmpeg -i 1.mp4 -vf delogox300:y10:w80:h30:show0 out.mp4 效果…

Java数据结构————队列

一 、队列 在Java中,Queue是个接口,底层是通过链表实现的。 只允许在一端进行插入数据操作, 在另一端进行删除数据操作的特殊线性表, 队列具有先进先出FIFO(First In First Out) 。 入队列: 进行插入操作的一端称为…

Android 获取IP地址的Ping值 NetworkPingUtils

项目里需要对动态配置的Ip列表都去ping下延迟,取出其中最小的三个进行随机取值然后去连接,倒腾了一下午终于搞出来了! 需求实现思路: 1.找到方法去ping IP地址; 2.同时去Ping,不能让用户等待&#xff1b…

游戏素材网站

OpenGameArt.org:这是一个提供免费游戏素材的社区平台,包括角色、背景、音效、音乐等各种类型的素材。你可以在 https://opengameart.org/ 上找到大量的免费资源。 Kenney.nl:Kenney 是一个知名的游戏开发者,他提供了大量的免费 …