Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread Module
发布于 2008-09-01 22:24:50 浏览:14977
订阅该版
RT-Thread下一项远期(0.4.0+)feature 一套类似于linux kernel module,netbsd lkm的模块机制,以摆脱RT-Thread动态功能不佳的结构,使得添加功能模块更灵活化(当然最关键的是目前RT-Thread很多外部设施已经有一定基础了)。 此帖主要用于讨论它的设计框架。 由于RT-Thread依赖于GNU GCC编译器,基本上最后生成的是ELF映像文件。同样RT-Thread Module也将是一个ELF文件,最终到RT-Thread OS层面将被load到一个地址上,并分配所需要的一些内存空间放置正文段,数据段等。ELF loader是其中需要实现的一块功能。
查看更多
17
个回答
默认排序
按发布时间排序
rurality
2008-09-02
这家伙很懒,什么也没写!
Load到内核模块的部分,我觉得很不错,这样大大提高了内核的动态性。使内核的能够提升一个档次。
bernard
2008-09-02
这家伙很懒,什么也没写!
呵呵,关键是如何设计、实现它。 如下几步肯定是需要的: 1、ELF文件加载 * 获得ELF文件中.text,.bss,.data等段的大小,然后从内存中分配连续的这么大的空间(如果启用MMU,可以不是连续的内存空间) * 加载ELF文件,实质上就是复制出一个bin文件出来,但如何处理可重载的符号信息,这是一个问题。 * 在加载ELF文件的过程中,必需对一些信息做确认,RT-Thread RTOS的版本号(因为kernel module基本上类似于一个动态链接的过程,符号表不相对应,加载是不成功的) 2、定义出module数据结构,一个module数据结构在加载一个module时创建并初始化。 3、。。。 4、。。。 欢迎补充。
rurality
2008-09-02
这家伙很懒,什么也没写!
我觉得,另外,还要考虑内核为这种加载,提供支持。 比如,当这些模块要访问内核的符号,如何处理。 另外,模块需要一定的运行空间,比如堆栈如何分配,等等。
bernard
2008-09-02
这家伙很懒,什么也没写!
>我觉得,另外,还要考虑内核为这种加载,提供支持。 >比如,当这些模块要访问内核的符号,如何处理。 >另外,模块需要一定的运行空间,比如堆栈如何分配,等等。 --- 这些都没问题的, 访问内核符号,为什么说这个类似于一个动态链接的过程,因为在加载的时候需要把悬空的地址都补上。倒是,如果模块用了另一个模块的信息,这个可能有些麻烦。 模块有个入口地址,初步有两种方式: 1、用加载任务的栈来运行初始入口函数,这样默认栈就放在了加载任务上,而后,如果入口函数需要创建任务,那么直接动态分配或静态分配都没问题。 2、新建一个任务来运行初始入口函数,其他的和上面的相同。
rurality
2008-09-03
这家伙很懒,什么也没写!
我对于RT-Thread的内核机理,还不是很熟悉。 不过,我可以做做ELF文件加载部分。 正好,我的内核也需要这部分功能。
bernard
2008-09-04
这家伙很懒,什么也没写!
好啊!不过ELF文件加载的关键部分还是符号链接的过程,以解决那些悬而未决的符号访问
bernard
2008-09-06
这家伙很懒,什么也没写!
>呵呵,关键是如何设计、实现它。 > >如下几步肯定是需要的: >1、ELF文件加载 > * 获得ELF文件中.text,.bss,.data等段的大小,然后从内存中分配连续的这么大的空间(如果启用MMU,可以不是连续的内存空间) > * 加载ELF文件,实质上就是复制出一个bin文件出来,但如何处理可重载的符号信息,这是一个问题。 > * 在加载ELF文件的过程中,必需对一些信息做确认,RT-Thread RTOS的版本号(因为kernel module基本上类似于一个动态链接的过程,符号表不相对应,加载是不成功的) > >2、定义出module数据结构,一个module数据结构在加载一个module时创建并初始化。 >3、。。。 >4、。。。 --- 3、对于一个设备驱动,当register一个驱动时,能够正常或立即加载并初始化设备(或者主动初始化?) 4、module的入口位置: int rtm_main(int argc, char** argv) { return ; } 默认的退出函数: rtm_exit 5、module的管理 初始化 rtm_system_init 加载 (加载一个module(elf格式object),载入后并不自动运行入口函数) rtm_load 卸载 rtm_unload 运行 (运行入口函数) rtm_exec module信息包括 name, os version, exported symbol, description, depend modules - thread list - ipc object list - timer list - file descriptor list etc...
shaolin
2008-12-09
这家伙很懒,什么也没写!
1.符号引用的话应该是通过类似动态链接库的方式,用elf的got和plt section来解决。 2.对于设备驱动程序,应该好处理,在module初始化的时候把设备控制块注册到rtt的设备管理器中, 3.对于其他模块怎么处理,如文件系统,是否也提取一个包含open,read,write,close的控制块, 或者把这些作为单独的函数导入到内核符号表中。 4.更进一步,如果把应用程序也作为一个module加载,怎么处理。 5.加入动态加载模块会增加rtt体积和复杂度,既然复杂了,那是否考虑引入进程,有进程后,动态加载似乎会方便些
bernard
2008-12-12
这家伙很懒,什么也没写!
引入进程感觉比较麻烦,而且引入了进程后对于实时性可能有个不小的影响。 对于ARM,引入进程的话,基本上进程处于user模式下运行,而user模式下的代码要使用内核服务基本上得考虑swi,也就是用户态和核心态分开。分开后另外一个考虑就是是否引入虚存管理,这将是一个大的话题了。 动态加载也可以研究研究PSP的做法。
shaolin
2010-02-03
这家伙很懒,什么也没写!
如果应用程序调用内核函数不通过SWI软中断方式,通过动态链接未决符号的方式来做,那么它必须在使用内核函数之前通过export_dll方式来申明,这样使用的内核函数多了,就不太能接受了。 如果不使用SWI软中断方式调用,那考虑使用BL之类的跳转指令如何?不过这个就需要约定符号表在内核中的绝对地址了。
撰写答案
登录
注册新账号
关注者
0
被浏览
15k
关于作者
bernard
这家伙很懒,什么也没写!
提问
414
回答
5940
被采纳
76
关注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
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
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
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部