port_rtems_to_s3c2410.pdf
(
271 KB
)
Pobierz
RTEMSonS3C2410
移植备忘录
编写人:
xiajiashan
编写时间
2007-5-27 12:08:13 PM
RTEMS on S3C2410
移植备忘录
移植备忘录
目录
目录
目目录
1
:
RTEMS
开发环境建立
..........................................................................................................2
1.1
开发环境建立前的准备工作
.........................................................................................2
1.2
建立
GNU
工具链
.........................................................................................................2
1.3 Load Image ....................................................................................................................2
2
:修改
s3c2400==>s3c2410......................................................................................................2
2.1 register
肯定不同,需要修改
........................................................................................2
2.2
然后从链接脚本入手
....................................................................................................2
3
:对
linkcmds
的理解
...............................................................................................................3
3.1
:
ENTRY(_start)
这一句很重要
............................................................................3
3.2
:
section
的分配
...................................................................................................3
4
:对
start.S
的理解
(
位于
c/src/lib/libbsp/arm/gp32/start)...........................................................3
6
:多任务怎么开始
....................................................................................................................4
7
:系统初始化及多任务开始流程
(
对应到函数调用顺序
) ........................................................4
8
:系统是怎么实现驱动的
........................................................................................................4
9
:从
hello world
入手
...............................................................................................................5
9.1
需要改动的地方
............................................................................................................5
9.2
需要确认的地方:
........................................................................................................5
9.3
调试方法
.......................................................................................................................6
10
:调试
hello world
时碰到的问题
...........................................................................................6
11
:调试网络时碰到的问题
......................................................................................................7
11.1 MMU ..............................................................................................................................7
11.2
照葫芦画瓢
........................................................................................................................8
11.3
需要添加的东东
.................................................................................................................9
11.4 ping.................................................................................................................................11
11.5 ping
不稳定
....................................................................................................................11
这是本人的草率之作,仅作备忘而已,如有错误或读者发现需要改进之处,还请各位告之。
MSN
:
13872051302@monternet.com
Email
:
ximenpiaoxue4016@sina.com
(
欢迎交流
)
第
1
页
RTEMSonS3C2410
移植备忘录
编写人:
xiajiashan
编写时间
2007-5-27 12:08:13 PM
1
:
RTEMS
开发环境建立
开发环境建立
开发环境建立
1.1
开发环境建立前的准备工作
开发环境建立前的准备工作
开发环境建立前的准备工作
因为
RTEMS
开发环境主要用的是
GNU
的工具链,所以需要一台装有
Linux
的
HOST.
1.2
建立
工具链
的详细步骤可以参考个版本的
doc
中的
start.pdf
,或者参考
www.rtems.net
中
ray
的
rtems
连载。
建建立
建立
GNU
工具链
工具链
1.3 Load Image
烧写
u-boot
到
s3c2410 norFlash
中
(
也可以是
nandFlash)
,详见
s3c2410
开发板套件资料。
烧写成功后,就可以通过FTP下载编译后的
bin
文件到板子上运行。
(
小技巧,为了使编译后直
接生成
bin
文件,可以在
gp32.cfg
文件中做如下修改:
define make-exe
$(LINK.c) $(AM_CFLAGS) $(AM_LDFLAGS) -o $@ \
$(LINK_OBJS) $(LINK_LIBS)
$(OBJCOPY) -O binary $(basename $@).exe $(basename $@).bin
$(NM) -g -n $(basename $@).exe > $(basename $@).elf
$(SIZE) $(basename $@).exe
Endef)
2
:修改
修修改
修改
s3c2400==>s3c2410
因为用的是
rtems-4.6.99.3
自带的
bsp(gp32)
,它针对的
cpu
是
s3c2400
,我们要在
s3c2410
上调试,
有很很多需要修改的地方。
2.1 register
肯定不同
肯定不同
,需要修改
需要修改
在
s3c2410
开发板套件资料的
armsys_2410/hardware_test_pro
中找到
s3c2410.h
,与
c/src/lib/
libcpu/arm/s3c2410/include
中的
s3c2400.h
进行比较,添加
s3c2400
中没有的
register
。
2.2
然后从链接脚本入手
然后从链接脚本入手
,
(
编译器就是通过它来组织
code
和分配
memery
的
)
,
所以找到
/c/src/lib/libbsp/arm/gp32/startup/linkcmds
,修改
sdram : ORIGIN = 0x30000000, LENGTH = 64M
和
_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x30000000;
_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 64M;
三个地方。
然后从链接脚本入手
这是本人的草率之作,仅作备忘而已,如有错误或读者发现需要改进之处,还请各位告之。
MSN
:
13872051302@monternet.com
Email
:
ximenpiaoxue4016@sina.com
(
欢迎交流
)
第
2
页
RTEMSonS3C2410
移植备忘录
编写人:
xiajiashan
编写时间
2007-5-27 12:08:13 PM
3
:
对
linkcmds
的理解
的理解
3.1
这一句很重要
,相当与
ads
中的
entry point
,既
go
命令就从这里开
始
;_start
是一个标号,在
c/src/lib/libbsp/arm/gp32/start/start.S
中定义
.
:
ENTRY(_start)
这一句很重要
这一句很重要
3.2
:
section
的分配
的分配
的分配
linkcmds
把编译后的
bin
文件主要分成
.base,.text,.data,.bss
四个区域
load
到
memery.
即:
.base-->0x30000000~0x30000100,
主要存放
vector table;
.text-->
紧接着
0x30000100
存放
,
主要存放
code;
.data-->
紧接着
.text,
主要存放已被初始化的全局变量
;
.bss-->
紧接着
.data,
主要存放没有被初始化的全局变量
;(
系统自动初始化为
0)
4
:
对
start.S
的理解
的理解
的理解
(
位于
位位于
位于
c/src/lib/libbsp/arm/gp32/start)
首先找到
_start
标号
,
程序往下执行,主要完成以下工作:
5
及各部件的
RTEMS
内核的引入主要是根据两个表(结构体)
:
:
RTEMS
内核是怎么初始化
内核是怎么初始化
内核是怎么初始化
BSP
,
CPU
及各部件的
及各部件的
这是本人的草率之作,仅作备忘而已,如有错误或读者发现需要改进之处,还请各位告之。
MSN
:
13872051302@monternet.com
Email
:
ximenpiaoxue4016@sina.com
(
欢迎交流
)
第
3
页
RTEMSonS3C2410
移植备忘录
编写人:
xiajiashan
编写时间
2007-5-27 12:08:13 PM
6
:多任务怎么开始
多任务怎么开始
RTEMS
是通过下面两个函数启动多任务的:
rtems_initialize_executive_early
初始化
RTEMS
但是不开始多任务;
rtems_initialize_executive_late
完成初始化开始多任务
;
rtems_initialize_executive_early
函数原形为
:
rtems_interrupt_level rtems_initialize_executive_early(
rtems_configuration_table *configuration_table,
rtems_cpu_table *cpu_table)
其 中 的 两 个 参 数 就 为 上 面 提 到 到 了 两 个 配 置 表
.
调 用
rtems_initialize_executive_early
时将传入
BSP_Configuration
,
Cpu_table
这两个表
.
rtems_initialize_executive_late
的函数原形为
:
void
批注
批批注
批注
[x1]:
见
cpukit/sapi/src/Exinit.c
rtems_initialize_executive_late(rtems_interrupt_level
bsp_level);(
见
cpukit/sapi/src/Exinit.c)
其入口参数即调用
rtems_initialize_executive_early
函数的返回值
.
7
:系统初始化及多任务开始流程
系统初始化及多任务开始流程
系统初始化及多任务开始流程
(
对应到函数调用顺序
对应到函数调用顺序
对应到函数调用顺序
)
bl boot_card /*start.S*/
初始化
BSP_Configuration,Cpu_table,
两个表
(Cpu_table,
是通过调用
bsp_start
实现的
)
c_rtems_main
函数原形
见
c/src/lib/libbsp/
shared/Main.c
bsp_isr_level =rtems_initialize_executive_early( &BSP_Configuration, &Cpu_table );
rtems_initialize_executive_late( bsp_isr_level );(
是通过在
boot_card
调用函数
c_rtems_main
实现的
)
多任务开始
8
:系统是怎么实现驱动的
系统是怎么实现驱动的
rtems
是通过一个初始化任务
Init
来来初始化
bsp,cpu,OS
的
.
用户在应用程序中定义了
Init
任务
后,必须得有
#define CONFIGURE_INIT
这条语句,
rtems
就是通过判断用户是否定义了
#define
CONFIGURE_INIT
来启动多任务并实现驱动的。
在
cpukit/sapi/include/confdefs.h
中,系统通过判断用户是否定义了
CONFIGURE_INIT
来初始化
Configuration
配置表,
Configuration_RTEMS_API
配置表
.
如果用户应用程序中要用到控制台
,
通常是串口打印信息则必须在应用程序中定义
#define
这是本人的草率之作,仅作备忘而已,如有错误或读者发现需要改进之处,还请各位告之。
MSN
:
13872051302@monternet.com
Email
:
ximenpiaoxue4016@sina.com
(
欢迎交流
)
第
4
页
RTEMSonS3C2410
移植备忘录
编写人:
xiajiashan
编写时间
2007-5-27 12:08:13 PM
CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
,
在
confdefs.h
中
,
系
统
通
过
判
断
用
户
是
否
定
义
了
CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
来初始化串口。
同 样 , 如 果 用 户 应 用 程 序 中 要 用 到 时 钟 , 则 必 须 在 应 用 程 序 中 定 义
#define
CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER,
在
confdefs.h
中系统通过判断用户是否定义
了
CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
来初始化
clock.
所 有 的 驱 动 放 在 一 个 驱 动 表 结 构 体 中 , 如
confdefs.h
中 的
rtems_driver_address_table
Device_drivers,
而这个表地址在
Configuration
配置表中引入
.
在
Device_drivers
中放着各驱动的入口如:
CONSOLE_DRIVER_TABLE_ENTRY
, 而
CONSOLE_DRIVER_TABLE_ENTRY
定 义 在
cpukit/libcsupport/include/console.h
中
,CONSOLE_DRIVER_TABLE_ENTRY
其实是对
console
一系列函
数调用
.
注意:上述一切初始化动作是通过在应用程序中预定义的,所以在预编译的时候就初始化了
.
所以在调用
rtems_initialize_executive_early
时,通过
&BSP_Configuration, &Cpu_table
这两个参数可以
对
BSP,CPU,OS,
各驱动进行初始化。
9
:
从
hello world
入手
入手
入入手
首先,需要理清
console
驱动的函数调用关系
,
其主要流程如下:
9.1
需要改动的地方
:
①
c/src/lib/libcpu/arm/s3c2410/include/s3c2400.h
相应
register
的修改
.
②因为要使用串口功能,所以需要在应用程序中添加端口初始化函数,来初始化各端口
,
主要初始
化
Port F,H,
端口
F
为
LED
显示功能所用,端口
H
为串口打印功能所用
.
(可以直接复制
s3c2410
开发板套件资料的
armsys_2410/hardware_test_pro
中的
Port_Init
函数)
③在
c/src/lib/libbsp/arm/gp32/startup/Bspstart.c,bsp_start_default
函数中添加
bank0-bank7
的相关
register
的设置
④在
start.S(
见
c/src/lib/libbsp/arm/gp32/start)
中添加
LED
显示子程序
.
需要改动的地方
9.2
需要确认的地方
需要确认的地方
:
①在
c/src/lib/libbsp/arm/gp32/console/Uart.c
中对照
s3c2410 datasheet
确信各
register
这是本人的草率之作,仅作备忘而已,如有错误或读者发现需要改进之处,还请各位告之。
MSN
:
13872051302@monternet.com
Email
:
ximenpiaoxue4016@sina.com
(
欢迎交流
)
第
5
页
Plik z chomika:
ekirdwasto
Inne pliki z tego folderu:
Analog_Interfacing_to_Embedded_Microprocessors.pdf
(2819 KB)
CMP[1].Books.Embedded.Systems.Dictionary.eBook-LiB.chm
(5011 KB)
Building Embedded Linux Systems.chm
(1032 KB)
CMP Books - Practical Statecharts in C&C++ Quantum Programming for Embedded Systems.pdf
(2391 KB)
Building Embedded Linux Systems.pdf
(1415 KB)
Inne foldery tego chomika:
AVR
AVR_C
AVR-y i ARM-y
Elektronika dla wszystkich
Elektronika Praktyczna
Zgłoś jeśli
naruszono regulamin