海思3861环境搭建

2023-11-11

开发环境

ubuntu18.04

DOPI3861开发板  

Q群:735884031

一.安装编译工具

1.按照官方文档下载编译工具并添加到环境变量中

https://device.harmonyos.com/cn/docs/start/introduce/quickstart-lite-env-setup-linux-0000001105407498

2.切换本地python / python3 环境

3861编译环境最低要求python3.7环境,先查看系统已安装的python环境

/usr/bin# ls python*
python  python2  python2.7  python3  python3.6  python3.6-config  python3.6m  python3.6m-config  python3.8  python3-config  python3m  python3m-config

 笔者系统已经安装了python2.7 、python3.6 和 python3.8版本,如果有小伙伴的系统里没有安装3.8以上版本的请自行更新旧版本python或重新安装新版本的python。

先查看系统默认使用的python版本

/usr/bin# python --version
Python 2.7.17
/usr/bin# python3 --version
Python 3.6.9

这里默认使用的版本显然是不符合3861编译的要求的,接下来将系统默认的版本切换到python3.8,先建立python组添加而可选项

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 # 添加Python可选项,优先级为1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 # 添加Python2可选项,优先级为1

执行完之后可以看到python和python3均链接到 /etc/alternatives/ 下了

/usr/bin# ls -l python*
lrwxrwxrwx 1 root root      24 8月   3 22:21 python -> /etc/alternatives/python
lrwxrwxrwx 1 root root       9 4月  16  2018 python2 -> python2.7
-rwxr-xr-x 1 root root 3633000 2月  27 23:10 python2.7
lrwxrwxrwx 1 root root      25 8月   3 22:26 python3 -> /etc/alternatives/python3
-rwxr-xr-x 2 root root 4526456 1月  26  2021 python3.6
lrwxrwxrwx 1 root root      33 1月  26  2021 python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 1月  26  2021 python3.6m
lrwxrwxrwx 1 root root      34 1月  26  2021 python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 1 root root 5203488 2月  26 06:10 python3.8
lrwxrwxrwx 1 root root      16 10月 25  2018 python3-config -> python3.6-config
lrwxrwxrwx 1 root root      10 10月 25  2018 python3m -> python3.6m
lrwxrwxrwx 1 root root      17 10月 25  2018 python3m-config -> python3.6m-config

 切换python使用版本,选择对应的python版本就可以了

/usr/bin# update-alternatives --config python
有 3 个候选项可用于替换 python (提供 /usr/bin/python)。

  选择       路径              优先级  状态
------------------------------------------------------------
  0            /usr/bin/python2.7   1         自动模式
* 1            /usr/bin/python2.7   1         手动模式
  2            /usr/bin/python3.6   1         手动模式
  3            /usr/bin/python3.8   1         手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:3

查看下当前使用的python版本(将python3也使用同样的方式切换至3.8版本),至此python环境就搭建好了,可以安心的编译了

/usr/bin# python --version
Python 3.8.0

3.安装交叉编译链,下载sdk

交叉编译链下载:

https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz

sdk下载

https://device.harmonyos.com/cn/docs/start/get-code/sourcecode-acquire-0000001050769927

解压交叉编译链,笔者喜欢把交叉编译链放在/opt下,有其他爱好的小伙伴也可以在sdk目录下

/home/cjx/fdsk/hi3861/tools# ls
gn-linux-x86-1717.tar.gz  hcc_riscv32.tar.gz  llvm.tar.gz  ninja.1.9.0.tar
/home/cjx/fdsk/hi3861/tools# tar -zxvf hcc_riscv32.tar.gz -C /opt/

在 /etc/profile 文件的最后添加,也可以在sdk目录下新建一个shll脚本,开发前先source下该脚本

export PATH="/opt/hcc_riscv32/bin:$PATH"

4.编译

解压sdk后再根目录下执行make,全编译

# ls
app  boot  build  build_patch.sh  build.sh  components  config  factory.mk  include  Makefile  non_factory.mk  output  platform  SConstruct  third_party  tools

编译的过程当然不会是一帆风顺了,报错查找不到ecdsa编译工具

在官方文档中开发步骤,安装开发板环境中,按照文档安装python依赖库

 安装完成后重新编译,编译完成

-------------/home/cjx/fdsk/hi3861/Hi3861V100R001C00SPC025/output/bin/Hi3861_demo_ota.bin image info print start-------------
[image_id=0x3c78961e][struct_version=0x0]]
[section_offset=0x280][section_len=0x55780]
[file_type=0xf0][file_version=0x0][encrypt_flag=0x42]
[file_len=0x55a00][key_len=0x120]
[file_attr=0x44]
[hash_alg=0x0][sign_alg=0x3f][sign_param=0x0]
[aes_key[0-1-14-15]=[0x0][0x0][0x0][0x0]]
[aes_iv [0-1-14-15]=[0x0][0x0][0x0][0x0]]
[common key][00]=[0x0]
[common key][01]=[0x0]
[common key][30]=[0x0]
[common key][31]=[0x0]
[common sign][00]=[0x3a]
[common sign][01]=[0xb5]
[common sign][30]=[0xa7]
[common sign][31]=[0xdf]
[section sign][00]=[0x7c]
[section sign][01]=[0x30]
[section sign][30]=[0xbc]
[section sign][31]=[0x6c]
[image_id=0x3c78961e][struct_version=0x0]]
[hash_alg=0x0][sign_alg=0x3f][sign_param=0x0]
[section_count=0x1]
[section0_compress=0x1][section0_offset=0x3c0][section0_len=0x55639]
[section1_compress=0x0][section1_offset=0x0][section1_len=0x0]
-------------/home/cjx/fdsk/hi3861/Hi3861V100R001C00SPC025/output/bin/Hi3861_demo_ota.bin image info print end--------------
< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >
                              BUILD SUCCESS
< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >
make[1]: 离开目录“/home/cjx/fdsk/hi3861/Hi3861V100R001C00SPC025”
/home/cjx/fdsk/hi3861/Hi3861V100R001C00SPC025#

 5.烧录

选择 output/bin/Hi3861_xxx_allinone.bin,勾选Auto burn

点击connect后按下开发板的复位按键,等待下载完成,下载完成后点击disconnect

 

 5.添加helloword

 在app下新建一个hello_word的文件夹,hello_word下新建一个src用于存放源代码

拷贝app/demo/app.json和SConscript到hello_word下

拷贝app/demo/src/SConscript到hello_word/src下

hello_word# tree
.
├── app.json
├── SConscript
└── src
    ├── helloword.c
    └── SConscript

修改app.json,该文件用于指定工程的源文件和头文件路径

{
    "TARGET_LIB": "demo",
    "APP_SRCS": [
        "src"
    ],
    "INCLUDE": [
        "components/iperf2/include",
        "config/app",
        "config/diag",
        "platform/os/Huawei_LiteOS/net/ripple/exports",
        "components/ripple/exports",
        "components/hilink/include",
        "third_party/mbedtls/include/mbedtls/",
        "include/OHOS"
    ],
    "CC_FLAGS": [
    ],
    "DEFINES": [
        "_PRE_WLAN_FEATURE_CSI",
        "_PRE_WLAN_FEATURE_P2P",
        "LWIP_ENABLE_DIAG_CMD=0"
    ],
    "AR_FLAGS": [],
    "LD_FLAGS": [],
    "AS_FLAGS": [],
    "LD_DIRS": [],
    "CLEAN": []
}

helloword.c文件

hi_void app_main(hi_void)
{
 	while(1)
	{
		printf("hello word\n");
		sleep(1);
	}
}

SConscript文件不做修改,回到sdk的根目录下使用build.sh单独编译helloword

# ./build.sh hello_word

查看output/bin目录下,生成了hello_word对应的固件

# ll
总用量 29320
drwxrwxrwx 2 root root     4096 8月   6 22:55 ./
drwxrwxrwx 3 1014 1014     4096 8月   5 22:49 ../
-rwxrwxrwx 1 root root    24576 8月   6 22:24 Hi3861_boot_signed_B.bin*
-rw-r--r-- 1 root root    23312 8月   6 22:24 Hi3861_boot_signed.bin
-rwxrwxrwx 1 root root   614820 8月   6 22:24 Hi3861_demo_allinone.bin*
-rwxrwxrwx 1 root root 13982586 8月   6 22:24 Hi3861_demo.asm*
-rwxrwxrwx 1 root root   599984 8月   6 22:24 Hi3861_demo_burn.bin*
-rwxrwxrwx 1 root root    24272 8月   6 22:24 Hi3861_demo_flash_boot_ota.bin*
-rwxrwxrwx 1 root root  2090180 8月   6 22:24 Hi3861_demo.map*
-rwxrwxrwx 1 root root   350720 8月   6 22:24 Hi3861_demo_ota.bin*
-rwxr-xr-x 1 root root  1396384 8月   6 22:24 Hi3861_demo.out*
-rwxrwxrwx 1 root root        8 8月   6 22:24 Hi3861_demo_vercfg.bin*
-rw-r--r-- 1 root root   224324 8月   6 22:55 Hi3861_hello_word_allinone.bin
-rw-r--r-- 1 root root  7575499 8月   6 22:55 Hi3861_hello_word.asm
-rw-r--r-- 1 root root   209488 8月   6 22:55 Hi3861_hello_word_burn.bin
-rw-r--r-- 1 root root    24272 8月   6 22:55 Hi3861_hello_word_flash_boot_ota.bin
-rw-r--r-- 1 root root  1900185 8月   6 22:55 Hi3861_hello_word.map
-rw-r--r-- 1 root root    99024 8月   6 22:44 Hi3861_hello_word_ota.bin
-rwxr-xr-x 1 root root   825080 8月   6 22:55 Hi3861_hello_word.out*
-rw-r--r-- 1 root root        8 8月   6 22:55 Hi3861_hello_word_vercfg.bin
-rw-r--r-- 1 root root    14688 8月   6 22:24 Hi3861_loader_signed.bin

选择Hi3861_hello_word_allinone.bin进行烧录

ready to OS start
hello word
hello word
hello word
hello word

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

海思3861环境搭建 的相关文章

  • STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息 这篇博客是对ADC内容的一个总结提升 ADC的详细介绍 ADC详解 程序说明 为了使这次代码阅读
  • React 中的组件实例和类实例

    import React from react import ReactDOM from react dom 函数组件 function Hello1 return h1 Hello Word h1 const Hello2 gt h2 H

随机推荐

  • 【业务功能110】微服务-springcloud-springboot-Kubernetes集群部署-kubeadm极速部署-Docker安装

    kubeadm极速部署Kubernetes 1 24版本集群 一 Kubernetes 1 24版本集群部署 1 1 Kubernetes 1 24版本集群部署环境准备 1 1 1 主机操作系统说明 序号 操作系统及版本 备注 1 Cent
  • [Go 夜读 第 139 期] Go 语言 Excelize 开源基础库介绍

    Excelize 是 Go 语言编写的用于操作电子表格文档的基础库 支持 XLAM XLSM XLSX XLTM XLTX 等多种文档格式 高度兼容带有样式 图片 表 透视表 切片器等复杂组件的文档 并提供流式读写支持 用于处理包含大规模数
  • ERROR/WindowManager(***): Activity *** has leaked window com.android.internal.policy.impl.PhoneWind

    在做项目是遇到这个错误 google WindowManager Activity has leaked window 在stackoverflow com 链接http stackoverflow com questions 285057
  • Revit二次开发之“取得元素相交点IntersectionResultArray通过LocationCurve.Intersect()”...

    1 取得元素的曲线 比如风管 LocationCurve元素曲线 LocationCurve curve duct Location as LocationCurve 取得可以根据曲线确定位置的元素的曲线 2 根据曲线取得交点 Inters
  • 百度离线地图开发

    2D离线地图介绍 局域网环境下部署 完全脱离互联网 通过下载瓦片图 离线地图API js库 方式实现 一 2D离线瓦片下载 通过瓦片下载软件实现离线瓦片的下载 1 普通街道图瓦片 如下图 2 个性化瓦片 如下图 3 卫星图影像瓦片 如下图
  • Python学习:Selenuim+Python元素定位总结

    对象的定位应该是自动化测试的核心 要想操作一个对象 首先应该识别这个对象 一个对象就是一个人一样 他会有各种的特征 属性 如比我们可以通过一个人的身份证号 姓名 或者他住在哪个街道 楼层 门牌找到这 个人 那么一个对象也有类似的属性 我们可
  • Go语言学习-基本

    命名 如果是在函数外部定义 那么将在当前包的所有文件中都可以访问 名字的开头字母的大小写决定了名字在包外的可见性 如果一个名字是大写字母开头的 译注 必须是在函数外部定义的包级名字 包级函数名本身也是包级名字 那么它将是导出的 也就是说可以
  • 快速排序的递归实现和非递归实现

    一 快速排序的递归实现 快速排序的思想是每次找到一个元素的位置 再在以这个元素分隔的两个子范围中分别再各自确定一个元素的位置 子子范围也是如此操作 当某个子范围只有一个元素或者没有元素时 便不再做任何操作 这是一个递归过程 递归退出的边界就
  • 怎么判断map不为空

    示例代码 public static void main String args Map
  • (Oracle 基础篇) SQL 基础

    什么是SQL SQL 结构化查询语言 的主要功能就是在各种数据库建立联系 进行沟通 SQL语言分类 1 定义要在数据库存储那些信息的数据定义语言 DDL 主要针对对象 数据表 视图和索引 2 对数据库中的表进行操作的数据操作语言 DML 主
  • 视觉里程计2

    1 前言 为了克服特征点法的缺点 提出了以下几种思路 1 光流法 2 直接法 2 光流 2 1直接法 优化 最小化光度误差 实际上就是寻找全局像素误差总和最小的的情况 这种优化的理由仍然是灰度不变假设
  • Python函数练习题

    函数部分 1 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 如果number是奇数 collatz 就打印3 number 1 def collatz nu
  • javaee用户注册和登录界面源码

    JavaEE是一个企业级的 Java 应用程序开发平台 它提供了一组标准的技术和工具来帮助开发人员快速构建和部署企业级的 Java 应用程序 在 JavaEE 中 用户注册和登录界面可以使用 JSP Java Server Pages 技术
  • html文件存储服务,HTML5中五种存储方式的介绍

    本篇文章给大家带来的内容是关于HTML5中五种存储方式的介绍 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 h5之前 存储主要是用cookies cookies缺点有在请求头上带着数据 大小是4k之内 主Domain污染 主
  • pandas.DataFrame.groupby 按某列类型值将文件分为多个文件

    1 groupby pandas DataFrame groupby groupby函数使用映射器或一系列列对数据帧进行分组 groupby操作涉及拆分对象 应用函数和组合结果的某种组合 这可以用于对大量数据进行分组 并对这些分组进行计算操
  • 若依开发时指定el-dialog局部显示的方法

    第一步 实例化一个 el dialog 最外面的div就是ei dialog要显示的位置 div div
  • ajax、axios、fetch之间的区别与联系

    整理ajax axios fetch优缺点 简单总结 JavaScript是一门前端语言 AJAX是一门技术 它提供了异步更新的机制 使客户端与服务器间交换数据而非整个页面文档 实现页面的局部更新 jQuery是一个框架 它对JavaScr
  • React - 路由 lazyLoad 的使用(路由懒加载)

    React 路由 lazyLoad 路由懒加载 lazy是React提供的懒 动态 加载组件的方法 React lazy 路由组件代码会被分开打包 能减少打包体积 延迟加载首屏不需要渲染的组件 依赖内置组件Suspense标签的fallba
  • scau oj 10848 2021-11-06

    18048 自由落体 时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 G GCC VC Description 一个球从100米的高度自由落下 每次落地后弹起的原来高度的一半 计算并输出第n次
  • 海思3861环境搭建

    开发环境 ubuntu18 04 DOPI3861开发板 Q群 735884031 一 安装编译工具 1 按照官方文档下载编译工具并添加到环境变量中 https device harmonyos com cn docs start intr