STM32F407移植OpenHarmony笔记9

继上一篇笔记,已经完成liteos内核的基本功能适配。
今天尝试启动OHOS和XTS兼容性测试。


如何启动OHOS?
OHOS系统初始化接口是OHOS_SystemInit(void),在内核初始化完成后,就能调用。

extern void OHOS_SystemInit(void);
OHOS_SystemInit();

OHOS_SystemInit函数在//base/startup/bootstrap_lite/services/source/system_init.c里面。
它负责初始化系统组件,由于系统组件的初始化用了特殊的宏定义,比如:

CORE_INIT()
SYS_RUN()
SYS_SERVICE_INIT_PRI()
......

这些宏在ohos_init.h里面可以看到,利用编译器把这个函数放到指定的代码段,相当于在编译阶段生成一个静态数组,然后OHOS_SystemInit会从这个数组取出函数,再依次执行。要实现这样的机制还需要修改链接脚本,好消息是talkweb的demo代码已经帮我们写好了,直接拿来就能用。
LD脚本添加的内容长下面的样子:

__zinitcall_bsp_start = .;KEEP (*(.zinitcall.bsp0.init))KEEP (*(.zinitcall.bsp1.init))KEEP (*(.zinitcall.bsp2.init))KEEP (*(.zinitcall.bsp3.init))KEEP (*(.zinitcall.bsp4.init))__zinitcall_bsp_end = .;......__zinitcall_exit_start = .;KEEP (*(.zinitcall.exit0.init))KEEP (*(.zinitcall.exit1.init))KEEP (*(.zinitcall.exit2.init))KEEP (*(.zinitcall.exit3.init))KEEP (*(.zinitcall.exit4.init))__zinitcall_exit_end = .;

OHOS系统组件是按子系统来分类管理的,每个子系统下面又有多个组件,需要用哪些系统功能就要添加对应的组件到config.json文件里面去。每个组件都有一个专门的描述文件:bundle.json,描述组件的名字和适用系统类型等信息。

功能组件之间也存在依赖关系,目前我还不知道怎么查询依赖关系,只能凭经验手动添加来测试。
在编辑config.json添加组件时,还有一个features字段,也不知道从哪找。

XTS是一个独立子系统,依赖组件不太清楚,只能根据编译报错信息往里面加,加到编译不报错为止。不过这就遇到一个奇怪的报错:

[OHOS ERROR] FAILED: gen/base/startup/init/services/param/liteos/lite_ohos_param_to_param_cfg_to_code.log 
[OHOS ERROR] /home/openharmony/prebuilts/python/linux-x86/3.9.2/bin/python3 ../../../base/startup/init/scripts/param_cfg_to_code.py --source /home/openharmony/base/startup/init/services/etc_lite/param/ohos_const/ohos.para --source /utils/sys_param/vendor.para --source /home/openharmony/base/startup/init/services/etc/param/ohos.para --dest_dir /home/openharmony/out/demo_board/hello/gen/init/

通过对比talkweb的demo,原来需要手写一个vendor.para文件,而且还要指定路径。
需要在config.json里面添加产品适配器的路径,就是下面这行代码:

  "product_adapter_dir": "//vendor/demo/hello/hals",

这表示某些需要产品级适配的组件,会在这个目录去寻找对应的文件。
刚才的报错就是“syspara_lite”这个组件所需要的适配文件。
参考talkweb的demo,在这个目录下创建以下文件:

utils/sys_param/vendor.para
utils/sys_param/hal_sys_param.c
utils/sys_param/BUILD.gn

再次编译又遇到bool未定义的问题,我真是服了!用bool必须要#include <stdbool.h>。
经过一番折腾总算是编译通过了。
下载到板子上程序跑起来了,也看到一些日志了,但是还没有看到XTS的日志。

01-01 00:00:00.063 0 124 I 1/SAMGR: Init service 0x8039010 <time: 4294967260ms> success!
01-01 00:00:00.071 0 124 I 1/SAMGR: Initialized all core system services!
01-01 00:00:00.078 0 124 I 1/SAMGR: Goto next boot step return code:-6

再研究研究,XTS默认没有显示调用,只是被编译成静态库了。不会被链接脚本加入目标文件中,还需要手动在ldflags里面添加要引用的库,下面是抄来的参考代码:

  if (build_xts) {lib_dirs = [ "$root_out_dir/libs" ]ldflags += ["-Wl,--whole-archive","-lbootstrap","-lbroadcast","-lhctest",#"-lhal_sysparam",#公共基础库#"-lmodule_ActsUtilsFileTest",#"-lmodule_ActsKvStoreTest",#DFX"-lmodule_ActsDfxFuncTest","-lmodule_ActsHieventLiteTest",#启动恢复"-lmodule_ActsBootstrapTest",#"-lmodule_ActsParameterTest",#分布式任务调度"-lmodule_ActsSamgrTest",#网络#"-lmodule_ActsLwipTest",#"-lmodule_ActsUpdateTest","-Wl,--no-whole-archive",]}

这回终于看到XTS的日志打印了。

后面还会有很多个Start to run test suite:xxxx还在滚动。
滚到最后会打印All the test suites finished!

到此OHOS已成功启动,XTS测试也跑起来了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JupyterLab 更换内核 使用 conda 虚拟环境

未有conda虚拟环境default先创建环境 conda create -n default python3.8 ipykernel已有conda虚拟环境default激活后安装ipykernel conda activate defaultpip install ipykernel将虚拟环境写入 jupyter notebook 的 kernel 中 python -m ipykernel install --user --name 虚…

C语言小游戏:贪吃蛇(游戏开发的环境和功能介绍)

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 生命不停&#xff0c;学习不止。铁汁们&#xff0c;我是大伟&#xff0c;欢迎来到大伟的游戏时间&#xff0c…

使用idea连接SQL Server数据库出错TLS10 is not accepted

使用idea连接数据库时&#xff0c;发现提示错误&#xff1a; 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。等等出错提示。 可能有两个…

基础算法bfs -剪枝问题

问题描述:一个迷宫有 NXM 格,有一些格子是地板,能走;有一些格子是障碍,不能走。给一个起点S和一个终点D。一只小狗从 S出发,每步走一块地板&#xff0c;在每块地员不能停留&#xff0c;而且走过的地板都不能再走。给定一个 T,问小狗能正好走 T步到达D吗?输入:有很多测试样例。…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题&#xff0c;简简单单的列表&#xff0c;查询MongoDB数据库&#xff0c;测试环境不过几百上千条数据而已&#xff0c;请求耗时居然高达5~6秒&#xff1a; 作为对比&#xff0c;生产环境的请求响应截图如下&…

【Java程序设计】【C00194】基于SSM的高校财务处理管理系统(论文+PPT)

基于SSM的高校财务处理管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高校从财务处理系统 本系统分为财务和管理员2个功能模块。 财务&#xff1a;财务登录高校财务处理系统后&#xff0c;能对首页、个人中心…

链表经典算法(+OJ刷题)

文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易&#xff0c;点赞收藏一下呗&#xff01;&#xff01;&#xff01; 前言 在上一节&#xff0c;我们介绍了单链表的增&#xff0c;删&#xff…

thinkphp6入门(18)-- 中间件中除了handle函数,还可以有其它函数吗

在ThinkPHP 6的中间件中&#xff0c;除了 handle 方法外&#xff0c;还可以定义其他方法。这些额外的方法可以用于执行中间件中的不同逻辑&#xff0c;但是只有 handle 方法是中间件的入口点&#xff0c;其他方法则需要在 handle 方法中手动调用。 以下是一个简单的示例&#…

docker手动迁移镜像

1&#xff0c;将镜像保存在本地 docker save 镜像名称:版本号 > 镜像名称.tar 2&#xff0c;下载镜像 通过 ftp 工具或者命令&#xff0c;下载到本地 3&#xff0c;上传镜像到目标 docker 所在服务器 4&#xff0c;导入镜像 docker load < 镜像名称.tar

Electron实战(一):环境搭建/Hello World/打包exe

文章目录 Electron安装Node.jsNodeJs推荐配置开始Electron项目创建index.js文件创建src目录运行打包生成exe生成安装包踩坑 下一篇Electron实战(二)&#xff1a;将Node.js和UI能力&#xff08;app/BrowserWindow/dialog)等注入html Electron Electron是一个使用JavaScript, HT…

Iceberg从入门到精通系列之二十二:Spark DDL

Iceberg从入门到精通系列之二十二&#xff1a;Spark DDL 一、Spark DDL二、Spark DDL-创建表三、Spark DDL-PARTITIONED BY四、Spark DDL-CREATE TABLE ... AS SELECT五、Spark DDL-REPLACE TABLE ... AS SELECT六、Spark DDL-DROP TABLE七、Spark DDL-ALTER TABLE1.ALTER TABL…

AI-数学-高中-22-tanx的图像与性质

原作者视频&#xff1a;三角函数】9tanx的图像与性质&#xff08;易中档&#xff09;_哔哩哔哩_bilibili 做题时注意先画图&#xff0c;再计算。

RabbitMQ(保姆级教程)

RabbitMQ学习 基础 1. 同步通信和异步通信 同步调用 下一步动作必须依赖上一步 异步调用 通知到位就行&#xff0c;不对消费者做强制要求&#xff0c;只要求最终一致性就行 2. MQ技术选项 消息先进先出&#xff0c;RabbitMQ默认有序 Erlang 是面向并发&#xff0c…

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动 在用Allegro进行PCB设计时,有时候需要同时移动某个区域的所有元素,如:Symbols,shapes,vias,Clines,Cline segs等元素。那么如何操作呢? 首先就是把Symbols,shapes,vias,Clines,Cline …

【实训】网络规划与部署实训

一 实训目的及意义 本周实训主要是了解网络规划与部署&#xff0c;熟悉三大厂商华为、思科、锐捷交换机路由器以及相关协议的原理和配置&#xff0c;提高学生的动手能力和分析规划部署能力。 实训主要针对计算机网络系统集成的设计与实现的实际训练&#xff0c;着重锻炼学生熟练…

可视化特效汇总-2023年

基于threejs可视化效果展示、基于mapbox白膜展示、基于cesium模型加载、磁场专题图绘制

【Redis】字符串原理--简单动态字符串SDS

一.SDS定义 free 属性值为0&#xff0c;标识SDS没有分配任何未使用空间。len 属性值为5&#xff0c;标识SDS保存了一个5字节长度的字符串。buf 属性是一个char类型数组&#xff0c;数组的前5个字节保存了&#xff0c;R e d i s 五个字符&#xff0c;最后一个保存空字符串 \0…

架构篇33:传统的可扩展架构模式-分层架构和SOA

文章目录 分层架构SOA小结相比于高性能、高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银…

JAVA建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…

Linux 查看系统信息 + 服务信息命令(简记)

概述 作用&#xff1a;Linux 运维工作中常用的命令速查 小步教程 (xiaobuteach.com) Linux 命令大全 | 菜鸟教程 (runoob.com) 文本编辑器vim 本章大纲 | 小步教程 vim 多文件编辑 | 小步教程 常用 ps 查看服务启动命令 Linux ps 命令 | 菜鸟教程 (runoob.com) # 查找…