wsl2平台鸿蒙全仓docker编译环境快速创建方法
文章目录
- 1 文章适用范围:
- 2 WSL环境安装
- 3 镜像迁移非C盘
- 4 Docker环境准备
- 4.1 docker用户组和用户创建
- 4.2 Docker环境配置
- 4.2.1 Ubuntu下安装docker工具
- 4.2.2 鸿蒙Docker环境安装
- 4.2.3 鸿蒙全仓代码拉取编译
- 5 鸿蒙全仓代码的更新策略
- 6 参考文献
- 7 FAQ
- 7.1 缺头文件xcrusor/xcursor.h
- 7.2 缺头文件Xinerama.h
1 文章适用范围:
- 鸿蒙全仓代码。 windows wsl2 utunbu20.04以上 x86_64平台。对于鸿蒙独立仓或分支版本比如4.1\5.0等的下载地址请自行查询,repo的版本地址不同,repo init不同。因此本文在更新repo init 内容后,也适用于其它版本。
- windows CPU。能正常开启WSL2。
- 16核,32G内存。wsl2内存16G,虚拟内存4G(建议8G)。低于该配置鸿蒙全仓编译都可能报莫名其妙错误。配置方法请参见第二小节第7步。
- 硬盘最少1T,建议2T。平时wsl子系统大约占硬盘空间510G(只有1套代码)。
- 编译在docker环境进行。非docker环境平时可能会出现莫名奇妙错误。docker容器中不建议执行apt-get update之类环境升级,避免依赖变化导致编译失败
2 WSL环境安装
- 打开设置->安全和更新->开发者选项,选择为“开发人员模式”;
- Win + R运行control appwiz.cpl指令,在启用或关闭Windows功能中勾选适用于Linux的Windows子系统和虚拟机平台两项启用,重启(注:没有虚拟机平台的,请升级Windows系统, Win10 版本号为 2004(内部版本19041或更高))
3. 以管理员身份打开PowerShell并运行:dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
开启Windows子系统功能;
4. 然后更新一下wsl: wsl --update
;
5. 打开Microsoft Store搜索Ubuntu,安装Ubuntu20.04:
6. 运行sudo dpkg-reconfigure dash, 选择No,将Ubuntu shell由dash修改为bash
7. 子系统ubuntu内存、虚拟内存要求
内存16G,虚拟内存4G。
修改wsl内存和缓存最快接方法:
- 退出ubuntu
- 修改下图文件内容(没有就创建)
- 重新打开ubuntu
提醒:windows重启生效。wsl的swap(虚拟内存)够用即可,多了,会造成windsow非常卡顿,影响工作(血泪教训)
8.安装wsl验证
安装WSL之后,查看一下版本。 wsl -l -v
- 如果版本是1, 执行:
wsl --set-version Ubuntu-20.04 2
3 镜像迁移非C盘
安装完Ubuntu之后,因为默认Ubuntu安装在C盘,需要把它迁移到D盘。
具体步骤:
- 导出: D盘创建一个目录WSL, 目录名自己可以取,
wsl --export Ubuntu-20.04 d:\WSL\Ubuntu20.04.tar
- 注销:
wsl --unregister Ubuntu-20.04
- 导入:
wsl --import Ubuntu-20.04 d:\WSL d:\WSL\Ubuntu20.04.tar --version 2
4 Docker环境准备
4.1 docker用户组和用户创建
普通用户可能会在使用docker命令时提示没有权限,需要把普通用户加入docker组才可以,命令如下:
sudo groupadd docker
# 创建docker用户组
sudo usermod -aG docker $USER
# 将当前用户加入docker用户组
4.2 Docker环境配置
4.2.1 Ubuntu下安装docker工具
sudo curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start
sudo service docker status
说明:无法直接下载安装脚本时,请点这里下载。
4.2.2 鸿蒙Docker环境安装
理论上支持在任意目录执行。但考虑到第二步情况,建议在home下新建目录执行。
- 下载鸿蒙编译环境的image
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
- 创建docker实例(名字为ohos)
docker run --name ohos -itd -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
注意:
- 执行“exit”后实例会自动结束。这里参数“-itd”中的d不能省略。
- 警告:严禁直接拷贝本指令在任意目录执行。该启动指令默认是把当前目录映射到容器中的/home/openharmony目录。建议安装在/home/openharmony,方便记忆。可以把$(pwd)替换为自定义目录。
- 启动实例
docker start ohos
- 进入实例
docker exec -it ohos bash
4.2.3 鸿蒙全仓代码拉取编译
- 进入docker编译环境的docker实例
方法上参考上面。
因为编译时可能要用到X11的头文件,这里docker环境中还需要执行下面的命令:
apt install libxcursor-dev libxrandr-dev libxinerama-dev
配置git用户信息:
git config --global user.email "XXX@YYY.com"
git config --global user.name "XXX"
- 参考下面的《鸿蒙Docker编译环境》下载代码和预编译相关工具
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
bash build/prebuilts_download.sh
./build.sh --product-name ohos-sdk
./build.sh --product-name rk3568 --ccache
- 参考下面的《鸿蒙Docker编译环境》编译sdk和其他部分的全量编译
./build.sh --product-name ohos-sdk # sdk编译
./build.sh --product-name rk3568 –ccache # 32位全编
./build.sh --product-name rk3568 --fast-rebuild # 32位快速编译
./build.sh --product-name Hi3516DV300 # Hi3516DV300编译
扩展编译命令:
- 单独快速编译arkui模块:
./build.sh --product-name rk3568 --build-target ace_engine --fast-rebuild
- 单独快速编译form_fwk模块:
./build.sh --product-name rk3568 --build-target form_fwk --fast-rebuild
- 单独快速编译ability_dmsfwk模块:
./build.sh --product-name rk3568 --build-target dmsfwk --fast-rebuild
- 单独快速编译资源仓库:
./build.sh --product-name rk3568 --build-target system_resources --fast-rebuild
- 单独快速编译doc仓库:`./build.sh --product-name rk3568 --build-target docs --fast-rebuild
其它编译
编译测试用例:
./build.sh --export-para PYCACHE_ENABLE:true --product-name rk3568 --ccache --build-target make_test
# 所有test./build.sh --product-name rk3568 --build-target ace_engine_test --fast-rebuild ace_engine
# 测试用例编译./build.sh --product-name rk3568 --build-target form_fwk_test
# form_fwk仓库tdd编译。编译顺序:先编sdk和rk3568,然后执行本命令。./build.sh --export-para PYCACHE_ENABLE:true --product-name rk3568 --ccache --build-target BundleMgrClientSystemTest
# 具体模块用例生成./build.sh product_name=rk3568 suite=acts system_size=standard target_subsystem=appexecfwk
# 编译xts用例
编译失败解决:
- 删除out,
rm -rf out
- 同步代码。 确保更新无失败。若某个仓库失败,则单独
repo xxxx
下载。注意网络繁忙问题,尽量选不拥堵时刻下载 - 更新工具链:
./build/prebuilts_download.sh
- 更新二进制:
repo forall -c "git lfs pull"
5 鸿蒙全仓代码的更新策略
在wsl2中,以下行为可能导致32位全编译失败:
- 直接在鸿蒙代码根目录下同步最新代码
- 删除out目录,再更新最新代码
- 单独仓库的代码更新请使用repo。不要直接使用git。单独仓是没有分支概念,git无法更新。码云的鸿蒙代码是用repo管理的。
说明: - 上述做法SDK编译一般是成功,但32位全编译大概率会失败。在排除了电脑配置、网络之后,不清楚原因。如果直接删除鸿蒙根目录下所有文件夹/文件,不包括隐藏文件夹/文件,则大概率会SDK、32位全编译成功。
- 更新最新代码的前三步(同步代码、拉取二进制、预编译),建议同步跟踪。SDK编译、32位全编,形成多个shell指令,在相对空闲时间段(比如晚上)执行。
6 参考文献
[文献1] OpenHarmony-标准设备系统代码操作梳理-CSDN博客
[文献2] 鸿蒙Docker编译环境
https://docs.openharmony.cn/pages/v3.1/zh-cn/device-dev/get-code/gettools-acquire.md/
[文献3] 蓝区开发环境指导
https://gitee.com/liuyuxiang-bear/git-operation/blob/master/%E8%93%9D%E5%8C%BA%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E6%8C%87%E5%AF%BC.md
[文献4] Openharmony代码编译缺少头文件问题,https://blog.csdn.net/weixin_32669219/article/details/131182393
7 FAQ
7.1 缺头文件xcrusor/xcursor.h
Openharmony代码编译缺少头文件问题,漏安装组件libxcursor-dev等第三方包
现象:
解决方法:
1) apt-get install libxcursor-dev
2) 其它遗漏请参考参考文献4处理
7.2 缺头文件Xinerama.h
Ubuntu-头文件缺失fatal error: ‘X11/extensions/Xinerama.h‘ file not found
现象:
解决方法:apt-get install libxinerama-dev
相关文章:

wsl2平台鸿蒙全仓docker编译环境快速创建方法
文章目录 1 文章适用范围:2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…...
商业秘密侵权
一、商业秘密侵权行为 (一)员工违规获取并使用企业后台用户行为数据构成商业秘密侵权 (二)离职员工将新单位“冒名顶替”为原单位构成对原单位商业秘密的侵犯 二、商业秘密侵权主体 (一)主体范围界定&a…...

高通安卓12-固件升级
下载步骤 第一步 格式化 「下载一次即可;能开机能下载的板子 忽略这一步,直接执行第二步即可」 QFIL工具配置为UFS类型,勾选Provision,如下图: Programmer选择prog_firehose_ddr.elf,Provision Xml选择prov…...

我的常见问题记录
1,maven在idea工具可以正常使用,在命令窗口执行出现问题 代码: E:\test-hello\simple-test>mvn clean compile [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for org.consola:simple-test:jar…...

Python 3.12 环境搭建(Windows版)
目录 1. 下载Python 3.12安装包2. 安装Python 3.123. 验证安装5. (可选)配置其他开发工具 在Windows系统中搭建Python 3.11环境,可以按照以下步骤进行,以确保过程清晰且详细: 1. 下载Python 3.12安装包 打开浏览器&a…...

植物大战僵尸杂交版如何手动修改金币钻石数
前言 最近在玩植物大战僵尸杂交版,非常好玩,但是刷钻石真的好慢!只能在排山倒海里眼巴巴等着黄金吞噬者产钻石qaq 但是好歹咱是学CS的,怎会被这点困难难住!挑战不用修改器手动修改配置文件! 原参考文章&…...

Salia PLCC cPH2 远程命令执行漏洞(CVE-2023-46359)
漏洞描述 Salia PLCC cPH2 v1.87.0 及更早版本中存在一个操作系统命令注入漏洞,该漏洞可能允许未经身份验证的远程攻击者通过传递给连接检查功能的特制参数在系统上执行任意命令。 产品界面 fofa语法 "Salia PLCC" POC GET /connectioncheck.php?ip1…...

路由表操作
路由表(Routing Table)是网络设备(如计算机、路由器、交换机等)用来确定数据包传输路径的数据库。每当网络设备收到一个数据包时,它会查找路由表,决定将数据包转发到哪个网络接口或网关。下面介绍路由表的基…...

羊大师:拒绝心灵内耗:走向高效与平和
在繁忙的生活中,我们时常感到疲惫不堪,仿佛心灵被无形的枷锁束缚,这就是精神内耗。它让我们在思考、决策和行动中犹豫不决,消耗着我们的精力和时间,让我们无法专注于真正重要的事情。然而,我们有能力打破这…...
IOS Swift 从入门到精通:Swift 简介,Swift中变量和常量,Swift中字符串,Swift中整数和浮点数
文章目录 为什么选择 Swift如何创建变量和常量如何创建变量和常量为什么 Swift 有常量和变量?如何创建字符串为什么 Swift 需要多行字符串?如何存储整数如何存储十进制数为什么选择 Swift 编程语言有很多,但我认为你会非常喜欢学习 Swift。这部分是出于实际原因——你可以在…...

聚焦AIoT最后一公里:EasyCVR+AI视频技术在各领域的创新应用
随着5G、AI、边缘计算、物联网(IoT)、云计算等技术的快速发展,万物互联已经从概念逐渐转变为现实,全新的行业生态AIoT正在开启新时代。巨大的市场潜力与AI等新兴技术不断融合形成的庞大市场缺口,深度场景化应用落地诉求…...
怎样利用 Groovy 的元编程特性来创建自定义的 DSL(领域特定语言)?
使用Groovy的元编程特性可以方便地创建自定义的领域特定语言(DSL)。下面是一些利用Groovy元编程特性创建DSL的步骤: 定义DSL的语法结构:首先,您需要确定DSL的语法结构,包括关键字、表达式和语句的格式等。可…...

自动预约申购 i茅台工具完善
自动预约申购茅台工具 概述新的改变界面预览 概述 今天刷到一个windows自动刷茅台的工具,是用wpf实现的,看到作者最后是2023年更新的,评论中有好多人提出一些需求,刚才在学习wpf,就试着完善了一下。 工具下载&#x…...

Jitter Injection详解
一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通…...

基于SSM+Jsp的校园餐厅管理
开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...

无线麦克风哪个品牌音质最好,一文告诉你无线领夹麦克风怎么挑选
随着直播带货和个人视频日志(Vlog)文化的兴起,以及自媒体内容创作的蓬勃发展,我们见证了麦克风行业的迅猛发展。在这一浪潮中,无线领夹麦克风以其无与伦比的便携性和操作效率,迅速赢得了广大视频制作者的喜…...

Docker配置国内镜像加速-2
Docker 官方镜像仓库(如 Docker Hub)可能由于网络原因,在某些地区或网络环境下下载速度较慢。使用镜像加速可以从距离用户更近、网络条件更好的镜像服务器获取镜像,从而显著提高下载速度,节省时间。 1.测试是否安装 d…...

前后端分离项目面试总结
一:是否登录状态 服务端登录的时候,给分配一个session用于存储数据,同时将sessionID返回给浏览器,浏览器通过cookie把sessionID存储起来,下次访问时携带上,服务端就可以通过sessionID来确定用户是否登录。 …...
力扣刷题笔记
记录5-6月力扣刷题,持续刷题中~ 2024.05 15.三数之和 双指针或者哈希表,注意去重的操作要考虑仔细 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result;sort…...

【JS逆向百例】某点数据逆向分析,多方法详解
前言 最近收到粉丝的私信,其在逆向某个站点时遇到了些问题,在查阅资料未果后,来询问K哥,K哥一向会尽力满足粉丝的需求。网上大多数分析该站点的教程已经不再适用,本文K哥将提供 3 种解决方案,对于 webpack…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...
MyBatis-Plus 常用条件构造方法
1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...