星闪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.fwpkgnearlink_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 慢,不适合高速数字电…...
网络安全法-网络安全支持与促进
第二章 网络安全支持与促进 第十五条 国家建立和完善网络安全标准体系。国务院标准化行政主管部门和国务院其他有关部门根据各自的职责,组织制定并适时修订有关网络安全管理以及网络产品、服务和运行安全的国家标准、行业标准。 国家支持企业、研究机构、高等学…...
 
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
 
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
 
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
 
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
 
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
 
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
 
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器:  线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。  每个线程都有一个程序计数…...
