博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rt-thread平台 动态装载实现原理
阅读量:5153 次
发布时间:2019-06-13

本文共 1135 字,大约阅读时间需要 3 分钟。

原理分析: a、在链接脚本link.lds里定义了专门存放动态符号表的段RTMSymTab。

b、内核对外提供可延时绑定的接口在rtm.h中通过RTM_EXPORT将一对对符号+地址构成的表存放到RTMSymTab段

#define RTM_EXPORT(symbol)                                            \const char __rtmsym_##symbol##_name[] SECTION(".rodata.name") = #symbol; ==》 __wrap_"#symbol   \const struct rt_module_symtab __rtmsym_##symbol SECTION("RTMSymTab")= \{                                                                     \    (void *)&symbol,                                                  \    __rtmsym_##symbol##_name                                          \};

 

c(rt-thread原生方案)、编译的时候通过scons --target=ua -s,内核将有延时绑定的接口头文件路径运行放在rtua.py中,    app使用的bsp目录下带M_前缀的编译选项。根据编译脚本的配置,都将保存在elf文件中。    缺点1:因为其不能区分哪些接口使用内核的,哪些使用C库的,应用调用的posix接口全部来自内核,这需要内核封装很多C库的接口。也就是C库成为了内核的一部分。    缺点2:不支持连接第三个动态库。

c(改进方案)、scons --export生成kernel_export_conf文件,app执行make的时候会将-wrap过的符号自动加上前缀_wrap_    1、通过wrap解决缺点1,使用wrap修饰的接口使用内核,否则使用C库。    2、通过完善dlmoudle模块,支持动态自动查找。    3、通过-shared,将未找到的符号,置0,ndx为UND,其实及时标记延时绑定(elf相关,readelf工具)。    4、通过–e main解决app的入口不一定是main问题。  

d、运行的时候dlmodule_load先读取并解析elf文件,将其中需要重定位符号表的重新赋值绑定。 e、创建线程,运行app。

转载于:https://www.cnblogs.com/mic-chen/p/10523447.html

你可能感兴趣的文章
(VC/MFC)多线程(Multi-Threading) -1. 基本概念.
查看>>
快数据时代下,Moka携手DataPipeline提升招聘效能
查看>>
DataPipeline丨构建实时数据集成平台时,在技术选型上的考量点
查看>>
day1 用户登陆三次机会
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
LeetCode Ones and Zeroes
查看>>
CF932E Team Work——第二类斯特林数
查看>>
敏捷开发一千零一问系列之十三:故事点好还是人天好?
查看>>
内置函数— — eval、exec、compile
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
第九周作业
查看>>
MiniMagick
查看>>
sqlserver2014无法打开报Cannot find one or more components_修复方案
查看>>
css important
查看>>
KindEditor图片上传到七牛云
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
[转] C语言的谜题
查看>>
response对象的使用
查看>>