星闪WS63E开发板的OpenHarmony环境构建
目录
引言
关于SDK
安装步骤
1. 更新并安装基本依赖
2. 设置 Python 3.8 为默认版本
3. 安装 Python 依赖
4. 安装有冲突的包
5. 设置工作目录
6. 设置环境变量
7. 下载预构建文件以及安装编译工具
8. 编译工程
nearlink_dk_3863
设置编译产品
编译
制品存放路径
nearlink_dk_3863_xts
设置编译产品
编译
制品存放路径
build_xts=true 的解释
磁盘空间占用
结语
引言
前段时间我参加了星闪开发者体验官的活动,对星闪WS63E开发板进行了测试,相关的过程都发表在博客上了。当时使用的是海思提供的SDK,有关环境配置参见:【星闪开发连载】WS63E开发板Windows环境的构建_hispark studio-CSDN博客。润和也提供了OpenHarmony的SDK,不过当时没有测试,接下来做一些测试工作。
关于SDK
目前润和的OpenHarmony SDK还没有对外公开,需要的可以向润和的客服索要。我测试的版本是oh_sdk_20241022.tar.gz。据说润和马上就要对外公布OpenHarmony SDK。这个SDK是基于OpenHarmony 5.0x的,因为只有OpenHarmony 5.01以上的版本才支持星闪芯片。相对于海思的SDK而言,OpenHarmony SDK其实要复杂的多,整个SDK大概有1.6GB(里面有星闪用不到的代码,但是没有被删除),解压后大概9GB多一些。
安装步骤
下面在一个全新的Ubuntu 20.04系统上搭建开发环境。我专门租用了华为的ECS服务器(Ubuntu 20.04系统)来完成这个工作,考虑到OpenHarmony SDK庞大的尺寸,我选择了有100GB的配置,实际上可能用不了那么多,但是确保系统有40GB的空余空间应该是必要的,因为安装之前还会下载很多库,非常庞大。
我刚开始曾经想用OpenHarmony官方的轻量级Docker来做这个工作,不过事实证明这个Docker编译星闪WS63E问题很多,所以就放弃了。估计这个Docker对于OpenHarmony 5.0x的支持有问题。
下面的安装步骤参考了海思论坛上的介绍:海思社区,并根据自己的操作经验进行了修订。
1. 更新并安装基本依赖
首先,更新您的包管理器,并安装一些基本的依赖项:
sudo apt-get update
sudo apt-get install -y software-properties-common apt-utils
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y \cmake binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev-i386 libc6-dev \lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc \gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl \libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools \mtools default-jre default-jdk libncurses5 wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync \xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev \libtinfo5 libncursesw5 libstdc++6 vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
2. 设置 Python 3.8 为默认版本
为了确保系统使用 Python 3.8(华为的ECS上的Python版本是3.8.10),请运行以下命令(第二个命令在华为ECS上可以省略):
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
3. 安装 Python 依赖
安装 pycparser 和 cmake:
python3 -m pip install pycparser cmake
4. 安装有冲突的包
某些包需要单独安装:
sudo apt-get update
sudo apt-get install -y gcc-multilib g++-multilib
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
5. 设置工作目录
假设您的 SDK 路径为 /path/to/your/sdk。为了使每次执行都能自动找到SDK路径,可以将其添加到环境变量中。在 ~/.bashrc 文件中添加以下行:
echo 'export SDK_PATH=/path/to/your/sdk' >> ~/.bashrc
source ~/.bashrc
之后,您可以更改工作目录到SDK路径:
cd $SDK_PATH
6. 设置环境变量
为了使编译工具链和其他工具可用,需要将它们添加到 PATH 中:
echo 'export PATH=$SDK_PATH/device/soc/hisilicon/ws63v100/sdk/tools/bin/compiler/riscv/cc_riscv32_musl_100/cc_riscv32_musl/bin:$PATH' >> ~/.bashrc
echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
echo 'export PATH=$SDK_PATH/prebuilts/clang/ohos/linux-x86_64/llvm/bin:$PATH' >> ~/.bashrc
echo 'export LC_ALL=C' >> ~/.bashrc
echo 'export LANG=C' >> ~/.bashrc
source ~/.bashrc
注意:海思论坛原文给出的路径是 $SDK_PATH/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl/bin。不过我的SDK的路径是上面写的,估计这是因为使用的SDK版本不同导致的。所以您在测试时,建议看看自己的SDK中的习惯路径。
建议在执行完以上的语句后执行riscv32-linux-musl-gcc -v,以确保路径设置正确。如果正确,应该是类似下面的输出:
root@near-link:~/near_link_sdk# riscv32-linux-musl-gcc -v
Using built-in specs.
COLLECT_GCC=riscv32-linux-musl-gcc
COLLECT_LTO_WRAPPER=/root/near_link_sdk/device/soc/hisilicon/ws63v100/sdk/tools/bin/compiler/riscv/cc_riscv32_musl_100/cc_riscv32_musl/bin/../libexec/gcc/riscv32-linux-musl/7.3.0/lto-wrapper
Target: riscv32-linux-musl
Configured with: /devcloud/workspace/cc_source/build/cc_riscv32_musl/../../open_source/cc_riscv32_musl_build_src/gcc/configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=riscv32-linux-musl --with-arch=rv32imc --prefix=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl --disable-multilib --disable-__cxa_atexit --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-libgomp --enable-libssp --disable-threads --enable-shared --with-abi=ilp32 --enable-poison-system-directories --enable-symvers=gnu --with-pkgversion='build ver102.010 2024-04-2' --enable-languages=c,c++ --with-headers=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl/sysroot/usr/include --with-sysroot=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl/sysroot --with-build-sysroot=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl/sysroot --with-gmp=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/obj/host-libs/usr --with-mpfr=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/obj/host-libs/usr --with-mpc=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/obj/host-libs/usr --with-isl=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/obj/host-libs/usr --with-build-time-tools=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl/riscv32-linux-musl/bin --libdir=/devcloud/workspace/cc_source/build/cc_riscv32_musl/riscv32_elf_musl_build_dir/cc_riscv32_musl/lib --disable-libitm --with-system-zlib
Thread model: single
gcc version 7.3.0 (build ver102.010 2024-04-2)
7. 下载预构建文件以及安装编译工具
此处做了一点简化,运行以下命令下载必要的预构建文件及安装编译工具:
$SDK_PATH/build/prebuilts_download.sh
python3 -m pip install --user $SDK_PATH/build/hb || (python3 -m pip uninstall -y ohos-build && python3 -m pip install --user $SDK_PATH/build/hb)
$SDK_PATH/build/prebuilts_download.sh会在和SDK父目录下建立openharmony_prebuilts目录,然后现在很多工具,由于部分工具非常庞大(1GB以上),所以现在过程很长。我不确定这些工具都是必须的,感觉上只有llvm编译器是必须的。我没有尝试修改这个脚本,有兴趣的朋友可以看看。
这个脚本执行会失败,错误如下:
start npm install, please wait.
Traceback (most recent call last):File "/root/near_link_sdk/build/prebuilts_download.py", line 430, in <module>sys.exit(main())File "/root/near_link_sdk/build/prebuilts_download.py", line 407, in mainresult, error = _npm_install(args)File "/root/near_link_sdk/build/prebuilts_download.py", line 263, in _npm_installraise Exception("{} not exist, it shouldn't happen, pls check...".format(full_code_path))
Exception: /root/near_link_sdk/developtools/ace_ets2bundle/compiler not exist, it shouldn't happen, pls check...
失败的原因是SDK里面没有developtools/ace_ets2bundle/compiler,但是这个错误可以忽略,不影响后面的步骤。
通过以上步骤,您应该已经成功搭建了开发环境。请根据具体项目的需求进行进一步的配置和调试。
8. 编译工程
nearlink_dk_3863
设置编译产品
hb set -p nearlink_dk_3863
编译
hb build -f
编译还算快,最后看到这些就成功了:
…………
[OHOS INFO] Filesystem: tmpfs, Size: 5.0M, Used: 0, Available: 5.0M, Use%: 0%, Mounted on: /run/lock[OHOS INFO] Filesystem: tmpfs, Size: 3.7G, Used: 0, Available: 3.7G, Use%: 0%, Mounted on: /sys/fs/cgroup[OHOS INFO] Filesystem: tmpfs, Size: 757M, Used: 0, Available: 757M, Use%: 0%, Mounted on: /run/user/0[OHOS INFO] Filesystem: overlay, Size: 99G, Used: 36G, Available: 59G, Use%: 38%, Mounted on: /var/lib/docker/overlay2/272189b968d8efeb63b7735f7814da21356df63d8b0a2ca37ae571389fc21ee3/merged
[OHOS INFO] nearlink_dk_3863 build success
[OHOS INFO] Cost Time: 0:01:10
制品存放路径
编译完成后,制品存放在以下路径:
out/nearlink_dk_3863/nearlink_dk_3863/ws63-liteos-app/
这个目录下的fwpkg文件就是用来烧录的。
root@near-link:~/near_link_sdk# ls out/nearlink_dk_3863/nearlink_dk_3863/ws63-liteos-app/
ws63-liteos-app_all.fwpkg ws63-liteos-app_load_only.fwpkg
nearlink_dk_3863_xts
设置编译产品
hb set -p nearlink_dk_3863
编译
hb build -f -b debug --gn-args build_xts=true
制品存放路径
编译完成后,制品存放在以下路径:
out/nearlink_dk_3863/nearlink_dk_3863_xts/ws63-liteos-xts/
build_xts=true 的解释
在构建过程中,build_xts=true 参数用于启用扩展测试套件(XTS)。该参数指示编译系统包含额外的测试模块、工具或调试信息。这对于需要更全面测试和验证的开发场景非常有用。
磁盘空间占用
编译完成之后,看了一下磁盘的占用情况,其中near_link_sdk大概20GB,openharmony_prebuilts大概4.1GB。
结语
除了上文提到的问题,总体来说,编译过程还算顺利。后面会尝试烧写和写点测试程序。
相关文章:
星闪WS63E开发板的OpenHarmony环境构建
目录 引言 关于SDK 安装步骤 1. 更新并安装基本依赖 2. 设置 Python 3.8 为默认版本 3. 安装 Python 依赖 4. 安装有冲突的包 5. 设置工作目录 6. 设置环境变量 7. 下载预构建文件以及安装编译工具 8. 编译工程 nearlink_dk_3863 设置编译产品 编译 制品存放路径…...
MongoDB数据建模小案例
MongoDB数据建模小案例 朋友圈评论内容管理 需求 社交类的APP需求,一般都会引入“朋友圈”功能,这个产品特性有一个非常重要的功能就是评论体系。 先整理下需求: 这个APP希望点赞和评论信息都要包含头像信息: 点赞列表,点赞用户的昵称,头像;评论列表,评论用户的昵称…...
MySQL(库的操作)
目录 1. 创建数据库 2. 删除数据库 3. 查看数据库 4. 修改数据库 5. 备份和恢复 6. 查看连接情况 1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] 1. 大写的是关键字 2. [ ]可带可不带 3. db_name 数据…...
【55 Pandas+Pyecharts | 实习僧网Python岗位招聘数据分析可视化】
文章目录 🏳️🌈 1. 导入模块🏳️🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 调整部分城市名称 🏳️🌈 3. Pyecharts数据可视化3.1 招聘数量前20岗位3.2 各城市招聘数量3…...
java中23种设计模式的优缺点
文兴一言 设计模式分为创建型模式、结构型模式和行为型模式。以下是每种设计模式及其优缺点的详细介绍: 一、创建型模式 简单工厂模式 优点:通过一个共同的工厂类来创建对象,将对象的创建逻辑封装在一个地方,客户端只需要与工厂…...
【JavaEE】多线程(7)
一、JUC的常见类 JUC→java.util.concurrent,放了和多线程相关的组件 1.1 Callable 接口 看以下从计算从1加到1000的代码: public class Demo {public static int sum;public static void main(String[] args) throws InterruptedException {Thread …...
如何高效的向AI大模型提问? - 提示工程Prompt Engineering
大模型的输入,决定了大模型的输出,所以一个符合要求的提问Prompt起到关键作用。 以下是关于提示工程Prompt Engineering主要方法的详细表格,包括每种方法的优点、缺点、应用场景以及具体示例: 主要方法优点缺点应用场景示例明确性…...
4K高清壁纸网站推荐
1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片,分为通用、动漫、人物三大类,可以按屏幕比例和分辨率检索,满足你对壁纸的各种…...
EasyExcel注解使用
上接《Springboot下导入导出excel》,本篇详细介绍 EasyExcel 注解使用。 1. ExcelProperty value:指定写入的列头,如果不指定则使用成员变量的名字作为列头;如果要设置复杂的头,可以为value指定多个值orderÿ…...
Visual Basic 6 关于应用的类库 - 开源研究系列文章
上次整理VB6的原来写的代码,然后遇到了关于应用窗体的显示问题。VB6不比C#,能够直接反射调用里面的方法,判断是否显示关于窗体然后显示。以前写过一个VB6插件的例子,不过那个源码不在,所以就找了度娘,能够象…...
C#泛型
泛型是一种非常强大的特性,它允许程序员编写灵活的代码,同时保持类型安全。泛型的核心思想是允许类或方法在定义时不指定具体的数据类型,而是在实际使用时指定。这意味着你可以创建一个可以与任何数据类型一起工作的类或方法 泛型类通过在类…...
go语言的成神之路-标准库篇-fmt标准库
目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v࿱…...
React Native的router解析
写在前面 React Native(简称RN)是一个由Facebook开发的开源框架,用于构建跨平台的移动应用程序。在RN中,路由(router)是非常重要的概念,它允许我们在不同的屏幕之间进行导航和切换。 以下是RN…...
Linux update-alternatives 命令详解
1、查看所有候选项 sudo update-alternatives --list (java筛选sudo update-alternatives --list java) 2、更换候选项 sudo update-alternatives --config java 3、自动选择优先级最高的作为默认项 sudo update-alterna…...
【踩坑】修复报错libcurl.so.4、LIBFFI_BASE_7.0、libssl.so.3
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ libcurl.so.4: sudo apt install curl -y LIBFFI_BASE_7.0: conda install libffi3.3 -y libssl.so.3: sudo apt install -y openssl li…...
python网络爬虫基础:html基础概念与遍历文档树
开始之前导入html段落,同时下载好本节将用到的库。下载方式为:pip install beautifulsoup4 一点碎碎念:为什么install后面的不是bs4也不是BeautifulSoup? html_doc """ <html><head><title>The…...
【已解决】MacOS上VMware Fusion虚拟机打不开的解决方法
在使用VMware Fusion时,不少用户可能会遇到虚拟机无法打开的问题。本文将为大家提供一个简单有效的解决方法,只需删除一个文件,即可轻松解决这一问题。 一、问题现象 在MacOS系统上,使用VMware Fusion运行虚拟机时,有…...
经典视觉神经网络1 CNN
一、概述 输入的图像都很大,使用全连接网络的话,计算的代价较高,图像也很难保留原本特征。 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...
一些硬件知识【2024/12/6】
MP6924A: 正点原子加热台拆解: PMOS 相比 NMOS 的缺点: 缺点描述迁移率低PMOS 中的空穴迁移率约为电子迁移率的 1/3 到 1/2,导致导通电流较低。开关速度慢由于迁移率较低,PMOS 的开关速度比 NMOS 慢,不适合高速数字电…...
网络安全法-网络安全支持与促进
第二章 网络安全支持与促进 第十五条 国家建立和完善网络安全标准体系。国务院标准化行政主管部门和国务院其他有关部门根据各自的职责,组织制定并适时修订有关网络安全管理以及网络产品、服务和运行安全的国家标准、行业标准。 国家支持企业、研究机构、高等学…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
