通晓开发环境配置笔记

开发环境基本配置

学习记录,也方便后人。

爱来自Brakeintime


看完这篇教程后,你将得到:

  • WSL2安装方法
  • Docker基本用法
  • 鸿蒙构建器的cli使用
  • 可以进行编译的OpenHarmonyOS开发环境
  • 固件的烧录方法

我们使用软通的通晓开发板,其他开发板的开发环境可能略有差异

.

目前文字内容完善,但缺少配图,以及部分错误分析与解决方法

官方方法:

"华为官方文档"

简而言之:使用容器集成所有工具链,而开发库代码从git分发

容器内部是一个较为简易的linux版本(可能是基于ubuntu)。
为了在windows上使用docker container,需要wsl2环境。
或者你也可以选择在linux虚拟机内装docker/podman

在执行一切之前,推荐下载一个Windows Terminal
这是我认为Windows下面最舒服的终端仿真器,尤其自带Cascadia Code字体

虽然远程连接相比XShell等没有那么集成化,但是简洁高效,自定义能力也比较强。

0. 配置开发环境的运行环境

推荐使用docker来配置,后面连接会很方便,如果大型开发做项目迁移也很方便。

由于新版docker推荐使用wsl2作为后端,这里先安装wsl2

如果你的Windows版本低于Windows10 1903(内部版本为 18362.1049 或更高版本),请使用虚拟机自行配置开发环境

wsl2配置和docker安装

0x00 首先先开启必须的功能

# 先执行这条指令 这会暴露出隐藏的功能:虚拟机平台(如果你不是专业版系统的话)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

任务栏搜索:“启用或关闭windows功能”,或者搜索 “功能”
- Hyper-V
- Windows虚拟机监控平台
- 虚拟机平台
- 适用于Linux的Windows子系统

**想知道更多点开我:**

实际上,从Windows10开始,微软引入了一种新的操作系统运行方式,

原本Windows是直接跑在物理机上的,“底层直接和硬件相连”。

微软拿下了Hyper-V的技术后,起先是作为虚机解决方案的,

后来为资源引入了虚拟化技术,通过虚机将系统和资源分开。(这解决很多安全问题)
让Windows运行在虚机上,这保证关键内容可以隔离,并且允许Windows沙盒等存在。

WSL1起初并没有很好的应用这一点,它使用传统的兼容层解决方案。允许Linux二进制文件直接在Windows上运行,
但这会造成严重的性能问题,以及兼容性问题。(冷知识:Linux下有一个类似的存在叫做Wine,由于会造成依赖混乱,风评喜忧参半)

WSL2开始,微软选择让WSL和虚机上的Windows成为“等价”的存在,将资源通过Hyper-V虚拟化之后,同时提供给windows内核和Linux内核
不仅确保了安全性,而且因为不是完整的虚拟环境,性能损耗小

此外,这也允许我们的wsl能够“直接”访问设备。比如在Linux中直接访问显卡,USB设备等,甚至是Windows上的文件系统。

当然,这些都是docker团队和镜像制作者考虑的内容,我们安装wsl2只是为了能用docker。

0x01 安装WSL2

安装WSL2更新包

# 设定wsl的默认版本为2 否则装wsl1的话没用
wsl --set-default-version 2
# 你可以自行选择安装的发行版,推荐使用Windows Store搜索和配置
# 个人推荐:Ubuntu20.04,Debian

#   Ubuntu20.04:  https://www.microsoft.com/store/apps/9n6svws3rx71
#       (或者获取本地安装包:https://aka.ms/wslubuntu2004)

#   Debian:       https://www.microsoft.com/store/apps/9MSVKQC78PK6
#       (或者获取本地安装包:https://aka.ms/wsl-debian-gnulinux)

# 或者你也可以选择导入其他人打包好的tar
# 这允许你安装Rocky Linux,Mint Linux,KDE Plasma这类非官方发行版
# (是的我是debian系爱好者)
# 
# 



# 如果只想命令行操作,运行这个命令以安装wsl,默认安装Ubuntu(默认发行版对我们并没有影响)
wsl --install

安装好之后,如果你通过ms store安装,它会自动要求你配置:

(下面内容不要复制粘贴,仅作说明)

Enter new UNIX username:    #这里让你设定用户名
New password:               #这里要求你设定密码,注意设定时不显示你输入内容,
                            #所以想好再输,没有需求推荐写个简单的
Retype new password:        #重复一遍刚才的密码,同样不会显示任何内容
# 稍等一会就会结束
cat /etc/os-release
# 看看你的wsl版本

0x02 安装docker
Docker中文代理站
Docker-Desktop安装

下载docker-desktop后,安装即可,




接下来进入正式教程:

在开始前,为了防止疑惑:

docker必吃榜第一名:


在docker中,所有的对象都会被分配一个唯一标识符,或者也称作id,

镜像有镜像id,容器有容器id


除此之外,也可以使用tag/name来称呼一个镜像/容器


镜像的tag由构建者决定,你可以通过重新发布镜像来更改tag

容器的name由实例化时决定,默认会随机生成,但允许手动指定,这里我们让他随机生成

接下来:

1. 拉取镜像

#由华为官方分发的原始开发环境镜像(不知道有没有新版本)
# 拉取镜像
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

2. 改名镜像(可选 只是为了方便后续操作)

#docker 镜像操作 更改tag [原tag/镜像id] [新tag]
docker image tag swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 openharmony-docker:1.0.0
#docker 删除镜像 [删除的镜像名]
docker rmi swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

3. 将镜像实例化为容器

#docker 启动容器 [-i:打开标准输入] [-t:分配终端]
#               [-p:端口映射] [本机端口:容器端口] 
#               [镜像名/镜像id] [容器内执行的命令]  
docker run -i -t -p 11451:22 openharmony-docker:1.0.0 /bin/bash
# PS: 可以将[-i] [-t] [-p] 连写成[-itp],(如果你的解释器支持)

#另一种启动方式:docker run -d -p 11451:22 openharmony-docker:1.0.0

# 参数说明:
#   -i: 十分重要,如果不打开标准输入,你无法与容器交互
#   -t: 十分重要,如果不分配伪终端,容器不能正常处理你的输入
#   -p: 可选,    加了可以方便以后ssh连接,对于纯本机开发可以不加
#       注意:这个指令需要你多输入一个参数:[本机端口:容器端口]
#   -d: 可选,   代表后台运行容器,输出的是这个活容器的id,我个人推荐,后面使用exec手动进入终端,或者直接使用vsc插件。
#   [容器内执行的命令]: 习惯上写你想要容器内启动的解释器,但对于这个容器来说写不写都行(默认执行bash)

3++. 进入容器(如果没进的话)

默认情况下,按照前面所写的命令输入,你的终端应该会自动接入容器内的bash

在用vscode连接前,先确保容器启动了

但是也有可能,你的终端没有直接接入容器内的bash:

你可以这么做

如果容器运行正常(比如是后台启动):

#如果你使用后台启动,run后会返回活容器的id,请记住这个id
#或者
docker ps

此时你应该能看见活容器的列表,这里我给一个示例

#CONTAINER ID   IMAGE                      COMMAND       CREATED       STATUS       PORTS                   NAMES
#114514191981   openharmony-docker:1.0.0   "/bin/bash"   #2 hours ago   Up 2 hours   0.0.0.0:12345->22/tcp   container_name

#依次是:
#容器id(节选) 镜像tag 命令 创建时间 状态 端口映射 容器名
#考虑到容器id不全,我们复制这里的容器名,我这里是container_name,看看你的
#然后执行
docker exec -i -t container_name /bin/bash

这时你应该能看见终端界面,他大概长这样:

root@114514191981:/home/openharmony/ #

这代表你现在是:root用户,主机名为镜像id,位于家目录下的openharmony,拥有root用户的权限



如果想要回到本地终端:

exit
#然后就会退出
#本地终端的提示符就会出现

4. 下载开发库

#使用git下载gitee上的通晓开发库
git clone https://gitee.com/isoh_edu/txsmartropenharmony.git

#不要开代理软件,稍等一会,就下好了
#建议网好点,否则可能下到假货(无法正常工作)

下载位置取决于你执行git的工作目录,默认应该进入是/home/openharmony/,我这里也假设他是。
如果不是的话,除了路径和我不一样,区别不会很大。

此外注意一件事,如果你使用wsl,可以尝试把库clone到windows文件系统下面,后面一些操作会方便一些。

(烧录软件是windows的,而且应该已经预设好了路径,这样做后面就不需要下载固件和修改路径了)

然后wsl默认会把windows文件系统挂载到/mnt/盘符, 你可以依照这个路径去找

5. 降级pip

进入到clone下来的目录下面
我这里是/home/openharmony/txsmartropenharmony

cd /home/openharmony/txsmartropenharmony
pip3 install build/lite
#据软通的资料说将OHOS构建工具降级到0.4.3, 'hb -v'可看

6. 尝试构建默认固件

进入到clone下来的目录

cd /home/openharmony/txsmartropenharmony
#然后需要指定一下目标平台,这里set完会追问配置的父目录
hb set
/home/openharmony/txsmartropenharmony
#他找的是vendor文件夹的父目录,因为就在当前目录下,所以填'.'也可

#或者也可以直接指定:hb set -root /home/openharmony/txsmartropenharmony

#如果不小心目录填错了,然后正确目录下执行'hb set'也只会报错的情况下,用上面的-root参数可以指定正确目录

hb build
#开始构建固件,固件会被生成到./out/rk2206/isoftstone-rk2206/image

然后就能在/home/openharmony/txsmartropenharmony/out/rk2206/isoftstone-rk2206/images下找到三个文件:

  • rk2206_db_loader.bin
  • Firmware.img
  • Firmware.md5

目前还没有配置ssh或者vscode,你可以打开docker desktop,点击容器列表中开发环境所在容器,点击Files,找到/home/openharmony/txsmartropenharmony/out/rk2206/isoftstone-rk2206/images这个文件夹,右键,选择save,然后找到本地位置即可。

其他不用scp或者vsc的备用方案:

  • 实例化容器的时候挂载一个物理机目录上去,在容器内复制粘贴到目录内:使用docker run -v [path] 选项
  • 在物理机中命令行使用docker cp container_name:/home/openharmony/txsmartropenharmony/out/rk2206/isoftstone-rk2206/images C:/Desktop/

第一个rk2206_db_loader.bin应该是类似bootloader之类的存在

Firmware.img是包含实际程序的OpenHarmonyOS固件

显而易见的,Firmware.md5是用来验证Firmware.img完整性的md5校验码

7. 烧录!


注意!烧录需要让开发板物理连接到目标计算机上

强烈建议配备"usb隔离器"或者其他防范措施

否则错误的 电气连接/操作 会(甚至同时)导致以下情况

  • 开发板外设损坏/外围电路烧毁
  • 开发板soc烧毁
  • usb接口电路故障
  • usb控制器烧毁
  • 主板烧毁
  • CPU烧毁

并造成不可挽回的财产损失

虽然很无情,但此类问题造成损失,我概不负责 (本来也不应该我负责)

哦对了,在故障的usb接口上不要使用任何存储设备,供电问题可能会导致存储设备工作异常,让本就不富裕的家庭雪上加霜()


你可能会觉得别扭:

OHOS的烧录环境是windows(烧录软件工作在windows下),而开发环境则是在container(linux)中,

实际上,在大型项目开发中,这种事情很常见

后面我们会提到这么做的好处(比如ssh),以及可能的场景,这里我不赘述太多。


现在,

找到txsmartropenharmony/device/rockchip/tools/windows

其下的所有文件拷贝到一台windows主机上(如果你使用wsl或者虚机,那也可以拷贝到你的物理机上)

在你的windows主机上:

以管理员执行DriverAssitant/DriverInstall.exe

(如果你有装过老驱动,请"卸载驱动"防止出错)点击"安装驱动",然后弹窗选择"安装"

接下来打开RKDevTool.exe

(这个工具官方提供版本较低,如果你想的话可以自己找下新版,很好找)

如果一切正常,他不会有任何报错,进去可以看见两条菜单项,然后分别点开...,分别找到rk2206_db_loader.binFirmware.img
(请看他给出的默认值来找对应的文件)

然后拿出你的开发板,连接otg口(即没有标注ttl或uart的usb口)和主机,进入烧录模式。(通晓请按住maskrom键后按下reset键,然后全部松开)

软件此时应该提示“发现一个MASKROM”设备。

点击"执行"

正常情况下固件即被烧录。

通晓的官方代码仓中默认加载iot智能家居案例
烧录后应该能看见lcd的内容

posted @ 2025-04-26 14:16  Brakeintime  阅读(260)  评论(2)    收藏  举报