Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rt-thread 目录调整建议
发布于 2012-03-11 13:17:24 浏览:3280
订阅该版
以arm架构为例,目前 rt-thread 在 libcpu/arm 目录下放置 common、s3c24x0、cortex-m3 等目录,在此处 s3c24x0、cortex-m3 实际上不是同一个概念:s3c24x0 是 SoC、而 cortex-m3 是 CPU。建议将目录的层次结构如u-boot类似组织为 arch/$(ARCH)/$(CPU)/$(SOC),在arch/$(ARCH)/common 放置相同 $(ARCH) 的公共文件,在arch/$(ARCH)/$(CPU)/common 放置相同 $(CPU) 的公共文件。这样调整后 stm32f10x 的固件库将可以放置在 arch/arm/cortex-m3/stm32f10x 目录内,不需要每个bsp/$(BOARD)内都存在。 新建 app 目录,放置应用程序 $(APP)。app/$(APP) 包含 source、build、doc 等目录(源码、编译输出和文档)和构建文件 SConstruct。$(ARCH)、$(CPU)、$(SOC)、$(APP) 等变量在 SConstruct 内指定。这样在 bsp/$(BOARD) 中应用实例可移至 app/$(APP)/source。这样在学习和使用 rt-thread 时只需要拷贝 app 目录内的使用同一 $(BOARD) 的目录进行修改。 bsp/$(BOARD)/rtconfig.py 其实用户根据自己的机器设置编译器的,不需要每个目录都存在,可以在 building.py 中增加一个函数 InitEnv() 函数,在 SConstruct 中调用该函数,用户编译器路径等有变化时只需修改该函数。 以上调整后 SConstruct 文件和部分 SConscript 文件需要做简单修改。 附:调整后的目录结构如下(shenzhou-iv是神舟IV开发板,stm32f107核),调整后的 rt-thread 1.0.0 测试代码发不上来。 . ├── app │ ├── mini2440 │ │ ├── build │ │ ├── doc │ │ ├── SConstruct │ │ └── source │ ├── SConscript │ └── shenzhou-iv │ ├── build │ ├── doc │ ├── SConstruct │ └── source ├── arch │ ├── arm │ │ ├── arm920t │ │ │ ├── at91 │ │ │ ├── common │ │ │ ├── SConscript │ │ │ └── s3c24x0 │ │ ├── common │ │ ├── cortex-m3 │ │ │ ├── common │ │ │ ├── lm3s │ │ │ ├── stm32f10x │ │ │ └── SConscripts │ │ └── SConscript │ ├── mips │ └── SConscript ├── board │ ├── mini2440 │ │ ├── board.c │ │ ├── ...... │ │ ├── SConscript │ ├── SConscript │ └── shenzhou-iv │ ├── board.c │ ├── ...... │ ├── SConscript .........
查看更多
5
个回答
默认排序
按发布时间排序
aozima
2012-03-11
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>s3c24x0 是 SoC、而 cortex-m3 是 CPU --- 原来是有stm32 lpc17xx等目录,后发现各家cortex-m3在内核兼容性极高(99.99%),所以合并了。 如果必要,24x0 SAM9也可合并,但目前看来暂时并没这个需求。 >在arch/$(ARCH)/$(CPU)/common 放置相同 $(CPU) 的公共文件。这样调整后 stm32f10x 的固件库将可以放置在 arch/arm/cortex-m3/stm32f10x 目录内,不需要每个bsp/$(BOARD)内都存在。 --- google svn并不打算放太多的跟板相关的目录,这样,固件库虽然在bsp,但因为同类芯片只有一个,所以并没有重复。(107是个特例,鉴于入门者很多,大家都不愿意去修改配置生成工程,所以107有一个默认带网络的工程) >bsp/$(BOARD)/rtconfig.py 其实用户根据自己的机器设置编译器的,不需要每个目录都存在,可以在 building.py 中增加一个函数 InitEnv() 函数,在 SConstruct 中调用该函数,用户编译器路径等有变化时只需修改该函数。 --- 现在,不同的CPU,直接修改rtconfig.py就可以了。与增加一个函数再修改这个函数,应该是一样的。
bernard
2012-03-11
这家伙很懒,什么也没写!
这块调整不会太多了,目前这样挺好的,后续主要是components目录的调整。 再然后主要是eclipse工具的应用了
RoverX
2012-03-11
这家伙很懒,什么也没写!
>>s3c24x0 是 SoC、而 cortex-m3 是 CPU > >--- > > >原来是有stm32 lpc17xx等目录,后发现各家cortex-m3在内核兼容性极高(99.99%),所以合并了。 >如果必要,24x0 SAM9也可合并,但目前看来暂时并没这个需求。 > >>在arch/$(ARCH)/$(CPU)/common 放置相同 $(CPU) 的公共文件。这样调整后 stm32f10x 的固件库将可以放置在 arch/arm/cortex-m3/stm32f10x 目录内,不需要每个bsp/$(BOARD)内都存在。 > >--- > > >google svn并不打算放太多的跟板相关的目录,这样,固件库虽然在bsp,但因为同类芯片只有一个,所以并没有重复。(107是个特例,鉴于入门者很多,大家都不愿意去修改配置生成工程,所以107有一个默认带网络的工程) > >>bsp/$(BOARD)/rtconfig.py 其实用户根据自己的机器设置编译器的,不需要每个目录都存在,可以在 building.py 中增加一个函数 InitEnv() 函数,在 SConstruct 中调用该函数,用户编译器路径等有变化时只需修改该函数。 > >--- > > >现在,不同的CPU,直接修改rtconfig.py就可以了。与增加一个函数再修改这个函数,应该是一样的。 --- 在 building.py 中增加一个函数 InitEnv() 变动时只需修改一处,而放在 bsp/$(BOARD)/需要每个都修改。 改动后的 SConstrust 文件 ``` ARCH = 'arm' CPU = 'arm920t' SOC = 's3c24x0' BOARD = 'mini2440' APP = 'mini2440' LD_SCRIPT = 'mini2440_ram.ld' TARGET_NAME = APP CROSS_TOOL = 'gcc' BUILD = 'debug' RT_USING_LCD_TYPE = 'PNL_N35' Export('ARCH') Export('CPU') Export('SOC') Export('BOARD') Export('APP') Export('RT_USING_LCD_TYPE') import os import sys if os.getenv('RTT_ROOT'): RTT_ROOT = os.getenv('RTT_ROOT') else: RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') BLD_ROOT = RTT_ROOT + '/app/' + APP + '/build' sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] from building import * DEVICE = ' -mcpu=arm920t' LD_SCRIPT = RTT_ROOT + '/' + 'board/' + BOARD + '/' + LD_SCRIPT TextBase = '0x30000000' env = Environment( tools = ['mingw'], CROSS_TOOL = CROSS_TOOL, PLATFORM = '', EXEC_PATH = '', TARGET_EXT = '', AS = '', CC = '', AR = '', LINK = '', ASFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' + ' -DTEXT_BASE=' + TextBase, CCFLAGS = DEVICE, ARFLAGS = '-rc', LINKFLAGS = ' -nostartfiles -Wl,--gc-sections,-Map=build/' + TARGET_NAME + '.map,-cref,-u,_start -T' + LD_SCRIPT + ' -Ttext ' + TextBase, POST_ACTION = '' ) InitEnv(env, CROSS_TOOL, TARGET_NAME) env.PrependENVPath('PATH', env['EXEC_PATH']) TARGET = 'build/' + TARGET_NAME + '.' + env['TARGET_EXT'] Export('RTT_ROOT') Export('BLD_ROOT') Export('env') # prepare building environment objs = PrepareBuilding(env, RTT_ROOT) # build program env.Program(TARGET, objs) # end building EndBuilding(TARGET) def InitEnv(env, cross_tool, tgt_name): TARGET_EXT = '' PLATFORM = '' EXEC_PATH = '' CC = '', AS = '', AR = '', AR = '', LINK = '' SIZE = '' OBJDUMP = '' OBJCPY = '' POST_ACTION = '' EXEC_HOME = '' if cross_tool == 'gcc': PLATFORM = 'gcc' EXEC_HOME = '/home/developer/tools/arm-none-eabi-gcc/4.5.2' EXEC_PATH = EXEC_HOME + '/bin' TARGET_EXT = 'elf' PREFIX = 'arm-none-eabi-' CC = PREFIX + 'gcc' AS = PREFIX + 'gcc' AR = PREFIX + 'ar' LINK = PREFIX + 'gcc' SIZE = PREFIX + 'size' OBJDUMP = PREFIX + 'objdump' OBJCPY = PREFIX + 'objcopy' POST_ACTION = OBJCPY + ' -O binary build/' + tgt_name + '.' + TARGET_EXT + ' build/' + tgt_name + '.bin ' + SIZE + ' build/' + tgt_name + '.' + TARGET_EXT elif cross_tool == 'keil': PLATFORM = 'armcc' EXEC_HOME = 'E:/Keil' EXEC_PATH = EXEC_HOME + '/arm/bin40/' TARGET_EXT = 'axf' CC = 'armcc' AS = 'armasm' AR = 'armar' LINK = 'armlink' POST_ACTION = 'fromelf --bin build/' + tgt_name + '.' + TARGET_EXT + ' --output build/' + tgt_name + '.bin fromelf -z build/' + tgt_name + '.' + TARGET_EXT elif cross_tool == 'iar': PLATFORM = 'iar' EXEC_HOME = 'E:/Program Files/IAR Systems/Embedded Workbench 6.0' EXEC_PATH = EXEC_HOME + '/arm/bin40/' TARGET_EXT = 'out' CC = 'iccarm' AS = 'iasmarm' AR = 'iarchive' LINK = 'ilinkarm' POST_ACTION = '' env['PLATFORM'] = PLATFORM env['EXEC_PATH'] = EXEC_PATH env['TARGET_EXT'] = TARGET_EXT env['CC'] = CC env['AS'] = AS env['AR'] = AR env['LINK'] = LINK env['SIZE'] = SIZE env['OBJDUMP'] = OBJDUMP env['OBJCPY'] = OBJCPY env['POST_ACTION'] = POST_ACTION ``` 这样改动很小的,就增加几个2个简单的 SConscript ,以前 SConscript 文件中的 rtconfig.CPU 等 改成 CPU
bernard
2012-03-11
这家伙很懒,什么也没写!
以后的方式是,一个文件都不修改
撰写答案
登录
注册新账号
关注者
0
被浏览
3.3k
关于作者
RoverX
这家伙很懒,什么也没写!
提问
1
回答
2
被采纳
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
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
2
freemodbus主机在freertos的适配,参考rtthread例程
3
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
4
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部