OpenHarmony南向嵌入式:【XR806开发板指导文档】
一. 简介
芯片介绍
XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片,支持OpenHarmony轻量设置系统。具有集成度高、硬件设计简单、BOM成本低、安全可靠等优点。可广泛满足 智能家居、智慧楼宇、工业互联、儿童玩具、电子竞赛、极客DIY等领域的无线连接需求。
开发板介绍
XR806_OpenHarmony开发板是基于XR806芯片设计开发的参考评估,板身集成了XR806芯片、WiFi/BT双天线、供电系统、按钮及LED等,并引出了所有可用引脚,可供开发者进行方案评估、DIY或小规模产品研发使用。以下为开发板外观图(更多硬件资料地址
二. 快速上手
1. 环境搭建
开发基础环境由windows 工作台和Linux编译服务器组成。windows 工作台可以通过samba 服务或ssh 方式访问Linux编译服务器。其中windows 工作台用来烧录和代码编辑,Linux编译服务器用来编译OpenHarmony代码,为了简化步骤,Linux编译服务器推荐安装Ubuntu20.04。
安装编译依赖基础软件
sudo apt-get install -y build-essential gcc g++ make zlib* libffi-dev
安装和配置Python
-
打开Linux编译服务器终端。
-
输入如下命令,查看python版本号,需使用python3.7以上版本。
python3 --version
如果低于python3.7版本,不建议直接升级,请按照如下步骤重新安装。以python3.8为例,按照以下步骤安装python。
-
运行如下命令,查看Ubuntu版本:
cat /etc/issue
-
根据Ubuntu不同版本,安装python。
-
如果Ubuntu 版本为18+,运行如下命令。
sudo apt-get install python3.8
-
如果Ubuntu版本为16。
a. 安装依赖包
sudo apt update && sudo apt install software-properties-common
b. 添加deadsnakes PPA 源,然后按回车键确认安装。
sudo add-apt-repository ppa:deadsnakes/ppa
c. 安装python3.8
sudo apt upgrade && sudo apt install python3.8
-
-
-
设置python和python3软链接为python3.8。
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
-
安装并升级Python包管理工具(pip3),任选如下一种方式。
-
命令行方式:
sudo apt-get install python3-setuptools python3-pip -y sudo pip3 install --upgrade pip
-
安装包方式:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py
-
安装gn
-
打开Linux编译服务器终端。
-
在根目录下创建gn文件夹。
mkdir ~/gn
-
解压gn安装包至~/gn路径下。
tar -xvf gn-linux-x86-1717.tar.gz -C ~/gn
-
设置环境变量。
vim ~/.bashrc
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/gn:$PATH
-
生效环境变量。
source ~/.bashrc
安装ninja
-
打开Linux编译服务器终端。
-
解压ninja安装包至~/ninja路径下。
tar -xvf ninja.1.9.0.tar -C ~/
-
设置环境变量。
vim ~/.bashrc
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/ninja:$PATH
-
生效环境变量。
source ~/.bashrc
安装工具链
-
编译链工具推荐gcc-arm-none-eabi-10-2020-q4-major。
-
将gcc-arm-none-eabi-10-2020-q4-major包解压到~/tools目录下
tar -zxvf gcc-arm-none-eabi-10-2020-q4-major.tar.gz -C ~/tools/
2. 获取源码
安装码云repo工具
cd ~/
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ./repo
chmod a+x ./repo
sudo mv ./repo /usr/local/bin/
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
代码下载
- OpenHarmony代码下载,以OpenHarmony 3.1 Beta版本为例,下载方式如下:
mkdir ~/openharmony
cd ~/openharmonyrepo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Beta --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
-
下载板级soc模块
soc下面是包含芯片SDK和驱动代码、第三方库适配等接口层代码。下载方法如下:
mkdir ~/xradio cd ~/xradio git clone git@gitee.com:openharmony-sig/device_soc_allwinner.git
因为最新的代码未在适配相应的HDF驱动,所以需要将代码回退到指定版本:d5d336941a1ba1ba3b84aebab1d7173d20968ccd
cd device_soc_allwinner git reset --hard d5d336941a1ba1ba3b84aebab1d7173d20968ccd
将此代码拷贝到soc下并重新命名为allwinner
cp -raf device_soc_allwinner ~/openharmony/device/soc/allwinner
-
下载板级board模块
board主要存放板级配置,下载方法:
git clone git@gitee.com:openharmony-sig/device_board_allwinner.git
将此代码拷贝到board下并重新命名为allwinner
cp -raf device_board_allwinner ~/openharmony/device/board/allwinner
-
下载vendor模块
vendor存放的都是一些基于XRMCU开发的WiFi模组代码样例,下载方法:
git clone git@gitee.com:openharmony-sig/vendor_allwinner.git
将此代码拷贝到vendor下并重新命名为allwinner
cp -raf vendor_allwinner_xr806 ~/openharmony/vendor/allwinner
安装hb
cd ~/openharmony
pip3 install build/lite # 此语句需要在SDK根目录下执行。
3. 编写自己的hello word
在vendor/allwinner/xradio_wifi_demo创建demo_hello_world文件夹
cd vendor/allwinner/xradio_wifi_demo/
mkdir demo_hello_world
然后创建hello_world.c 以及BUILD.gn
cd demo_hello_world
touch hello_world.c
touch BUILD.gn
在hello_world.c中添加以下代码
#include <stdio.h>
#include <string.h>#include "ohos_init.h"int DemoMain(int argc, char **argv)
{printf("\r\nhello world!\r\n\r\n");return 0;
}SYS_RUN(DemoMain);
在BUILD.gn中添加以下代码
source_set("hello_world"){sources = ["hello_world.c"]
}
将helloworld添加到编译中,在 device/soc/allwinner/xradio/xr806/BUILD.gn中添加以下依赖:
module_group(module_name) {modules = ["src","project","include",]configs = [":SdkLdCconfig",]deps = [ "//vendor/allwinner/xradio_wifi_demo/demo_hello_world:hello_world" ]
}
4. 编译
-
hb set 选择demo指令,具体命令如下:
hb set -root # 通过键盘选择 xradio_wifi_demo
-
修改编译工具链地址
cd kernel/liteos_m make menuconfig
然后选择Compiler->Compiler type(GCC),然后选择路径一行,按回车会弹出路径的输入框,此时输入实际的工具链地址。按ESC返回,最后退出并保存配置即可。
-
修改配置文件中的工具链路径
device/board/allwinner/xradio/liteos_m/config.gni
device/soc/allwinner/xradio/xr806/build/Makefile
-
hb build 全量编译命令
hb build -f
如果编译中出现如下错误:
需要修改device/soc/allwinner/xradio/osal/include/target_config.h
// #define OS_SYS_CLOCK (SystemCoreClock)
#define OS_SYS_CLOCK 160000000
5. 烧录 && 运行
- 固件和烧录软件位置
- 编译生成的固件保存在out/xradio/xradio_wifi_demo目录下,文件名固定为xr_system.img。
- 烧录软件保存在device/soc/allwinner/xradio/xr806/tools下,名称为phoenixMC_xxxx.exe。
-
烧录软件界面
-
操作步骤
-
PC安装CP2102驱动。
-
串口连接:通过USB-typeC数据线连接开发板和PC。
-
串口设置:点击左上角的“刷新”按钮可刷新已连接串口设备列表,勾选开发板对应的COM口。串口波特率最大支持3000000,波特率越高,烧录速度越快。如果高波特率下容易出现烧录失败,可检查串口线、串口驱动是否稳定支持该波特率;或者降低波特率进行尝试。为了避免烧录速度过慢,建议波特率选择3000000。
-
固件选择:点击“选择固件”按钮选择需要烧录的固件文件(xr_system.img),固件信息栏会显示出当前固件的详细信息。另外,通过拖拽方式将固件直接拖入工具界面也可以达到同样的效果。
-
开启一键烧录功能:点击“设置”按钮调出设置界面,如下图勾选“硬件复位烧写模式”.
-
启动烧录:点击“升级固件”按钮启动固件烧录。烧录状态栏显示当前选定串口对应设备的烧录进度和状态。当烧录成功时,进度条会达到100%的进度并显示为绿色;当烧录失败时,进度条显示为红色并报告错误。
-
复位设备:固件烧录成功后,开启PC串口调试工具(115200,N,8,1),硬件复位开发板(按下复位按钮),程序将运行且看到以下打印输出。
鸿蒙Next核心技术分享
1、鸿蒙基础知识←《鸿蒙NEXT星河版开发学习文档》
2、鸿蒙ArkUI←《鸿蒙NEXT星河版开发学习文档》
3、鸿蒙进阶技术←《鸿蒙NEXT星河版开发学习文档》
4、鸿蒙就业高级技能←《鸿蒙NEXT星河版开发学习文档》
5、鸿蒙多媒体技术←《鸿蒙NEXT星河版开发学习文档》
6、鸿蒙南向驱动开发←《鸿蒙NEXT星河版开发学习文档》
7、鸿蒙南向内核设备开发←《鸿蒙NEXT星河版开发学习文档》
8、鸿蒙系统裁剪与移植←《鸿蒙NEXT星河版开发学习文档》
相关文章:

OpenHarmony南向嵌入式:【XR806开发板指导文档】
一. 简介 芯片介绍 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片,支持OpenHarmony轻量设置系统。具有集成度高、硬件设计简单、BOM成本低、安全可靠等优点。可广泛满足 智能家居、智慧楼宇、工业互联、儿童玩具、电子竞…...
Rust 实战练习 - 10. JSON、XML、YAML/TOML、Ini专题
配置文件 常见的配置文件有很多:JSON, Ini, XML, TOML, YAML … 目标: JSON/YAML/TOMLIniXML Rust中序列化用的最多的是 serde, 依赖它,有很多出色的第三方库可以使用。 其中,serde本身支持JSON/YAML/TOML/JSON5…多种&#…...

5.Hexo为页面标记标签和类别
Hexo的标签和类别基本上是可以在Hexo中将内容分组的两种方式 如果在网站上有一堆内容,有不同的博客文章 将博客文章分类为不同的类别会很有帮助 用特定的关键词为博客文章标记 如果可以同时分类和标记页面,会使网站用户更轻松地找到他们想要的页面类型 …...

·13·1dawwd
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...
Docker - PostgreSQL
博文目录 文章目录 说明命令 说明 Docker Hub PostgreSQL 数据卷数据卷印射在容器内的路径postgres/var/lib/postgresql/data |容器内的路径|说明| |–|–|–| |/var/lib/postgresql/data|数据目录| 部分环境变量是否必要说明POSTGRES_PASSWORD必需设置超级用户密码POSTGRES…...

Python | Leetcode Python题解之第26题删除有序数组中的重复项
题目: 题解: class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n len(nums)fast slow 1while fast < n:if nums[fast] ! nums[fast - 1]:nums[slow] nums[fast]slow 1fast 1return slow...

【电控笔记4】拉普拉斯-传递函数-pid
数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质...
针对“AI+医疗”的可行方案
针对“AI医疗”的可行方案如下: 一、方案目标 利用AI技术,结合医疗数据,开发一套高效、准确的医疗辅助系统,旨在提高医疗诊断的精度、加速药物研发进程、优化疾病预测模型,从而辅助医生进行疾病诊断和治疗方案制定。…...

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测
时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…...

Go——面向对象
一. 匿名字段 go支持只提供类型而不写字段名的方式,也就是匿名字段,也称为嵌入字段。 同名字段的情况 所以自定义类型和内置类型都可以作为匿名字段使用 指针类型匿名字段 二.接口 接口定义了一个对象的行为规范,但是定义规范不实现ÿ…...
身份证识别ocr、身份证实名认证接口文档
每一次验证背后,都是对用户数据安全的承诺,对平台信誉的坚守。翔云身份证实名认证API,通过身份证识别接口仅需一键上传身份证图片即可快速识别身份证信息,翔云实名认证接口实时联网查验证件信息的真伪。 PHP身份证实名认证接口…...
C++ 文件操作
C中对文件操作需要包含头文件 < fstream > 文件类型分为两种: 1 . 文本文件 - 文件以文本的**ASCII码**形式存储在计算机中 2 . 二进制文件 - 文件以文本的**二进制**形式存储在计算机中,用户一般不能直接读懂它们 操作文件的三大类: 1 . ofstream…...

【数据结构】-- 单链表 vs 双向链表
🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…...

暴雨孙辉:做好服务器,但更要辟出技术落地之道
稳扎稳打一直是暴雨的风格,这在被访者孙辉的身上尽显。作为暴雨(武汉暴雨信息发展有限公司)中国区销售及市场副总裁,在谈及公司的技术发展与市场推广走势之时,孙辉沉稳、敏锐且逻辑清晰。 因在服务器领域起步很早&…...

天地人和•大道不孤——卢禹舜中国画作品展在重庆美术馆隆重开幕
2024年4月12日,由中国国家画院、重庆市文化和旅游发展委员会主办,重庆美术馆(重庆画院、重庆国画院)、北京八荒锦绣美术馆、中国国际文化交流基金会卢禹舜艺术基金承办的“天地人和•大道不孤——卢禹舜中国画作品展”开幕式在重庆…...
python-pytorch使用日志0.5.007
python-pytorch使用日志 1. optimizer.zero_grad()和model.zero_grad()的区别2. cbow和skip-gram的训练数据格式3. 获取cbow和skip-gram训练后的中文词向量4. 获取到词向量后可以做什么5. 余弦相似度结果的解释 1. optimizer.zero_grad()和model.zero_grad()的区别 都是清空模…...

itop4412编译内核时garbage following instruction -- `dmb ish‘ 解决方案
王德法 没人指导的学习路上磕磕绊绊太耗费时间了 今天编译4412开发板源码时报 garbage following instruction – dmb ish’ 以下是解决方案: 1.更新编译器 sudo apt-get install gcc-arm-linux-gnueabi 更新后修改Makefile 中编译器路径如下图 2.你以为更新完就可…...

(学习日记)2024.04.16:UCOSIII第四十四节:内存管理
写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...

微信小程序Skyline模式下瀑布长列表优化成虚拟列表,解决内存问题
微信小程序长列表,渲染的越多就会导致内存吃的越多。特别是长列表的图片组件和广告组件。 为了解决内存问题,所以看了很多人的资料,都不太符合通用的解决方式,很多需要固定子组件高度,但是瀑布流是无法固定的…...
大语言模型LLM《提示词工程指南》学习笔记03
文章目录 大语言模型LLM《提示词工程指南》学习笔记03链式提示思维树检索增强生成自动推理并使用工具自动提示工程师Active-Prompt方向性刺激提示Program-Aided Language ModelsReAct框架Reflexion多模态思维链提示方法基于图的提示大语言模型LLM《提示词工程指南》学习笔记03 …...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...