OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一)
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(三)
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片内核移植
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(三)
  • OpenHarmony(鸿蒙南向开发)——标准系统移植指南(一)
  • OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核
  • OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(一)
  • OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)
  • 持续更新中……

Makefile方式组织编译的库移植

以yxml库为例,其移植过程如下文所示。

源码获取

从仓库获取yxml源码,其目录结构如下表:

表1 源码目录结构

名称描述
yxml/bench/benchmark相关代码
yxml/test/测试输入输出文件,及测试脚本
yxml/Makefile编译组织文件
yxml/.gitattributes-
yxml/.gitignore-
yxml/COPYING-
yxml/yxml.c-
yxml/yxml.c.in-
yxml/yxml-gen.pl-
yxml/yxml.h-
yxml/yxml.md-
yxml/yxml-states-

设置交叉编译

设置Makefile的交叉编译工具链,修改并编译该库,生成OpenHarmony平台的可执行文件,步骤如下:

  1. 设置工具链 将下列clang工具链配置替换掉yxml库根目录的Makefile(即表1中的文件)中的原有配置。

clang工具链配置:

    #设置交叉编译工具链,确保工具链所在路径已经添加到了PATH环境变量中CC:=clangAR:=llvm-ar#cflags中必须要添加--target及--sysroot选项CFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g --target=arm-liteos -march=armv7-a -mfloat-abi=softfp -mcpu=cortex-a7 -mfpu=neon-vfpv4 --sysroot=$(OHOS_SYSROOT_PATH)

原有配置:

    CC:=gccAR:=arCFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g
  1. 执行编译 linux命令行中进入yxml的源文件目录(即图1所示目录),执行下列命令:
    make test OHOS_SYSROOT_PATH=...

其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot所在目录,以OpenHarmony为例即源码根目录下out/hispark_xxx/ipcamera_hispark_xxx/sysroot目录的绝对路径。上述目录会在全量编译后生成,因此移植前先完成一次全量编译。

  1. 查看结果 步骤2操作完成后,yxml下会生成out目录,里面有静态库文件和测试用例:

表2 yxml编译生成目录

名称描述
OpenHarmony/third_party/yxml/yxml/out/lib/编译生成的静态库的存放目录
OpenHarmony/third_party/yxml/yxml/out/test/编译生成的测试用例及其输入输出等文件的存放目录

测试

yxml库测试步骤与double-conversion库基本一致,可参考CMake方式组织编译的库移植的测试过程,以下内容介绍yxml库测试用例的使用方法:

表3 生成的test目录结构示意

名称描述
OpenHarmony/third_party/yxml/yxml/out/test/test.sh自动化测试脚本,由于OpenHarmony不支持脚本运行,因此无法使用,可参考其内容手动测试
OpenHarmony/third_party/yxml/yxml/out/test/test用于测试的可执行文件
OpenHarmony/third_party/yxml/yxml/out/test/*.xml测试输入文件
OpenHarmony/third_party/yxml/yxml/out/test/*.out期望的输出文件

test.sh内容如下所示:

#!/bin/sh
for i in *.xml; dob=`basename $i .xml`o=${b}.outt=${b}.test./test <$i >$tif [ -n "`diff -q $o $t`" ]; thenecho "Test failed for $i:"diff -u $o $texit 1fi
done
echo "All tests completed successfully."

由于OpenHarmony的shell中暂不支持输入输出重定向(<和>),所以测试时需要将输入*.xml文件内容直接复制进shell后回车,输出内容会直接展示在shell窗口。过程如下:

下列操作假定已按照2.4节的步骤搭建OpenHarmony,挂载并进入nfs目录:

  1. 执行下列命令

    ./test
  2. 复制*.xml内容到shell 以表3test目录下pi01.xml为例,内容如下,输入到shell并回车:

    <?SomePI abc?><a/>
<textarea id="copy1722498774660" style="color: inherit; font: inherit; position: absolute; top: -9999px; left: -9999px; z-index: -9999;"></textarea>
  1. 比较shell中输出的内容与表3test目录中对应的*.out文件是否一致 输出结果如下:
    pistart SomePIpicontent abcpiendelemstart aelemendok

经比较与表3test目录下pi01.out内容一致,测试通过。

将该库编译添加到OpenHarmony工程中

yxml库添加的过程除了适配文件build.gn和config.gni有些许变化外,其他和double-conversion库完全一致,参考CMake方式组织编译的库移植的配置过程。要修改的适配文件及添加后的目录结构如下:

  • yxml库新增的BUILD.gn实现如下:
import("config.gni")
group("yxml") {if (ohos_build_thirdparty_migrated_from_fuchisa == true) {deps = [":make"]}
}
if (ohos_build_thirdparty_migrated_from_fuchisa == true) {action("make") {script = "//third_party/yxml/build_thirdparty.py"outputs = ["$target_out_dir/log_yxml.txt"]exec_path = rebase_path(rebase_path("./yxml", root_build_dir))command = "make clean && $MAKE_COMMAND"args = ["--path=$exec_path","--command=${command}"]}
}
  • yxml库新增的config.gni配置如下:
TEST_ENABLE = "YES"if (TEST_ENABLE == "YES") {MAKE_COMMAND = "make test OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
} else {MAKE_COMMAND = "make OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
}
  • 添加完成后目录结构示意:

    表4 添加到工程后的目录结构

名称描述
OpenHarmony/third_party/yxml/BUILD.gn将三方库加入工程的gn适配文件
OpenHarmony/third_party/yxml/build_thirdparty.pyGN调用shell命令脚本文件,由上面GN文件将相关命令传入,实现GN转Makefile
OpenHarmony/third_party/yxml/config.gni三方库编译配置文件,可修改该文件来配置用例是否参与构建等
OpenHarmony/third_party/yxml/yxml/要移植的三方库目录

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1535049.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code&#xff08;简称 VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构、调试等功能&#xff0c;非常适合开发者使用。VSCode 通过安装扩展&#xff08;Extension…

Spring Cloud常见面试题

1.请说说你用过Spring Cloud哪些组件&#xff1f;这些组件分别有什么作用&#xff1f; 1、注册中心&#xff1a;Eureka、Nacos、Zookeeper、Consul&#xff1b;&#xff08;服务注册&#xff09; 2、负载均衡&#xff1a;Ribbon、LoadBalancer&#xff1b;&#xff08;客户端的…

SpringBoot框架下的房产销售系统开发

第一章 绪 论 1.1背景及意义 房产销售也都将通过计算机进行整体智能化操作&#xff0c;对于房产销售系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;首页、个人中心、用户管理、销售经理管理、房源信息管理、房源类型管理、房子户型管理、交易订单管…

MYSQL数据库——InnoDB存储引擎

一.逻辑存储结构 二.架构 1.内存结构 1.缓冲池&#xff08;buffer_pool&#xff09; 缓冲池buffer_pool:缓冲池是主内存中的一个区域&#xff0c;里面可缓存磁盘上经常操作的真实数据&#xff0c;在执行增删改查操作时&#xff0c;先操作缓冲池中的数据&#xff08;若缓冲池没…

一个软件分发和下载的网站源码,带多套模板

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP&#xff0c;带下载统计&#xff0c;带多套模板&#xff0c;带图文教程 代码下载&#xff1a;百度网盘

19. 删除链表的倒数第 N 个结点【 力扣(LeetCode) 】

零、LeetCode 原题 19. 删除链表的倒数第 N 个结点 一、题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 进阶&#xff1a;你能尝试使用一趟扫描实现吗&#xff1f; 二、测试用例 示例 1&#xff1a; 输入&#xff1a;hea…

开放式耳机哪个品牌好?分享四款开放式蓝牙耳机排行榜前十名

对于喜欢带耳机的人来说&#xff0c;选择一款适合的开放式耳机是十分重要的。在繁重的学习任务中&#xff0c;一副音质优秀、佩戴舒适的耳机可以大大提高学习效率。在选择开放式蓝牙耳机时&#xff0c;大家常常会面临一个问题&#xff0c;那就是哪个品牌的质量最好&#xff1f;…

RSTP/MSTP 笔记和配置实验

RSTP: Rapid Spanning Tree Protocol &#xff08;802.1w&#xff09; 一、问题: Why RSTP 可以快速切换&#xff1f; 1、端口角色增加: 两种到五种 从 STP 的两种角色: DP&#xff1a;Designated Port RP&#xff1a;Root Port 增加到了五种角色&#…

java项目之网上商城系统设计与实现(源码+文档)

项目简介 网上商城系统设计与实现实现了以下功能&#xff1a; 网上商城系统设计与实现的主要使用者管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c;还进行了对用户名称的模糊查询的条件。 &#x1f495;…

虚拟机Linux+Ubuntu操作系统 如何在虚拟机上安装docker VMPro 2024在线激活资源

一般情况下 不建议在windows系统上安装docker Windows本身就自带一个虚拟机叫WSL 但是不推荐在日常使用的电脑上安装 我们要下一个虚拟机 我们在window上安装docker会被告知WSL内核太老 我们要一个专业的 隔离的虚拟机软件 推荐使用虚拟机 这是我们的虚拟机软件 我们这边…

音视频推流中使用wireshark进行抓包分析RTMP

一、前期工作 最近使用开发板采集音视频数据合成FLV流后进行推流到PC端&#xff08;RTMP协议&#xff09;&#xff0c;PC端需要安装对应的nginx以及支持rtmp的nginx&#xff0c;在网上找了教程后安装成功&#xff0c;现在使用wireshark工具对开发板于pc端之间的通信协议进行解析…

计算架构模式之负载均衡技巧

通用负载均衡算法 负载均衡算法 -轮询 & 随机 如果服务器挂掉了&#xff0c;那么负载均衡器还是可以感知到的&#xff0c;因为连接已经断掉了。 负载均衡算法-加权轮询 假设你有4核的和8核的&#xff0c;由于你的程序没有办法跑完CPU&#xff0c;那么有可能出现4核的和8核…

计算机网络30——Linux-gdb调试命令makefile

1、开始调试 编译时带-g为调试&#xff0c;带调试信息编译后的可执行文件更大 2、进入调试 使用gdb 可执行文件名——进入调试 失败版&#xff1a; 成功版&#xff1a; 3、l命令 l什么都不加——列出10行代码 l 行号——行号的行在中间&#xff0c;向上向下展示10行 4、st…

Modbus协议03:Modbus功能码和协议分类

视频链接&#xff1a;【3】Modbus协议功能码说明_哔哩哔哩_bilibili【3】Modbus协议功能码说明是【直播回放】小白也可以听懂的Modbus协议讲解的第3集视频&#xff0c;该合集共计4集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibili…

关于使用Mybatis-Plus 自动填充功能失效问题

关于使用Mybatis-Plus 自动填充功能失效问题 关于使用Mybatis-Plus 自动填充功能失效 首先遇到的第一个问题 自动填充失败 或被填充为NULL 原因&#xff1a;字段类型 与 填充类型 不一致导致 解决方法&#xff1a;将类型替换成一致的类型 全部为Date 或 LocalDateTime 即可解…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

python容器四之字典

文章目录 1. 字典介绍2. 使用字典3. 字典的常见操作3.1 添加元素3.2 删除元素3.3 修改元素3.4 查找元素 4. 字典遍历方法4.1 遍历字典元素 5. 公共运算符6. 公共方法 1. 字典介绍 先来看看现实生活中的字典。我们知道&#xff0c;可以应用字典来查找汉字。 在这里插入图片描述…

openstack之cinder介绍

概念 cinder 为虚拟机提供管理块存储服务。支持的文件系统&#xff1a;lvm、iscsi、nfs、san、RBD 组件构成及功能介绍 cinder api&#xff1a;在控制节点运行&#xff0c;管理服务的接口&#xff0c;被命令行、其他组件调用&#xff1b; cinder scheduler&#xff1a;类似n…

HTML标签优先级

HTML&#xff08;HyperText Markup Language&#xff09;标签的位置对于页面的结构、性能以及可维护性至关重要。合理安排标签的位置不仅有助于提高网页的加载速度&#xff0c;还能使得代码更加清晰易懂。以下是一些关于HTML标签放置的基本规则和建议&#xff1a; 1. 文档类型…

【查看谷歌浏览器的个人文件路径】

查看谷歌浏览器的个人文件路径 chrome://version/