Files
openharmony_kernel_liteos_m/arch_spec_zh.md
Haryslee d75383400e feat: 支持native动态加载组件
1.【需求描述】
动态库开发部分:
gcc的sample code。
提供生成暴露接口生成机制,并允许产品新增需要暴露的接口。
提供可以判断库允许资源大小的能力,并提供相关工具辅助开发者确定开发的库要求的资源是否可以满足。

动态库运行部分:
提供elf load的api,可以加载指定路径下的库,并完成符号重映射等运行准备。
提供elf 暴露符号调用的api,用于调用库的api。
elf加载&链接异常时,有明确错误记录,返回明确错误类型。
提供elf 卸载的api。

2.【方案描述】
(1) 通过灌段的形式记录需要导出符号的地址信息,用于暴露内核对外的接口,在加载链接器中通过查询
对应的符号信息获取符号地址。
(2) 加载链接时,解析共享库并将共享库中可加载段通过文件系统读入内存中,并对共享库中未定义的、
需要重定位的符号进行重定位。需要调用符号时,根据符号名通过哈希表即可查询共享库提供的对应符号
的地址。

BREAKING CHANGE:
新增4个对外接口,声明在los_dynlink.h文件中,分别为:
(1) LOS_DynlinkInit: 动态加载模块初始化。
(2) LOS_SoLoad: 加载指定路径的共享库。
(3) LOS_FindSym: 根据共享库句柄查找指定符号。
(4) LOS_SoUnload: 卸载共享库。

close #I418HJ

Signed-off-by: Haryslee <lihao189@huawei.com>
Change-Id: I7669b7ef20096294f9d1094c85ac6602fefad354
2021-08-10 20:26:40 +08:00

78 lines
6.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
```
.
├── components --- 移植可选组件,依赖内核,单独对外提供头文件
│   ├── backtrace --- 回溯栈支持
│   ├── cppsupport --- C++支持
│   ├── cpup --- CPUP功能
│   ├── dynlink --- 动态加载与链接
│   ├── exchook --- 异常钩子
│   ├── fs --- 文件系统
│   └── net --- 网络功能
├── kal --- 内核抽象层提供内核对外接口当前支持CMSIS接口和部分POSIX接口
│   ├── cmsis --- CMSIS标准支持
│   └── posix --- POSIX标准支持
├── kernel --- 内核最小功能集代码
│   ├── arch --- 内核指令架构层代码
│   │   ├── arm --- ARM32架构
│   │   │   ├── cortex-m3 --- Cortex-m3架构
│   │   │   │ └── keil --- Keil编译工具链实现
│   │   │   ├── cortex-m33 --- Cortex-m33架构
│   │   │   │ │── gcc --- GCC编译工具链实现
│   │   │   │ └── iar --- IAR编译工具链实现
│   │   │   └── cortex-m4 --- Cortex-m4架构
│   │   │   │ │── gcc --- GCC编译工具链实现
│   │   │   │ └── iar --- IAR编译工具链实现
│   │   │   └── cortex-m7 --- Cortex-m7架构
│   │   │   │ │── gcc --- GCC编译工具链实现
│   │   │   │ └── iar --- IAR编译工具链实现
│   │   ├── risc-v --- Risc-v架构
│   │   │ ├── nuclei --- Nuclei架构
│   │   │   │ └── gcc --- GCC编译工具链实现
│   │   │ └── riscv32 --- Riscv32架构
│   │   │   │ └── gcc --- GCC编译工具链实现
│   │   └── include
│   │   ├── los_arch.h --- 定义arch初始化
│   │   ├── los_atomic.h --- 定义通用arch原子操作
│   │   ├── los_context.h --- 定义通用arch上下文切换
│   │   ├── los_interrupt.h --- 定义通用arch中断
│   │   ├── los_mpu.h --- 定义通用arch内存保护
│   │   └── los_timer.h --- 定义通用arch定时器
│   ├── include
│   │   ├── los_config.h --- 功能开关和配置参数
│   │   ├── los_event.h --- 事件
│   │   ├── los_membox.h --- 静态内存管理
│   │   ├── los_memory.h --- 动态内存管理
│   │   ├── los_mux.h --- 互斥锁
│   │   ├── los_queue.h --- 队列
│   │   ├── los_sched.h --- 调度算法
│   │   ├── los_sem.h --- 信号量
│   │   ├── los_sortlink.h --- 排序链表
│   │   ├── los_swtmr.h --- 定时器
│   │   ├── los_task.h --- 任务
│   │   └── los_tick.h --- Tick时钟
   └── src
├── targets
│   └── targets
│   └── riscv_nuclei_demo_soc_gcc
│ │ ├── GCC --- 编译相关
│ │ ├── OS_CONFIG --- 开发板配置功能开关和配置参数
│ │ ├── SoC --- SOC相关代码
│ │ └── Src --- Application相关代码
│   └── riscv_nuclei_gd32vf103_soc_gcc
│   └── riscv_sifive_fe310_gcc
└── utils
├── internal
├── BUILD.gn --- Gn构建文件
├── los_compiler.h --- 编译工具配置,类型定义
├── los_debug.c --- Debugprintf相关
├── los_debug.h
├── los_error.c --- 错误处理
├── los_error.h
├── los_hook.c --- 钩子函数注册和调用
├── los_hook.h
├── los_list.h --- 双向链表
└── los_reg.h --- 寄存器读写宏定义
└── src
```