当前位置: 首页 > news >正文

鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发

基本概念

在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF加载方案,方便拓展算法生态。LiteOS-M提供类似于dlopen、dlsym等接口,APP通过动态加载模块提供的接口可以加载、卸载相应算法库。如图1所示,APP需要通过三方算法库所需接口获取对应信息输出,三方算法库又依赖内核提供的基本接口,如malloc等。APP加载所需接口,并对相关的未定义符号完成重定位后,APP即可调用该接口完成功能调用。目前动态加载组件只支持arm架构。此外,待加载的共享库需要验签或者限制来源,确保系统的安全性。

图1 LiteOS-M内核动态加载架构图

1

运行机制

符号表导出

共享库调用内核接口需要内核主动暴露动态库所需的接口,如图2所示,该机制将符号信息编译到指定段中,调用SYM_EXPORT宏即可完成对指定符号的信息导出。符号信息通过结构体SymInfo描述,成员包括符号名和符号地址信息,宏SYM_EXPORT通过__attribute__编译属性将符号信息导入.sym.*段中。

typedef struct {CHAR    *name;UINTPTR addr;
} SymInfo;#define SYM_EXPORT(func)                                            \
const SymInfo sym_##func __attribute__((section(".sym."#func))) = { \.name = #func,                                                  \.addr = (UINTPTR)func                                           \
};

图2 导出的符号表信息

2

ELF文件加载

加载过程中,根据ELF文件的句柄以及程序头表的段偏移可以得到需要加载到内存的LOAD段,一般有两个段,只读段及读写段,如下所示,可以用readelf -l查看ELF文件的LOAD段信息。如图3所示,根据相应的对齐属性申请物理内存,通过每个段的加载基址及偏移将代码段或数据段写入内存中。

$ readelf -l lib.soElf file type is DYN (Shared object file)
Entry point 0x5b4
There are 4 program headers, starting at offset 52Program Headers:Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg AlignEXIDX          0x000760 0x00000760 0x00000760 0x00008 0x00008 R   0x4LOAD           0x000000 0x00000000 0x00000000 0x0076c 0x0076c R E 0x10000LOAD           0x00076c 0x0001076c 0x0001076c 0x0010c 0x00128 RW  0x10000DYNAMIC        0x000774 0x00010774 0x00010774 0x000c8 0x000c8 RW  0x4Section to Segment mapping:Segment Sections...00     .ARM.exidx01     .hash .dynsym .dynstr .rel.dyn .rel.plt .init .plt .text .fini .ARM.exidx .eh_frame02     .init_array .fini_array .dynamic .got .data .bss03     .dynamic

图3 ELF文件的加载过程

3

ELF文件链接

如图4所示,通过ELF文件的.dynamic段获取重定位表,遍历表中每一个需要重定位的条目,再根据需要重定位的符号名在共享库和内核提供的导出符号表中查找相应符号并更新相应的重定位信息。

图4 ELF文件的链接过程

4

ELF支持规格

ELF支持类型

编译共享库时,添加-fPIC可以编译出位置无关代码(-fPIC为编译选项),此时共享库文件类型为ET_DYN,其可以加载至任意有效的地址区间。

例:arm-none-eabi-gcc -fPIC –shared –o lib.so lib.c

ELF共享库编译链接选项

  1. “-nostdlib”编译链接选项:不依赖编译器中lib库。
  2. “-nostartfiles”编译链接选项:不依赖编译器中启动相关的文件。
  3. “-fPIC”编译选项:可编译位置无关的共享库。
  4. “-z max-page-size=4”链接选项:二进制文件中可加载段的对齐字节数为4,可节约内存,可用于动态库。
  5. “-mcpu=”需要指定对应的CPU架构。

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

2

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!
3

相关文章:

鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发

基本概念 在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF加载方案,方便拓展算法生态。LiteOS-M提供类…...

Leetcode42. 接雨水

讲的好的视频讲解 【很难想象这up刷题的精神状态 Leetcode42. 接雨水】 https://www.bilibili.com/video/BV1MC411n7Af/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a rm是right max的意思,lm是left max的意思 时间复杂度: O (…...

dbt snapshot命令及应用示例

DBT是一种功能强大的数据转换工具,它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够创建快照,这是跟踪数据随时间变化的一种方法。本文带你一起完成创建和使用dbt快照的过程。 理解缓慢变化维度 缓慢变化维度(scd)是数据仓…...

JavaEE: 深入探索TCP网络编程的奇妙世界(四)

文章目录 TCP核心机制TCP核心机制四: 滑动窗口为啥要使用滑动窗口?滑动窗口介绍滑动窗口出现丢包咋办? TCP核心机制五: 流量控制 TCP核心机制 书接上文~ TCP核心机制四: 滑动窗口 为啥要使用滑动窗口? 之前我们讨论了确认应答策略,对每一个发送的数据段,都要给一个ACK确…...

面试金典题2.3

若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。 假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。 例如,传入节点 c(位于单向链…...

React 知识框架

在学习 React 时,可以按照以下知识框架来逐步学习和掌握 React 相关的知识: 1. **基础概念**: - 了解什么是 React 和为什么要使用 React。 - 理解 Virtual DOM(虚拟 DOM)的概念以及它如何提高性能。 - 学习…...

DeepCross模型实现推荐算法

1. 项目简介 A032-DeepCross项目是一个基于深度学习的推荐算法实现,旨在解决个性化推荐问题。随着互联网平台上信息和内容的爆炸式增长,用户面临着信息过载的困境,如何为用户提供高效、精准的推荐成为了关键。该项目背景基于现代推荐系统的发…...

【力扣】2376. 统计特殊整数

如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 示例 1: 输入:n 20 输出:19 解释:1 到 20 之间所有整数除了 11 以外都…...

MySQL面试题——第一篇

1. 一张自增表里面总共有7条数据,删除了最后2条数据,重启数据库后又插入了一条数据,此时ID是几 表类型如果是MyISAM,那么id就是8 如果是InnoDB,那就是6 InnoDB表只会把自增主键的最大id记录在内存中,所以重…...

零停机部署的“秘密武器”:为什么 Kamal Proxy 能成为你架构中的不二之选?

你是不是也遇到过这种场景:网站正在升级,用户却被迫刷新无数次页面?服务器切换时瞬间掉线,客户体验差得没话说。更糟糕的是,流量高峰期来临时,正是业务最重要的时刻,结果因为停机而损失惨重。这个时候你一定会想:难道没有一种方式,能在不打断服务的情况下,平滑地进行…...

轻量级RSS阅读器Fusion

什么是 Fusion ? Fusion 是一款轻量级、自托管的 RSS 聚合器和阅读器。 软件主要特点: 自动分组、书签、搜索、嗅探信息导入/导出 OPML 文件支持 RSS、Atom、JSON 类型的 feed响应式、明/暗模式、PWA轻量级,自托管友好 使用 Golang 和 SQLit…...

Kubernetes从零到精通(11-CNI网络插件)

Kubernetes网络模型 Kubernetes的网络模型(Kubernetes Networking Model)旨在提供跨所有节点、Pod和服务的统一网络连接。它的核心理念是通过统一的网络通信规则,保证集群中的所有组件能够顺畅地相互通信。Kubernetes网络模型主要有以下几个关…...

【手机马达共振导致后主摄马达声音异常】

手机马达共振导致后主摄马达声音异常 问题根因解决方案其他易混淆 问题根因 当手机马达的震动频率和摄像头AF马达的一二阶震动频率处于共振频段的时候,手机马达震动时候有很大概率会干扰到后置摄像头的对焦马达正常工作,可能出现的影响有出现滋滋杂音&a…...

AUTOSAR UDS NRC

UDS NRC NRC 含义如表格所示 NRC代码描述含义0x00Ok没有错误,请求已成功执行0x01~0x0FISOSAEReservedISO 保留,暂时未定义0x10General reject服务请求被拒绝,原因不明确0x11Service not supported请求的服务不被支持0x12Sub-function not supported请求的子功能不被支持0x13…...

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…...

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…...

Linux驱动.之MT7601,USB-WiFi网卡移植到X210开发板,wpa_supplicant配置工具的使用(一)

一、移植前 1、下载与解压无线网卡MT7601U驱动源码压缩包 DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2 解压后有如下文件 ate common iwpriv_usage.txt Makefile mgmt phy README_STA_usb RT2870STA.dat sta_ate_iwpriv_usage.txt chips include m…...

ChatGPT 在国内使用的方法

AI如今很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,ChatGPT 真是无所不能~ 作为一款出色的大语言模型,ChatGPT 实现了人类般的对话交流,最主要是能根据上下文进行互动。 接下来,我将介绍 ChatGPT 在国…...

思通数科开源产品:免费的AI视频监控卫士安装指南

准备运行环境: 确保您的服务器或计算机安装了Ubuntu 18.04 LTS操作系统。 按照产品要求,安装以下软件: - Python 3.9 - Java JDK 1.8 - MySQL 5.5 - Redis 2.7 - Elasticsearch 8.14 - FFmpeg 4.1.1 - RabbitMQ 3.13.2 - Minio (…...

阿里HPN-用于大型语言模型训练的数据中心网络

阿里巴巴HPN:用于大型语言模型训练的数据中心网络 探索大规模语言模型训练新方法:阿里巴巴HPN数据中心网络论文。 摘要 本文介绍了阿里云用于大型语言模型(LLM)训练的数据中心网络HPN。由于LLM和一般云计算之间的差异(例如,在流量模式和容错性方面)&…...

数据安全与性能瓶颈困扰企业?湖南天硕SSD固态硬盘带来航天级稳定体验

在数字化转型加速的今天,企业数据量呈指数级增长,随之而来的数据安全风险与存储性能瓶颈已成为众多企业,尤其是对数据可靠性要求极高的B端用户(如企业采购负责人、技术总监)面临的共同挑战。传统存储方案在应对复杂业务…...

2024电子数据取证实战:从手机取证到恶意APP逆向分析

1. 手机取证实战入门:从ADB到蓝牙MAC地址追踪 手机取证是电子数据取证中最常见的场景之一。去年我参与处理的一起案件中,嫌疑人通过恶意APP窃取了受害者通讯录,当时就是通过ADB连接记录锁定了关键证据。先说说ADB这个基础但极其重要的工具。 …...

Wan2.1-umt5多轮对话效果展示:复杂任务分解与执行跟踪

Wan2.1-umt5多轮对话效果展示:复杂任务分解与执行跟踪 最近在测试各种对话模型时,我遇到了一个挺有意思的挑战:让AI帮忙规划一次完整的旅行。这可不是简单的一问一答,它涉及到理解模糊需求、主动追问细节、分解多个子任务&#x…...

实战应用:基于快马平台开发排序算法性能对比分析工具

今天想和大家分享一个特别实用的工具开发经历——用InsCode(快马)平台快速搭建了一个排序算法性能对比分析工具。这个项目不仅帮我巩固了算法知识,还意外发现了很多实际应用中的细节问题,特别适合用来理解不同排序算法的实战表现。 1. 为什么需要这个工…...

BilibiliDown:让B站视频下载变得简单高效

BilibiliDown:让B站视频下载变得简单高效 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliDo…...

飞书机器人告警配置避坑指南:夜莺监控常见报错解决方案

飞书机器人告警配置避坑指南:夜莺监控常见报错解决方案 深夜的告警风暴里,飞书机器人突然罢工是什么体验?上周三凌晨2点,当我面对满屏的Key Words Not Found和sign match fail报错时,终于理解了为什么运维工程师的咖啡…...

港科资讯|郑光廷教授出席国际科技组织发展与全球科技治理论坛 分享协作实践

2026年3 月 28 日,国际科技组织发展与全球科技治理论坛在北京中关村国际创新中心成功举办。香港科技大学副校长(研究及发展)郑光廷教授受邀出席并发表主题演讲,香港科大内地办(北京)主任袁冶老师一同参会,与中外嘉宾交…...

终极分屏游戏解决方案:Nucleus Co-Op 让单机游戏变身多人派对

终极分屏游戏解决方案:Nucleus Co-Op 让单机游戏变身多人派对 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为单机游戏无法本地多…...

Graphormer在放射性药物中的应用:螯合剂分子稳定常数与配位能力预测

Graphormer在放射性药物中的应用:螯合剂分子稳定常数与配位能力预测 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准测试中表现优异&a…...

Dan Koe: 如果你有多重兴趣,请不要浪费接下来的2-3年

本文整理自 Dan Koe 原文。Dan Koe 是 YouTube、X 等平台拥有数百万粉丝的个人成长领域创作者,以"一人公司"理念、深度内容创作和高效 AI 工作流著称。你是否曾因为无法只专注一件事而感到自责? 你学设计,又想学编程;读…...