Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
动态模块加载
发布于 2009-12-03 21:42:31 浏览:10167
订阅该版
动态模块加载的支持,列入计划没?
查看更多
17
个回答
默认排序
按发布时间排序
xddl
2009-12-05
这家伙很懒,什么也没写!
动态模块加载,是一个非常有意思的东西。也许有人会说,单片机的领域,几乎不需要,是的,确实是这样。 但是,现在的世界越来越复杂,本来很简单的东西也很复杂,这就对产品发布以后的适应性提出了很高的要求,要么重新做,要么升级。 如果有动态模块加载的办法,就很方便了
bernard
2009-12-05
这家伙很懒,什么也没写!
在这个月的开发者聚会上我会谈及到这个话题。
xddl
2010-01-28
这家伙很懒,什么也没写!
有结论吗?核心开发者是不是同意弄个动态加载?
bernard
2010-01-28
这家伙很懒,什么也没写!
这个特性一直在我们的预计开发列表中,如果关注RT-Thread的,应该早就会发现我们一直在关注这个特性。 shaolin已经在着手编写这部分代码了,因为考虑到这个对系统影响比较大,所以会在RT-Thread 0.3.0正式版发布后放到svn上(原来的0.3.0拉一个分支形成0.3.1,目前的代码做为0.4.x的开发主干进行)
bernard
2010-01-30
这家伙很懒,什么也没写!
因为这个话题就是关于动态模块加载的,把和shaolin的一些讨论放上来: ------------------------------ Qiu: 你原来考虑的动态模块有没有考虑模块间的依赖关系? bernard: 还没考虑 可以考虑建立一个依赖关系表 另外一个是,符号输出,做动态链接 Qiu: 我们现在的模块有点类似一个程序加载器 bernard: 是的,目前确实是这样 Qiu: 如果考虑做一个程序加载器的话,似乎可以不考虑用module来做吧 应该可以更简单 bernard: ? Qiu: 具体方式也是跟现在的类似,通过解析elf文件,链接未决的符号,然后创建一个任务,在任务中执行加载的程序 这中间也可以不需要模块的参与吧 bernard: 那么模块的话需要体现在什么方面? Qiu: 要使用模块的话,主要是各个模块之间的依赖性更容易处理吧。还有就是RTT的各个组件可以做成模块的方式,像文件系统可以是一个模块,需要文件系统时把这个模块加载进来,不需要就卸载。 bernard: 模块可以是一个动态链接库,向系统输出一些符号,让其他模块链接、调用 模块可以是一份驱动,注册成设备,供其他应用调用(当然内部也允许线程存在) 模块可以是一个份应用程序,具备主线程,主线程也能够创建出新的线程。当主线程出问题时,整个模块挂起 Qiu: 是的,如果是模块的话就需要相对复杂的结果,但如果仅做一个程序加载器就不需要考虑这么多了 bernard: 先做加载器,然后做成模块形式的吧 Qiu: 我理解的是论坛上有一些贴的需求貌似是只需要有一个动态程序加载的功能,这个和我们考虑的模块这个功能还是有点差别。 bernard: 是的。但动态程序加载器估计满足不了需求吧 Qiu: 这个运行一些应用程序应该没问题的吧,只要我们把所有内核和组件的符号导出来 bernard: 如果是这样,那么 模块可以是一个动态链接库,向系统输出一些符号,让其他模块链接、调用 这条就满足了 模块可以是一份驱动,注册成设备,供其他应用调用(当然内部也允许线程存在) 这个实际也满足了 关键是这个: 模块可以是一个份应用程序,具备主线程,主线程也能够创建出新的线程。当主线程出问题时,整个模块挂起 这个不容易满足 Qiu: 作为应用程序,具备主线程,主线程也能够创建出新的线程。这个用程序加载器的方式来做会有问题吗? bernard: 其实没什么问题 主要问题出在程序出错的情况下 出错后,需要修复现场 为了修复现场,可能就得预先做一些后备的工作。主要可能体现在内存上 Qiu: 模块在这上面能做哪些工作呢 bernard: 我原来的想法是,建立模块依赖关系,这个应该只需要形成一个模块依赖链表估计就可以了。 模块所有内存申请都放到一块自己的内存中去 例如,带主线程的模块,预先分配一个页的空间(4096) 当这个页用完时,再给它一个页的空间 当然页空间不一定是4096,可能会更大 而模块创建的所有内核对象,不再放在内核的对象容器中 而是挂在自己的对象容器里(这种方式是否可行,我现在还不能最后确定) 当模块退出时,把它所有分配的内存页都释放掉,这样就不会(或减少)带来内存方面的问题
bernard
2010-01-30
这家伙很懒,什么也没写!
Qiu: 恩,这个模块功能应该是相当强大的,对内核的改动也是有一些的。我是在考虑我们的系统到底先做什么,再做什么?如果先做一个程序加载器,功能要小的多,也不考虑它的符号导出功能,这样系统应该能够较快提供这样的功能。缺点是功能很弱。 从长远来看,肯定是需要module这个功能的 bernard: 需要做一个全局变量,记录当前的module是哪个 然后切换时检查下是否需要切换module 几乎一个module就有些相当于一个进程,只是这个进程的空间是和内核及其他应用程序是共享的 Qiu: 那我们就直接做module,module中也有程序加载器的功能,就不将它单独考虑了。 module中还的考虑父子线程等的关系了,这个至少有一套线程机制了 bernard: 如果是对象容器是每个模块独立的,那么子线程实际上就相当于一个内核对象,不需要考虑太多的了 Qiu: 还有libc库也可以放在外面吧,不过这样每个module都会用自己libc库函数 bernard: 是的 不过也不一定的,如果静态链接器做得好,可以去做链接 Qiu: 这个没有办法吧,如果是多个开发者开发不同的module,他们编译,链接生成module文件的时候这个libc库应该都分别链接进去了啊 他们编译,链接生成各自的module文件的时候,libc库应该都分别链接进各自的module了啊
xddl
2010-02-06
这家伙很懒,什么也没写!
动态加载的问题,看来确实很有些难度。 一直在搜索相关的算法,没什么结论。很多人讲到LINUX内核模块的加载,但是我一直怀疑这个办法在只有十几K内存的系统上该怎么弄? Qiu和 bernard讨论的办法,我还真没看懂,只有一个感觉:别弄成LINUX了,我们这个东西的运行平台,是只有十几K内存的小玩意,不是十几M内存。
xddl
2010-02-06
这家伙很懒,什么也没写!
对了,忘了说一句,最近的一个集抄项目,我已经在尝试使用RT-Thread一下了,还是蛮好的,虽然像GUI功能我并不需要。 我打算就这么用下去
xddl
2010-02-06
这家伙很懒,什么也没写!
动态加载的问题,也是根据用户提出的远程升级的要求(通过GPRS升级)提出来的。 我个人觉得,LINUX是不错,但是不能参考他,还是太大了,其实对于只有一点点内存的小型嵌入式系统,所谓动态加载,其实和远程应用升级有关系的,不然干嘛要动态加载? 对于linux或者windows的动态加载,是为了对应应用环境的多样性和易变性,他们的做法是为了适应千奇百怪的外设和应用需求,而小型嵌入式系统的动态加载,应该简单多 了,能对付一个局部的应用升级,别老跑来跑去的下载程序就好。 个人观点,也许太过功利,但是解决了这个,就很不得了了
bernard
2010-02-06
这家伙很懒,什么也没写!
>动态加载的问题,也是根据用户提出的远程升级的要求(通过GPRS升级)提出来的。 > >我个人觉得,LINUX是不错,但是不能参考他,还是太大了,其实对于只有一点点内存的小型嵌入式系统,所谓动态加载,其实和远程应用升级有关系的,不然干嘛要动态加载? > >对于linux或者windows的动态加载,是为了对应应用环境的多样性和易变性,他们的做法是为了适应千奇百怪的外设和应用需求,而小型嵌入式系统的动态加载,应该简单多 了,能对付一个局部的应用升级,别老跑来跑去的下载程序就好。 > >个人观点,也许太过功利,但是解决了这个,就很不得了了 --- 小型的系统,例如STM32,我们计划是不支持动态加载的 [s:186] 主要基于两点考虑的: 1. 加载的模块全部都是在RAM中运行,占用RAM是会有一些的。而STM32上外扩的SRAM速度非常慢,运行效率也会非常低。 2. Cortex-M3上生成位置无关的代码,目前armcc不支持。
撰写答案
登录
注册新账号
关注者
0
被浏览
10.2k
关于作者
xddl
这家伙很懒,什么也没写!
提问
3
回答
9
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
4
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部