OpenHarmony编译
简介:本文将会介绍编译OpendHarmony环境的搭建、编译、和刷机(rk3568)
使用场景:修改系统源码,需要验证修改的功能是否正确、编译镜像、编译SDK
1、VS Code,下载链接,用于修改源码
2、linux环境搭建 用于编译源码
3、DevEco Studio,zh-cn/release-notes/Readme.md · OpenHarmony/docs - Gitee.com 用于验证修改的源码
4、hdc命令配置,环境变量 path里增加路径 sdk的toolchains目录路径。sdk位置参考第八点
一,linux环境搭建
安装linux系统:最好是ubuntu 20.04.6 没有的话,安装20.04.2,创建好用户及密码
系统安装好后,需要将源替换成阿里源
sudo vim /etc/apt/sources.list
按"Insert"键进入编辑模式,将里面的内容清空,把下面的内容复制进去:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
更新缓存和升级:
sudo apt-get update
二,安装MobaXterm_Personal_22.1、samba
在windows上安装MobaXterm_Personal_22.1,可在百度上搜索下载,也可飞书找我要
安装完成后,配置如下

以上截图是为了window保持与linux连接不被中断,如果在下载代码或者编译过程中中断,那么linux的工作也将被中断,所以windows要保持连接且不可待机 关机
建立连接 如图:

点击ok后输入 密码建立连接,连接成功后,左侧会出现一定的目录,但不是我截图的这样,会是原始目录
linux安装samba工具,以便从window的映射盘直接读取资源
参考连接 :
https://www.jb51.net/server/291322elw.htm

path路径就是windows映射的路径
samba安装好后,在windows上按 win+r键

运行后:在红框处右键 映射网络驱动器

三,利用MobaXterm_Personal_22.1工具 在linux安装git、git-lfs、repo工具,以供下载源码使用
1,安装git
sudo apt install git-all
配置git,并生成密钥,将公钥放在gittee上 请参考码云帮助中心
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
2,安装git-lfs,下载二进制大文件使用
sudo apt install curl
sudo apt install python3-pip
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install
3,安装repo: ~代表当前用户根目录
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
四,利用MobaXterm_Personal_22.1工具 在linux上准备编译环境,(头铁的可以不加下面这些依赖,如果编译失败,还是乖乖的加上吧)
linux安装依赖工具:
1.sudo apt install aptitude
2.sudo aptitude install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64-cross 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 device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils 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 libncurses5-dev libncursesw5 libstdc++6 vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
3.sudo apt install gcc-arm-none-eabi libtinfo-dev libtinfo5 genext2fs liblz4-tool libssl-dev openjdk-8-jre
4.sudo apt-get update
5.sudo apt install default-jdk
6.sudo apt install mtd-utils
7.sudo apt install scons
8.sudo apt install gcc-arm-none-eabi
9.sudo apt install gcc-arm-linux-gnueabi
10.sudo apt-get install libssl-dev
11.sudo apt-get install genext2fs
五,利用MobaXterm_Personal_22.1工具 在linux上下载源码
#在当前用户目录下新建一个代码仓目录,可以写当前日期如:0523,cd 0523 并执行以下命令初始化仓库
#可使用repo + ssh :repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify初始化
#也可使用repo + https:repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify初始化,推荐使用https,因为方便查看下载中断错误
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
#更新文件 -j28为使用28个线程同步代码,最大32,如果网速不好,最好去掉 -j28,
repo sync -c -j28
#更新lfs 文件
repo forall -c 'git-lfs pull'
#预编译
build/prebuilts_download.sh
#编译rk3568镜像
./build.sh --product-name rk3568 --ccache
#编译SDK
./build.sh --product-name ohos-sdk --gn-args full_mini_debug=false
六,下载源码可能会被中断,或者某个git仓库被意外中断
例如错误:
error: RPC 失败。curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.
error: RPC 失败。curl 56 GnuTLS recv error (-54): Error decoding the received TLS packet.
1.此类似错误可能是由于git缓存不够,或者网速不稳定,或者是网速不好同时开启线程多导致,如果是线程多引起,则去掉第五点中的 -j28,如果是缓存和网速引起,则使用以下命令:
sudo apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
git config --global http.postBuffer 5000000000 #设置5个G的缓存
2.如果执行上面还是下载中断,接着执行下面这句压缩代码传输,
git config --global core.compression 9 压缩代码传输
#git config --global --unset core.compression 命令可恢复默认设置
3.如果还中断:修改mtu值 ifconfig可以查看enp1s0的具体叫什么,每个电脑不一样
sudo chmod 777 /sys/class/net/enp1s0/mtu
sudo echo "9000" > /sys/class/net/enp1s0/mtu
查看mtu值
cat /sys/class/net/enp1s0/mtu
重启网卡enp1s0
sudo ip link set dev enp1s0 down
sudo ip link set dev enp1s0 up
4.如果还是中断,尝试更新curl
sudo apt update
sudo apt upgrade curl
5,如果还是下载中断,可能是由于白天使用网络的人数多,可以试试写个自动化定时脚本,让脚本在晚上下载代码并编译,源码代码量比较大,上百个G,编译过后更是达到几百个G,注意磁盘空间,网速会瞬间撑满宽带,注意别下载别的东西
七,vscode连接linux代码
1,安装插件 Remote SSH

此工具用于连接linux代码,具体参考以下网址:
https://blog.csdn.net/m0_60607289/article/details/138987450
最终配置文件如下:
Host 10.50.80.57
HostName 10.50.80.57
User xxxx(linux登录的名字)
Port 22
ForwardAgent yes
2 安装插件C++以便代码点击跳转,必须基于第一步成功的基础之上

八 ,linux编译后的产物路径,替换sdk可用上面的samba映射盘操作
1,rk3568镜像位置:
linux位置(以下out目录均指linux目录):out/rk3568/packages/phone/images/
2,sdk位置:
4个目录位置 ets 、js、previewer、 toolchains
out/sdk/ohos-sdk/windows/
1个native子目录位置 :native\sysroot\usr(本地windows sdk位置)
out/sdk/sdk-native/os-irrelevant/sysroot/usr/
当sdk编译好后,需要将DevEco的Openharmony SDK以上5个目录替换 ,注意 native不是全部替换,是native\sysroot\usr下的两个目录替换
DevEco的Openharmony SDK 查看位置 File->setting->Openharmony SDK
还可以直接5个目录全部替换
out/sdk/packages/ohos-sdk/windows/
九,开发板烧录镜像
1、下载安装烧写所需驱动与工具
从该链接下载烧写所需驱动和工具

驱动及工具在该路径下:docs-master\HiHope_DAYU200\烧写工具及指南\windows
安装USB驱动
双击windows\DriverAssitant\DriverInstall.exe安装USB驱动。
导入配置文件
双击\windows\RKDevTool.exe打开烧写工具,鼠标右键选择导入配置,从前面下载的日构建镜像目录中选择config.cfg导入

注意:首次导入时,对着空白处 右键清空所有配置,1、需将烧写工具里的路径正确配置成日构建镜像所在的路径;2、右键选择导入配置,替换原工具路径下的config.cfg文件。路径可以直接用映射盘的路径
2、烧写
开发板连接电源,USB线连接PC
切换到LOADER模式烧写
先按住板子上的Recovery键,然后按一下reset键,待工具界面显示LOADER设备后,松开Recovery键,设备进入loader模式,点击执行开始烧写,如图:

右边出现“下载完成字样”,即代表烧写完成,等待板子重启
相关文章:
OpenHarmony编译
简介:本文将会介绍编译OpendHarmony环境的搭建、编译、和刷机(rk3568) 使用场景:修改系统源码,需要验证修改的功能是否正确、编译镜像、编译SDK 1、VS Code,下载链接,用于修改源码 2、linux环…...
C语言典型例题30
《C程序设计教程(第四版)——谭浩强》 习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。 设d30000元,p6000元,r1%。对求得的月份取小数点后一位,对第二…...
springMVC @RestControllerAdvice注解使用方式
使用 RestControllerAdvice 的主要场景包括: 全局异常处理:处理所有控制器中抛出的未捕获异常。数据校验失败处理:处理 Bean Validation 校验失败的情况。自定义响应:统一定义响应格式或错误信息。 RestControllerAdvice 注解的…...
HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结
文章目录 1. 鸿蒙组件的基本概念2. 组件的使用3. 布局管理4. 组件间通信5. 组件化开发6. 性能优化7. 实战应用 鸿蒙应用开发岗位面试中关于鸿蒙组件的问题,通常会涉及多个关键知识点,这些知识点涵盖了鸿蒙组件的基本概念、使用、布局管理、性能优化、组件…...
Unity 在Editor下保存对Text组件的文本的修改
Unity 在Editor下保存对Text组件的文本的修改 /****************************************************文件:TimeStampForText.cs作者:lenovo邮箱: 日期:2024/8/8 1:9:21功能: *************************************************…...
mysql 日志爆满,删除日志文件,定时清理日志
今天发现网站不能正常访问,于是登陆服务器查找问题。 机智的我随手用命令:df -l 发现 硬盘爆满了,于是就知道问题所在了。 Filesystem 1K-blocks Used Available Use% Mounted on/dev/xvda1 20641404 16963004 16929876 10…...
MySQL学习(19):锁
1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,数据是供许多用户共享的资源,数据库必须保证数据并发访问的一致性、有效性,这就要靠锁来协调实现。 MySOL中的锁,分为以下三类: &am…...
【出海日记】关于 KD ,数据工具的陷阱
一个关键词:deepwoken builder 对标的竞品:deepwoken.co 初步分析: https://ahrefs.com/keyword-difficulty/?countryus 显示这个关键词优化难度极低 拿流量的是一个内页,单靠这个内页一个月有 22 万的流量 看起来很香&#x…...
【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本)
【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本) 一、相关名词介绍1.1 k8s简介1.2 Keepalived简介1.3 HAProxy简介二、本次实践介绍2.1 环境规划介绍2.2 本次实践简介三、所有节点基础环境配置3.1 主机配置工作3.2 关闭防火墙和seli…...
数据结构:链表经典算法OJ题
目录 前言 一、移除链表元素 二、反转链表 三、合并两个有序链表 四、链表的中间节点 五、环形链表的约瑟夫问题 前言 在了解了链表的相关知识后,我们还需要一些题目进行练习加深对链表这方面知识的理解,也可以用来检测链表这块学的的怎么样&#…...
【线性代数】【二】2.2 极大线性无关组与向量空间的基
文章目录 前言一、极大线性无关组二、向量空间的基三、向量维数与向量空间维数总结 前言 上一篇中我们介绍了向量空间的概念,并且学习了对任意给出的一组向量,如果构造一个向量空间。本文将更加细致的去分析张成一个向量空间,具有哪些性质。…...
OD C卷 - CPU算力分配
CPU算力分配 两组服务器A、B, 每组有多个算力不同的CPU;为了让两组服务器的算力和相等,允许两组各选出一个CPU进行一次交换;求两组中用于交换的CPU算力,从A中选出的算力尽可能小; 输入描述: 第一行 输入L…...
matlab实现红绿灯识别
在MATLAB中实现红绿灯识别通常涉及图像处理技术,包括颜色分割、形态学操作、边缘检测等步骤。下面我将给出一个基本的框架和示例代码,用于在MATLAB中识别图像中的红绿灯。 步骤 1: 读取图像 首先,你需要有一张包含红绿灯的图像。 img imr…...
base64 转 pdf
工作中经常会遇到一些签名的pdf传输,一般都是base64编码,这样就需要我们手动转为pdf, 其实根本不需要自己使用pdf的库写入,只是数据的简单写入就行 package mainimport ("encoding/base64""fmt""os&quo…...
vue2项目微信小程序的tabs切换效果
在 Vue 2 项目中实现类似微信小程序的 tabs 切换效果,可以通过 Vue 的 router-view 和 <router-link> 来完成。这里我们使用 Vue Router 来创建一个标签页切换的效果。 步骤 1: 安装 Vue Router 如果还没有安装 Vue Router,首先需要安装它&#…...
WPF动画的使用
前言 弹幕是什么?这里是使用动画将控件弹起来,通过C#提供的多样化动画类型,我们可以制做出丰富的界面效果。主要有基于时间的动画和基于属性的动画。 1、Animatable 一个提供动画支持的抽象类。 继承 Object DispatcherObject Depende…...
跑腿代购app系统源码开发及功能分析
随着互联网技术的飞速发展和人们生活节奏的加快,跑腿代购服务作为一种便捷的生活方式,正逐渐渗透到我们日常生活的方方面面。从日常购物、餐饮外卖到文件传递、药品代购,跑腿服务以其高效、灵活的特点赢得了广大用户的青睐。而支撑这一服务高…...
mysql数据库:字符串函数
mysql数据库:字符串函数 mysql数据库:字符串函数 concat(str1,str2,…strn) 连接str1,str2,…,strn为一个字符串 select concat(abc,def)replace(str,a,b) 用字符串b替换str中所有出现的字符串a insert(str,x,y,instr…...
C语言实现游戏2048(超详细!!!超易懂!!!)
2048是众所周知的一款经典游戏,在曾经没有智能电脑和手机的年代,也陪伴了我们许多年。那今天就让我们用C语言来回顾一下这款游戏吧~ 一、游戏2048的思路 2048游戏的玩法是在初始的时候,给玩家一个4*4格子的,其中内容全为空的棋盘…...
MATLAB代码检查工具PolySpace
概述 PolySpace是MATLAB里面代码静态检查工具。通过检查源代码,可以确定可能在哪里发生潜在的运行时错误,例如算术溢出,缓冲区溢出等等。它最大的特点是可以检查车企常用的MISRA C标准,还免费,就让各大车企爱不释手。…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
