星闪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】如何在Docker中配置防火墙规则?
Docker本身并不直接管理防火墙规则;它依赖于主机系统的防火墙设置。不过,Docker在启动容器时会自动配置一些iptables规则来管理容器网络流量。如果你需要更细粒度地控制进出容器的流量,你需要在主机系统上配置防火墙规则。以下是如何在Linux主…...

Cesium 问题: 添加billboard后移动或缩放地球,标记点位置会左右偏移
文章目录 问题分析原先的:添加属性——解决漂移移动问题产生新的问题:所选的经纬度坐标和应放置的位置有偏差解决坐标位置偏差的问题完整代码问题 添加 billboard 后, 分析 原先的: // 图标加载 function addStation ({lon, lat, el, testName...

使用Python3 连接操作 OceanBase数据库
注:使用Python3 连接 OceanBase数据库,可通过安装 PyMySQL驱动包来实现。 本次测试是在一台安装部署OBD的OceanBase 测试linux服务器上,通过python来远程操作OceanBase数据库。 一、Linux服务器通过Python3连接OceanBase数据库 1.1 安装pyth…...

SpringBoot该怎么使用Neo4j - 优化篇
文章目录 前言实体工具使用 前言 上一篇中,我们的Cypher都用的是字符串,字符串拼接简单,但存在写错的风险,对于一些比较懒的开发者,甚至觉得之间写字符串还更自在快速,也确实,但如果在后期需要…...

Flutter如何调用java接口如何导入java包
文章目录 1. Flutter 能直接调用 Java 的接口吗?如何调用 Java 接口? 2. Flutter 能导入 Java 的包吗?步骤: 总结 在 Flutter 中,虽然 Dart 是主要的开发语言,但你可以通过**平台通道(Platform …...

Redis 数据结构(一)—字符串、哈希表、列表
Redis(版本7.0)的数据结构主要包括字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)、超日志(…...

day1:ansible
ansible-doc <module_name>(如果没有网,那这个超级有用) 这个很有用,用来查单个模块的文档。 ansible-doc -l 列出所有模块 ansible-doc -s <module_name> 查看更详细的模块文档。 ansible-doc --help 使用 --help …...

如何设置Java爬虫的异常处理?
在Java爬虫中设置异常处理是非常重要的,因为网络请求可能会遇到各种问题,如连接超时、服务器错误、网络中断等。通过合理的异常处理,可以确保爬虫的稳定性和健壮性。以下是如何在Java爬虫中设置异常处理的步骤和最佳实践: 1. 使用…...

阿里云盘permission denied
问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤: 检查文件权限 运行以下命令检查文件的权限: ls -l aliyunpan输出中会看到类似以下内容: -rw-r--r-- 1 user group 123…...

在 Ubuntu 24 上安装 Redis 7.0.15 并配置允许所有 IP 访问
前提条件 一台运行 Ubuntu 24 的服务器拥有 sudo 权限的用户 步骤一:更新系统包 首先,确保系统包是最新的,以避免潜在的依赖问题。 sudo apt update sudo apt upgrade -y步骤二:安装编译 Redis 所需的依赖 Redis 需要一些编译…...