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

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

  • 1. 编写目的
  • 2. Melis2.0 系统概述
  • 3. Melis2.0 快速开发
    • 3.1. Melis2.0 SDK 目录结构
    • 3.2. Melis2.0 编译环境
    • 3.3. Melis2.0 固件打包
    • 3.4. Melis2.0 固件烧录
    • 3.5.串口打印信息
    • 3.6. Melis2.0 添加和调用一个模块
      • 3.6.1. 为什么划分模块?
      • 3.6.2. UART 驱动模块
        • 3.6.2.1.编译
        • 3.6.2.2.加载和使用
        • 3.6.2.3.UART0 的 PIN 脚配置
  • -. 全志相关工具和资源
    • -.1 全志固件镜像修改工具 ImageModify.exe 下载
    • -.2 全志固件USB刷机工具 PhoenixSuit 下载
    • -.3 全志Melis2.0 用户手册.pdf下载
    • -.4 全志melis2.0 sdk源码库下载

1. 编写目的

在这里插入图片描述

本文档是全志 Melis2.0 系统的开发指引文档,旨在协助开发者了解和掌握 Melis 系统,快速搭建 Melis系统的开发环境,将 Melis2.0 系统应用到产品开发中。

2. Melis2.0 系统概述

Melis2.0 系统是基于全志芯片平台自主研发的一套软件系统,其内容涵盖 SDK 代码包、资源制作工具组、编译链接脚本、固件打包烧录工具套件、调试工具 5 个部分,本文档将在后续章节向开发者逐一进行
介绍。
图1:
在这里插入图片描述

3. Melis2.0 快速开发

3.1. Melis2.0 SDK 目录结构

Melis2.0 发布版本的 SDK 目录结构如下【图 2】所示,下面按照源码文件夹、打包文件夹、临时库文
件夹、工具文件夹的顺序介绍各文件夹的功能,使开发者对 Melis2.0 SDK 的目录结构有一个初步印象。
图2:
在这里插入图片描述

eBSP】板级支持包文件夹,该文件夹存放的是 spi、uart、sdio 等驱动的源码文件,包含了各驱动模块对应寄存器的设置代码,生成的目标文件是.a 后缀的库文件,在编译链接 eMod 中的驱动时使用这些.a 库。

eLIBs】公共库文件夹,生成的目标文件是.a 后缀的库文件,包含了一些公共库函数接口,例如一些本平台自定义的 stdio、string 等接口。

eMod】驱动模块文件夹,本文件夹主要是以 drv_、mod_开头的子文件夹,各子文件夹代表一个独立的驱动/中间件模块,编译每个子文件夹中的源码会生成一个 ELF 格式的可执行文件。eBSP 库中生成的.a 库大多是在这里的驱动模块编译链接时使用。

includes】此文件夹用于存放公用的.h 后缀头文件,为使代码结构清晰,这些头文件会按照功能分别放到各个子文件夹中。

interinc】此文件夹存放的头文件主要是与 ELF 格式可执行文件的解析相关的宏定义和结构体定义等。

livedesk】本文件夹属于应用层文件夹,桌面、音乐、视频、相册、日历、录音等功能的代码均存放于此。

makefile】SDK 根目录编译脚本文件,打开 cygwin 命令行窗口,进入 SDK 目录,输入 make clean;make命令后按“回车”键,就会执行此 makefile 脚本把整个 SDK 重新编译一遍。

workspace】编译 eMod、livedesk 文件夹中的源码所生成的驱动、中间件、应用等独立模块的 ELF 可执行文件均存放于此,通过运行 workspace\suniv\beetles\image.bat 脚本,将这些独立的可执行文件,打包合成一个.img 后缀的文件,用于烧录到开发板中的存储设备(比如 Norflash)。

libs】本文件夹主要是存放.a 库,不存放源码,eBSP、eLIBs 文件夹中编译生成的.a 后缀文件均存放在本文件夹中;

softwares】本文件夹用于存放工具软件。

tools】本文件夹主要存放打包脚本中调用到的 windows 应用程序,例如将一些配置信息更新到已经生成的可执行文件中,就会使用到本文件夹中的工具。

3.2. Melis2.0 编译环境

Melis2.0 的编译环境是 Cygwin + RVDS2.2。
Cygwin 是在 windows 上运行的类 Unix 环境;RVDS2.2 即 RealView Development Suite 2.2,是由 ARM公司出品的交叉编译工具套件。
双击 cygwin 图标运行 cygwin,通过命令行窗口输入命令。进入 SDK 根目录,输入 make clean;make命令来执行根目录的 makefile 脚本,重新编译整个 sdk,参考下【图 3】。可使用文本编辑工具打开 makefile
文件查看和修改。
根目录下的 makefile 脚本运行时,逐层编译链接 eBSP、eLIBs、eMOD、livedesk 文件夹中各个子目
录 , 生 成 ELF 格 式 的 可 执 行 文 件 以 供 打 包 生 成 固 件 。 这 些 ELF 可 执 行 文 件 的 分 别 存 放 到 了
workspace/beetles/ramfs 或 workspace/beetles/rootfs 文件夹。
关于 Melis2.0 编译链接工具的具体调用流程,请参考第 4 章《编译工具链使用》。
图3:
在这里插入图片描述

3.3. Melis2.0 固件打包

进入 SDK 的 workspace\suniv\beetles\文件夹,双击 image.bat 运行该脚本,把各驱动、中间件、应
用模块等独立的可执行文件合成到 ePDKv100.img 镜像文件,以便 PhoenixSuit 烧录工具烧录到开发板的Norflash 中。
image.bat 脚本的具体运行流程,可通过文本编辑工具打开查阅和修改,如【图 4】。
图4:
在这里插入图片描述

3.4. Melis2.0 固件烧录

Melis2.0 使用的烧录工具是 PhoenixSuit,通过该工具将固件烧录到开发板的 Norflash 中,安装
PhoenixSuit 的操作文档请参看章节《固件烧录工具的安装》。下面我们介绍其中一种烧录方法。
【step1】双击 PhoenixSuit 图标运行 PhoenixSuit 软件,点击“一键刷机”选项卡,通过“浏览”按
钮选择想要烧录的固件的存放路径;
【step2】用 USB 链接线把电脑和开发板链接起来;
【step3】短路 Norflash 的 1、2 引脚,上电 1 到 2 秒钟之后即可松开,当烧录软件出现进度条,表明
PhoenixSuit 通过 USB 检测到开发板,之后烧录软件自动完成剩余的烧录工作;
【step4】等待烧录完成,会有弹窗提示烧录成功,表明烧录完成,之后就可重启设备运行新固件。
烧录期间和重启设备后,都可以通过查看开发板的调试串口输出的打印信息来判断软件的运行状态。
图5:
在这里插入图片描述

图6:
在这里插入图片描述

图7:
在这里插入图片描述

3.5.串口打印信息

安装串口工具(例如 SecureCRT)并打开,通过串口线接收 SoC 输出的 UART 串口打印信息,可以对软件的运行状态做判断,参考【图 9】。
UART 串口波特率是 115200bps,串口收发引脚 Rx/Tx 参看 workspace/eFex/sys_config.fex 文件中的uart_debug_port、uart_debug_tx、uart_debug_rx 参数,如【图 8】所示为窗口 1UART port1 的 PA2/PA3
脚。

图8:
在这里插入图片描述

图9:
在这里插入图片描述

下面简单介绍一下 SecureCRT 的串口使用步骤。
【step1】双击 图标打开 SecureCRT 软件,通过菜单“文件”->“快速链接”,或直接点击工具
栏的“快速链接”按钮 来直接启动快速链接,出现如【图 10】的提示窗口,点击“协议”条目出现下
拉菜单,选择“Serial”。
图10:
在这里插入图片描述

【step2】选择 Serial 协议之后,如【图 11】所示,选择指定的串口,把波特率设置成 115200bps,取消流控的勾选项,然后点击“连接”按钮即可。至此串口 SecureCRT 即可用于收发开发板 UART1 串口的数据。
图11:

在这里插入图片描述

3.6. Melis2.0 添加和调用一个模块

3.6.1. 为什么划分模块?

模块在 Melis2.0 中是一个独立的可执行文件,在介绍前文 SDK 文档目录时提到过模块的概念。一个模块在 SDK 中是如何存在的?它的代码组成基本结构如何?它是如何编译生成的?在固件中如何存在?又如何被加载调用?我们接下来介绍一下。
为使 SDK 结构层次清晰,Melis2.0 将内核操作系统、驱动、中间件、应用等区分开来,单独编译链接生成 ELF 可执行文件,方便各模块独立维护。一个模块需要使用时,要先加载其 ELF 可执行文件,才能使用,不使用时,则可以卸载掉。

3.6.2. UART 驱动模块

图12:
在这里插入图片描述

例如串口驱动,进入到 eMod/drv_uart 文件夹,可以看到如【图 12】所示的内容。

3.6.2.1.编译

【make.cfg】
1、通过包含 CROSSTOOL.CFG 指定了编译链接工具为 RVDS 以及 RVDS 工具在电脑上的存储路径;
2、通过 INCLUDES 指定了头文件的包含路径;
3、通过 LIBS 指定了库文件的包含路径;
4、通过 TARGET 指定了输出文件的名称和路径;
5、通过 SRCDIRS 指定了本文件夹及最大 3 层深度的子文件夹中所包含的所有文件名列表;
6、通过 LINK_SCT 指定了链接所使用的文件路径;
7、指定了其他编译选项;
【makefile】通过 SRCCS、SRCSS 过滤得到 SRCDIRS 变量所表示的文件名列表中的.c 和.s 后缀文件参与编译连接,通过 cygwin 进入本文件所在路径,输入 make clean;make 后按“Enter”键,就会执行此 makefile脚本,并将 ELF 可执行文件输出到 TARGET 所指定的路径下,默认 TARGET 是 SDK 目录下的workspace\suniv\rootfs\drv\文件夹,客户可按需自行修改。
图13:
在这里插入图片描述

3.6.2.2.加载和使用

uart.drv 生成之后,会在打包时一起合入.img 固件烧录到 Norflash 中,要使用运行该驱动,还需要
把该驱动加载到内存中,并注册给系统的设备管理器。
【magic.c】每个模块都有一个 magic.c 文件,本文件定义了一个结构体,需要注意的是“type”和“mif”
元素:
【type】type 是一个无符号单字节变量,emod.h 头文件以宏定义的形式为每个模块分配了独占的
“type”值,uart 按键驱动的 type 值是 EMOD_TYPE_DRV_UART,开发者如果想添加新模块,可自行添加宏定义,但与其他模块的值不可相同。
【mif】mif 表示模块的接口函数结构体,通过 esDEV_Plugin 函数加载驱动的过程中,依次调用
mif.MInit、mif.MOpen、mif.MIoctrl、mif.MClose 函数,完成 uart.drv 文件的加载、初始化、打开、设备注册和关闭。至此,开发者可通过打开设备注册名所获得的句柄来调用对应的注册函数,下面是一段 UART0驱动使用代码。

图14:
在这里插入图片描述

【esDEV_Plugin(“\drv\uart.drv”, 0, NULL, 0)】:如上文所属会根据"\drv\uart.drv"加载固件中
的 uart.drv 驱动到内存,然后调用 mif.init、mif.open、mif.ioctrol、mif.close 接口,在本串口驱动
中则对应的是 DRV_UART_MInit、DRV_UART_MOpen、DRV_UART_MIoctrl、DRV_UART_MClose。需要注意的是函数 DRV_UART_MIoctrl(__mp *mp, __u32 cmd, __s32 aux, void *pbuffer)在这个过程中的 4 各参数:
mp:DRV_UART_MOpen 的返回值;
cmd:DRV_CMD_PLUGIN
aux:对应的是 esDEV_Plugin 函数的第二个参数 0;
pbuffer:对应的是 esDEV_Plugin 函数的第三个参数 NULL;
【pfuart0 = eLIBs_fopen(“\BUS\UART0”, 0)】:需要注意的是,参照源码 DRV_UART_MIoctrl 在处理
DRV_CMD_PLUGIN 消息的过程中调用了 esDEV_DevReg 函数,将为类名为“BUS”、设备名为“UART0”的设备及其接口函数结构体变量 uart_devop 一同注册到内核中。为使 eLIBs_fioctrl 这个接口映射成uart_devop.Ioctl 接口,需要先通过 eLIBs_fopen 接口打开“\BUS\UART0”获得句柄,再将句柄传递给eLIBs_fioctrl 接口,则此时 eLIBs_fioctrl == uart_devop.Ioctl,传参也一一对应。
eLIBs_fwrite函数也因为pfuart0参数映射成了uart_devop.Write,eLIBs_fclose函数也因为pfuart0
参数映射成了 uart_devop.Close;所以上述示例代码中设置波特率和数据发送的工作的得以实现。
类似的如果调用 eLIBs_fread 附带参数 pfuart0 就会映射成为 uart_devop.Read。

3.6.2.3.UART0 的 PIN 脚配置

考虑到芯片引脚封装、PCBA 成本之类的问题,目前市面上的控制器大多采用了引脚复用的方式来减少芯片管脚的使用,全志平台的芯片也采用了引脚复用的方法。
引脚的配置文件是“sdkroot\workspace\suniv\eFex\sys_config.fex”,uart 部分的配置如【图 14】
所示,uart 驱动代码中的 esCFG_GetKeyValue 函数和 esCFG_GetGPIOSecData 函数会通过字符串传参来搜索下面的键值,需要使用的串口要把 uart_used 设置为 1,并将 IO 和复用功能号配置正确。本章侧重于讲解模块的加载和使用以及为配合 UART 测试所涉及到的内容,所以对 sys_config.fex 和 GPIO 不在此详述,相关内容可参考《Melis2.0 文档使用指南.xlsx》
图15:
在这里插入图片描述

`

-. 全志相关工具和资源

-.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/94663.shtml

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

相关文章

软件或游戏提示msvcp120.dll丢失的5种常用解决方法,msvcp120.dll文件全面解析

在当今数字化的时代,我们的生活已经离不开各种软件和游戏。然而,有时候我们可能会遇到一些技术问题,比如“软件或游戏提示msvcp120.dll丢失”。这个问题对于许多人来说可能很棘手,但是只要掌握了正确的解决方法,就能轻…

【现代机器人学】学习笔记十四:中文版印刷/翻译勘误

首先声明,这个印刷/勘误并非经过官方的认可,只是我个人的粗浅的理解。如果内容有误,恳请大家谅解指正。 其实有的并不算错,只是我个人认为不太准确,在我学习过程中产生了一些小疑惑和误解。 都是一些小毛病&#xff…

OpenCV 14(角点特征Harris和Shi-Tomasi)

一、角点 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路…

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测|Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…

微信小程序button按钮去除边框去除背景色

button边框 去除button边框 在button上添加plain“true”在css中添加button.avatar-wrapper {background: none}用于去除button背景色在css中添加button.avatar-wrapper[plain]{ border:0 }用于去除button边框

机器学习——KNN算法流程详解(以iris为例)

、 目 录 前情说明 问题陈述 数据说明 KNN算法流程概述 代码实现 运行结果 基于可视化的改进 可视化代码 全部数据可视化总览 分类投票结果 改进后最终代码 前情说明 本书基于《特征工程入门与入门与实践》庄家盛 译版P53页K最近邻(KNN)算…

《C和指针》笔记33:指针数组

除了创建整型数组一样,也可以声明指针数组。 int *api[10];为了弄清这个复杂的声明,我们假定它是一个表达式,并对它进行求值。下标引用的优先级高于间接访问,所以在这个表达式中,首先执行下标引用。因此,a…

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

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

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&a…

Scala第十七章节

Scala第十七章节 scala总目录 文档资料下载 章节目标 了解集合的相关概念掌握Traversable集合的用法掌握随机学生序列案例 1. 集合 1.1 概述 但凡了解过编程的人都知道程序 算法 数据结构这句话, 它是由著名的瑞士计算机科学家尼古拉斯沃斯提出来的, 而他也是1984年图灵…

Java数据结构————优先级队列(堆)

一 、 优先级队列 有些情况下,操作的数据可能带有优先级, 一般出队列时,可能需要优先级高的元素先出队列。 数据结构应该提供两个最基本的操作, 一个是返回最高优先级对象, 一个是添加新的对象。 这种数据结构就是优…

使用华为eNSP组网试验⑷-OSPF多区域组网

今天进行了OSPF的多区域组网试验,本来这是个很简单的操作,折腾了好长时间,根本原因只是看了别人写的配置代码,没有真正弄明白里面对应的规则。 一般情况下,很多单位都使用OSPF进行多区域的组网,大体分为1个…

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。什么是异构计算&#xff1…

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向:目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向(构建目标系统的时间、开发阶段):软件工程 三、二维矩阵知识体系结构 一、纵向:目标系统的分层结构 1.1…

mysql主从复制和读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离 所以要做主从服务器,保证安全性 做一写一读服务器,将提升性能 1、什么是读写分离 …

隐私交易成新刚需,Unijoin 凭什么优势杀出重围?

随着区块链技术的普及和发展,全球加密货币用户在持续增长,根据火币研究院公布的数据,2022年全球加密用户已达到 3.2亿人,目前全球人口总数超过了 80亿,加密货币用户渗透率已达到了 4%。 尤其是在 2020 年开启的 DeFi 牛…

如何像人类一样写HTML之图像标签,超链接标签与多媒体标签

文章目录 前言一、图像标签1.1 什么是图像标签?2.2 如何使用图像标签? 二、超链接标签2.1 什么是超链接标签?2.2 如何使用超链接标签? 三、多媒体标签3.1 什么是多媒体标签?3.2 如何使用多媒体audio标签?3.…

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…