星闪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 慢,不适合高速数字电…...
网络安全法-网络安全支持与促进
第二章 网络安全支持与促进 第十五条 国家建立和完善网络安全标准体系。国务院标准化行政主管部门和国务院其他有关部门根据各自的职责,组织制定并适时修订有关网络安全管理以及网络产品、服务和运行安全的国家标准、行业标准。 国家支持企业、研究机构、高等学…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...