From ac48721ac754b35b77b75a2a60a8930c2b024db0 Mon Sep 17 00:00:00 2001 From: Austin Date: Wed, 6 Apr 2022 02:42:36 +0000 Subject: [PATCH] update zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md. Signed-off-by: Austin --- zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md b/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md index fd952435e7..6d1468a898 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md +++ b/zh-cn/device-dev/kernel/kernel-mini-extend-dynamic-loading.md @@ -14,6 +14,7 @@ 在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF加载方案,方便拓展算法生态。LiteOS-M提供类似于dlopen、dlsym等接口,APP通过动态加载模块提供的接口可以加载、卸载相应算法库。如图1所示,APP需要通过三方算法库所需接口获取对应信息输出,三方算法库又依赖内核提供的基本接口,如malloc等。APP加载所需接口,并对相关的未定义符号完成重定位后,APP即可调用该接口完成功能调用。目前动态加载组件只支持arm架构。此外,待加载的共享库需要验签或者限制来源,确保系统的安全性。 **图1** LiteOS-M内核动态加载架构图 + ![zh-cn_image_0000001200292052](figures/zh-cn_image_0000001200292052.png) @@ -38,6 +39,7 @@ const SymInfo sym_##func __attribute__((section(".sym."#func))) = { \ ``` **图2** 导出的符号表信息 + ![zh-cn_image_0000001245171875](figures/zh-cn_image_0000001245171875.png) @@ -67,6 +69,7 @@ Program Headers: ``` **图3** ELF文件的加载过程 + ![zh-cn_image_0000001245251887](figures/zh-cn_image_0000001245251887.png) @@ -75,6 +78,7 @@ Program Headers: 如图4所示,通过ELF文件的.dynamic段获取重定位表,遍历表中每一个需要重定位的条目,再根据需要重定位的符号名在共享库和内核提供的导出符号表中查找相应符号并更新相应的重定位信息。 **图4** ELF文件的链接过程 + ![zh-cn_image_0000001200612006](figures/zh-cn_image_0000001200612006.png) -- GitLab