草庐IT

OpenHarmony-标准设备系统代码操作梳理

@_南先森 2023-12-10 原文

本文主要介绍windows环境下标准设备系统代码(以RK3568设备为例)全流程操作梳理,供参考,含代码下载、版本编译、烧写、测试套编译、执行等操作梳理(注:除过烧写和用例执行,其他代码下载编译等都是在Ubuntu环境下操作,建议个人用户家目录下存放个人数据:工具安装、代码下载等),代码上库和hdc的相关命令操作等参考本人另一篇OpenHarmony-代码操作总结相关部分。


OpenHarmony开发资料归档

OpenHarmony Gitee地址


目录

一、板子组装

二、WSL2安装

 三、获取源码

注册码云gitee账号

注册码云SSH公钥

安装git客户端和git-lfs并配置用户信息

安装repo工具

下载主干master分支源码

 四、编译

编译环境准备

版本编译

daily构建版本或转测版本获取

五、烧写

正常烧写

变砖拯救

六、Hdc工具连接设备

七、 测试套编译和执行

测试套编译

用例执行

1.手动执行

2.xdevice自动执行

八、串口调试

九.代码上库

上库流程

提交PR关联issue

分支挑单 

Web网页端修改提交

格式化检查 


写在前面可参考

PS:使用wsl2作为Windows下Ubuntu环境时提升代码编译等效率的几个点

1.安装完wsl后,检查wsl的版本,确保是版本2(cmd执行wsl -l -v查看,如果不是,可通过wsl.exe -set-version Ubuntu-20.04 2转换成版本2)

2.wsl2安装完成后,切换软件源为国内软件源,可参考(亲测好用)Ubuntu20.04换阿里源(解决安装build-essential失败问题)_AnChenliang_1002的博客-CSDN博客

3.默认是安装在系统盘的,可安装完后迁移到非系统盘

4.OpenHarmony代码相关操作建议在wsl2个人用户家目录下操作

大致流程: 

一、板子组装

板子组装按照方便,使用安全组装即可,注意屏幕和摄像头的排线插的顺序,插反可能会导致屏幕不亮、摄像头不能用等情况。

二、WSL2安装

InsStep:

1.打开设置->安全和更新->开发者选项,选择为“开发人员模式”;

2.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.打开Microsoft Store搜索Ubuntu,安装Ubuntu20.04

5.安装完直接打开,设置用户名和密码以及root用户密码:

6.将Ubuntu Shell环境修改为bash

执行sudo dpkg-reconfigure dash,选择No,将Ubuntu shell由dash修改为bash

 如图,执行ls -l /bin/sh查看:

 PS: root和个人用户密码忘记,修改可参考win10子系统 WSL如果root和其他用户的密码都忘记的修复方法 - Halo3224 - 博客园

7.python3环境

Ubuntu20已自带python3.8.5,执行sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150切换python3:

​​

安装pip3

$ sudo apt-get -y update

$ sudo apt-get install python3-pip

8.安装完成,用户账号设置好之后,打开命令行窗口执行wsl -l -v查看下wsl的版本(注:cmd,wsl找不到的请更新windows版本),确保是wsl2,如果是版本1,可执行wsl.exe --set-version Ubuntu-20.04 2命令升级为版本2,执行后等待转换完成即可!!注意一定要是WSL2,如果是版本1,编译速度会慢几十倍!

 PS:执行wsl.exe --set-version Ubuntu-20.04 2出现内核组件问题,先下载安装
wsl_update_x64.msi后,在执行切换命令,即可开始转换,等待转换完成即可。

9.wsl2迁移参考OpenHarmony代码操作总结wsl迁移部分

10.wsl2安装完成后,切换软件源为国内软件源:

s1:备份原来的源:cp -ra /etc/apt/sources.list /etc/apt/sources.list.bak

s2: 将源换成阿里源:sudo vim /etc/apt/sources.list,将里面的内容清空,把下面的内容复制进去,保存退出

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
s3: 更新缓存和升级:

sudo apt-get update

sudo apt-get upgrade

PS:按上述步骤切换软件源后可解决一Ubuntu20.04一些依赖工具安装失败的问题

11.WSL映射到本地

如图:

本地方便查看

PS:更多请参考WSL文档介绍:什么是适用于 Linux 的 Windows 子系统 | Microsoft Docs

 三、获取源码

代码初次下载需要做一些前期准备工作:主要有码云gitee账号注册、添加码云SSH公钥、安装git和git-lfs、配置用户信息、repo工具安装

注册码云gitee账号

电话号码注册即可,并添加工作邮箱为主邮箱,如图:

注册码云SSH公钥

 参考码云 生成/添加SSH公钥

如图:

如图,检测公钥是否添加成功: 

安装git客户端git-lfs并配置用户信息

安装git客户端

执行:

sudo apt install git-all

安装git-lfs

依次执行以下命令:

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

sudo apt-get install git-lfs

git lfs install

配置用户信息

git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store

安装repo工具

安装码云repo工具,由于权限可切换到root用户下安装,安装后再切换个人用户目录操作既可:

执行:

 curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo

chmod a+x /usr/local/bin/repo

 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

下载主干master分支源码

repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

ps:git lfs

rk3568对应仓库

device/hihope/rk3568

 四、编译

代码下载后初次编译需要做一些前期准备工作:主要有依赖工具安装、预编译

编译环境准备

S1:安装依赖工具

sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev genext2fs liblz4-tool libssl-dev libtinfo5 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby default-jdk u-boot-tools mtools mtd-utils scons gcc-arm-none-eabi gcc-arm-linux-gnueabi

S2:执行prebuilts,在源码根目录下执行,安装编译器及二进制工具

bash build/prebuilts_download.sh

版本编译

进入源码根目录,执行: 

64位:

./build.sh --product-name rk3568 --target-cpu arm64 --ccache

32位:

./build.sh --product-name rk3568  --ccache

编译结果

编译完成后,log显示如下:

镜像路径:\out\rk3568\packages\phone\images\

daily构建版本或转测版本获取

daily构建版本

http://ci.openharmony.cn/dailys/dailybuilds

PS:hdc工具除过自己本地编译,也可以从流水线构建本下载:

转测版本

Release-Testing-Version.md · OpenHarmony-SIG/oh-inner-release-management - Gitee.com

五、烧写

烧写所需驱动和工具获取

usb驱动安装

双击windows\DriverAssitant\DriverInstall.exe安装usb驱动

正常烧写

烧写

双击\windows\RKDevTool.exe打开烧写工具,工具界面击烧写步骤如图所示:

MASKROM模式和LOADER模式两种模式下可供烧写,推荐LOADER模式烧写,非必要不使用MASKROM按键操作烧写。

LOADER模式烧写:板子上电状态,PC usb线连接板子,先按住板子上的Recovery键,然后按一下reset键,待工具界面显示LOADER设备后,松开Recovery键,设备进入loader模式,点击执行开始烧写,如图:

S1:5月9日主干分支上午11点之后的版本烧写分区有更新,工具需要导入镜像包中的config.cfg文件,(记得替换原工具路径下的config.cfg文件):

下面其他烧写模式操作一样!!!

S2: 烧写

MASKROM模式烧写: 设备断开电源状态,PC usb线连接设备,先按住板子上的MASKROM按键,设备上电,待工具界面显示MASKROM设备后,松开MASKROM键,系统进入MASKROM模式,点击执行开始烧写,具体步骤截图与上图一样(注:MASKROM模式烧写,需勾选Loader下载项)。

变砖拯救

烧写时由于烧写不当,比如uboot文件烧错等,导致烧写工具MASKROM和Loader模式都发现不了设备,设备无法启动的情况下,可按照如下操作进行烧写:

Windows下,设备连接电源状态,PC连接设备(通过USB),同时按住reset 键maskrom 按键,然后先松开reset键,待工具界面显示MASKROM设备后,再松开MASKROM键,设备进入MASKROM模式,勾选Loader,MASKROM模式下点击执行开始烧写即可。

如图:沟通Loader下载项,MASKROM模式开始烧写:

注:烧写分区请按LOADER模式烧写重新导入配置,其他不变

PS:MaskRom 模式是设备变砖的最后一条防线。强行进入 MaskRom 涉及硬件操作,有一定风险,因此仅在设备进入不了 Loader 模式的情况下,方可尝试 MaskRom 模式。进入 MaskRom 的原理是人为的把 EMMC 的数据脚与地线短接,系统会认为 EMMC 数据出错,从而清除 EMMC 数据。

参考MaskRom模式 — Firefly Wiki

六、Hdc工具连接设备

hdc的版本和设备版本保持一致,可自己编译最新hdc工具:源码根目录执行./build.sh --product-name ohos-sdk --ccache,直接copy到本地路径(可将hdc_std.exe改为hdc.exe方便点)加入环境变量,如图:

七、 测试套编译和执行

更多可参考OpenHarmony测试子系统,自测试框架介绍

测试套编译

到/test/xts/acts目录下执行./build.sh product_name=rk3568 system_size=standard target_subsystem=××××可编译单个子系统测试套

编译结果查看:/out/rk3568/suites/acts/

用例执行


编译生成的可执行文件(C++用例等)和hap包(js用例等)在testcases目录下,用例执行可以将可执行文件或hap包通过hdc send到设备制定目录,通过./***或aa start的方式执行,也可以连接设备后,将编译生成的acts文件夹coay到Windows本地,cmd命令行进入acts目录,运行run.bat,然后执行run acts的方式开始执行用例,用例执行的报告和log会在acts目录下生成。

PS:运行run.bat依赖于编译生成的tools文件夹下的工具,tools文件夹如果为空,请检查编译工具是否安装全。

举个例子

1.手动执行

以本地手动执行js测试用例为例,ps:安装到设备上的应用信息,可通过bm dump -命令查看,比如应用包名,应用Mainability等,C++用例直接将可执行文件send到设备指定目录,chmod权限后,./***执行即可。

如图:

S1:子系统测试套编译

 S2:hap安装

S3:启动应用执行测试用例,并将hilog日志保存到本地方便产看

日志查看:

2.xdevice自动执行

环境准备:

1>.hdc端口映射

hdc_std kill

hdc_std -m -s 0.0.0.0:8710

2>.用例执行前设备上先执行日志清理和关闭日志限流操作,在开始执行用例

hilog -r

hilog -G 1G

hilog -Q pidoff

本地环境需求:python(最好python3.7)、安装pthon依赖包setuptools,最新版本的hdc_std,并将hdc_std.ext的路径加入到环境变量path中;

 1>.将测试套编译生生成\out\rk3568\suites\目录下的acts文件夹copy到本地任意目录方便执行

2>.cmd进入acts所在目录运行acts目录下的run.bat脚本:

ps:可执行list查看本地设备是否连接成功:

3>.执行run acts即可自动化开始全量执行acts目录下所有的用例并完成执行报告解析以及日志收集等:

ps:按模块执行(具体模块可以查看\acts\testcases):run –l ActsResourcescheduleReminderAgentTest

用例执行报告查看:

日志查看:

 PS:

编译完成后,\out\rk3568\suites\acts\tools\目录为空的,导致用例无法自动化执行的可参考OpenHarmony-常见问题解决(持续更新...)_@_南先森的博客-CSDN博客_openharmony 编译 XTS测试套编译完tools文件为空解决部分

PS:rk3568开发板的测试套执行和hdc操作和L2-3516是一样的,可参考OpenHarmony-L2操作总结 

PS:代码上库,issue创建等参考OpenHarmony代码操作总结代码上库部分

八、串口调试

S1.用串口线连接 PC 与开发板,在设备管理器查看端口

 S2.使用IPOP工具或者其他串口工具(有些串口工具可能不支持,连接上打印乱码,目前试过的IPOP和securtCRT 是OK的,XShell不行)通过串口连接设备,串口波特率配置为 1500000,如图:

 S3.确定连接

连接后就可以进行debug调试,查看串口打印等操作 

九.代码上库

上库流程

以xts_acts仓上库为例:

1.登录码云fork代码xts_acts仓

2.  “DCO协议”(开发者原创声明协议)签署

 注:邮箱为提交邮箱或主邮箱

 

 3.创建本地分支:repo start branch_name --all

4.查看修改:git status

5.git add .

6.git commit -sm "xxxxxx"  //xxxxx为提交信息描述

7.执行git lfs fetch --all 

8.git push 

执行git push https://gitee.com/nan-xiansen/xts_acts upup:refs/heads/startup0625

其中,nan-xiansen是自己的码云用户名,xts_acts是fork的代码仓,upup是Ubuntu本地repo建的分支,startup0625是本地提交分支命令,随意命令,不创建默认是maser分支(这是给码云远端个人仓本次提交所创建的分支)。

说明:第一次push,需要输入username和password,用户名输入码云用户名,密码是码云登录密码;输入后回车,重新执行git push操作即可。

9.新建Pull Request将远端个人仓库同步到主干仓:

注意:这儿是从远端fork的个人仓中同步(下图左边源分支这儿是个人码云用户名,而不是OpenHarmony),不知道的按如下操作:个人账户中点击个人主页——选择xts_acts——Pull Request——新建Pull Request——选择源分支同步到目标分支;
 

 

评论输入start build,代码开始构建:自动触发编译和测试以及静态检查,全部通过后,会有审核人员审核合入;

如图已成功合入的:

至此,代码已成功上库合入,如果有编译或测试或静态检查失败,以同样流程修改后重新上库。

修改追加提交:

git add .

git commit --amend(执行CTRL+O、Enter、Ctrl+X)

git push https://gitee.com/nan-xiansen/xts_acts upup:refs/heads/startup0625 --foce

提交PR关联issue

s1:复制待关联issue链接

s2:在提交PR描述里添加 issue链接

 如图,PR和issue已相互关联:

分支挑单 

 将提交prcherry pick到其他分支:

 

 点击cherry-pick后输入PR合入描述,关联issue,评论输入start build开始构建,门禁通过后找commiter合入,与上面提交合入流程一样。

如图:

原pr挑单

 

备注:挑单出现代码冲突、没有权限等情况,请本地拉取对应分支代码,从本地按照同样提交流程修改验证提交 

Web网页端修改提交

 有些类似简单静态检查失败的问题,比如代码超行、空行等,可在提交网页面在线直接修改提交,如下:

 

点击提交后,PR标题、描述,issue关联,触发构建、合入等于上面提交流程一致。

格式化检查 

请参考Build.gn文件格式化

有关OpenHarmony-标准设备系统代码操作梳理的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  3. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  4. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  5. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  6. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  7. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

  8. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

  9. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  10. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

随机推荐