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
813357177.380.png 813357177.391.png 813357177.402.png 813357177.413.png 813357177.001.png 813357177.012.png 813357177.023.png 813357177.034.png 813357177.045.png 813357177.056.png 813357177.067.png 813357177.078.png 813357177.089.png 813357177.100.png 813357177.111.png 813357177.122.png 813357177.133.png 813357177.144.png 813357177.155.png 813357177.166.png 813357177.176.png 813357177.187.png 813357177.198.png 813357177.209.png 813357177.220.png 813357177.231.png 813357177.242.png 813357177.253.png 813357177.264.png 813357177.275.png 813357177.286.png 813357177.297.png 813357177.308.png 813357177.319.png 813357177.330.png 813357177.341.png 813357177.352.png 813357177.363.png 813357177.364.png 813357177.365.png 813357177.366.png 813357177.367.png 813357177.368.png 813357177.369.png 813357177.370.png 813357177.371.png 813357177.372.png 813357177.373.png 813357177.374.png 813357177.375.png 813357177.376.png 813357177.377.png 813357177.378.png 813357177.379.png 813357177.381.png 813357177.382.png 813357177.383.png 813357177.384.png 813357177.385.png 813357177.386.png 813357177.387.png 813357177.388.png 813357177.389.png 813357177.390.png 813357177.392.png 813357177.393.png 813357177.394.png 813357177.395.png 813357177.396.png 813357177.397.png 813357177.398.png 813357177.399.png 813357177.400.png 813357177.401.png 813357177.403.png 813357177.404.png 813357177.405.png 813357177.406.png 813357177.407.png 813357177.408.png 813357177.409.png 813357177.410.png 813357177.411.png 813357177.412.png 813357177.414.png 813357177.415.png 813357177.416.png 813357177.417.png 813357177.418.png 813357177.419.png 813357177.420.png 813357177.421.png 813357177.422.png 813357177.423.png 813357177.002.png 813357177.003.png 813357177.004.png 813357177.005.png 813357177.006.png 813357177.007.png 813357177.008.png 813357177.009.png 813357177.010.png 813357177.011.png 813357177.013.png 813357177.014.png 813357177.015.png 813357177.016.png 813357177.017.png 813357177.018.png 813357177.019.png 813357177.020.png 813357177.021.png 813357177.022.png 813357177.024.png 813357177.025.png 813357177.026.png 813357177.027.png 813357177.028.png 813357177.029.png 813357177.030.png 813357177.031.png 813357177.032.png 813357177.033.png 813357177.035.png 813357177.036.png 813357177.037.png 813357177.038.png 813357177.039.png 813357177.040.png 813357177.041.png 813357177.042.png 813357177.043.png 813357177.044.png 813357177.046.png 813357177.047.png 813357177.048.png 813357177.049.png 813357177.050.png 813357177.051.png 813357177.052.png 813357177.053.png 813357177.054.png 813357177.055.png 813357177.057.png 813357177.058.png 813357177.059.png 813357177.060.png 813357177.061.png 813357177.062.png 813357177.063.png 813357177.064.png 813357177.065.png 813357177.066.png 813357177.068.png 813357177.069.png 813357177.070.png 813357177.071.png 813357177.072.png 813357177.073.png 813357177.074.png 813357177.075.png 813357177.076.png 813357177.077.png 813357177.079.png 813357177.080.png 813357177.081.png 813357177.082.png 813357177.083.png 813357177.084.png 813357177.085.png 813357177.086.png 813357177.087.png 813357177.088.png 813357177.090.png 813357177.091.png 813357177.092.png 813357177.093.png 813357177.094.png 813357177.095.png 813357177.096.png 813357177.097.png 813357177.098.png 813357177.099.png 813357177.101.png 813357177.102.png 813357177.103.png 813357177.104.png 813357177.105.png 813357177.106.png 813357177.107.png 813357177.108.png 813357177.109.png 813357177.110.png 813357177.112.png 813357177.113.png 813357177.114.png 813357177.115.png 813357177.116.png 813357177.117.png 813357177.118.png 813357177.119.png 813357177.120.png 813357177.121.png 813357177.123.png 813357177.124.png 813357177.125.png 813357177.126.png 813357177.127.png 813357177.128.png 813357177.129.png 813357177.130.png 813357177.131.png 813357177.132.png 813357177.134.png 813357177.135.png 813357177.136.png 813357177.137.png 813357177.138.png 813357177.139.png 813357177.140.png 813357177.141.png 813357177.142.png 813357177.143.png 813357177.145.png 813357177.146.png 813357177.147.png 813357177.148.png 813357177.149.png 813357177.150.png 813357177.151.png 813357177.152.png 813357177.153.png
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
813357177.154.png 813357177.156.png 813357177.157.png 813357177.158.png 813357177.159.png 813357177.160.png 813357177.161.png 813357177.162.png 813357177.163.png 813357177.164.png 813357177.165.png
 
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
813357177.167.png 813357177.168.png 813357177.169.png 813357177.170.png 813357177.171.png 813357177.172.png 813357177.173.png 813357177.174.png 813357177.175.png 813357177.177.png 813357177.178.png 813357177.179.png 813357177.180.png 813357177.181.png 813357177.182.png 813357177.183.png 813357177.184.png 813357177.185.png 813357177.186.png 813357177.188.png 813357177.189.png 813357177.190.png 813357177.191.png 813357177.192.png 813357177.193.png 813357177.194.png 813357177.195.png 813357177.196.png 813357177.197.png 813357177.199.png 813357177.200.png 813357177.201.png 813357177.202.png 813357177.203.png 813357177.204.png 813357177.205.png 813357177.206.png 813357177.207.png 813357177.208.png 813357177.210.png 813357177.211.png 813357177.212.png 813357177.213.png 813357177.214.png 813357177.215.png 813357177.216.png 813357177.217.png 813357177.218.png 813357177.219.png 813357177.221.png 813357177.222.png 813357177.223.png 813357177.224.png 813357177.225.png 813357177.226.png 813357177.227.png 813357177.228.png 813357177.229.png 813357177.230.png 813357177.232.png 813357177.233.png 813357177.234.png 813357177.235.png 813357177.236.png 813357177.237.png 813357177.238.png 813357177.239.png 813357177.240.png 813357177.241.png 813357177.243.png 813357177.244.png 813357177.245.png 813357177.246.png 813357177.247.png 813357177.248.png 813357177.249.png 813357177.250.png 813357177.251.png 813357177.252.png 813357177.254.png 813357177.255.png 813357177.256.png 813357177.257.png 813357177.258.png 813357177.259.png 813357177.260.png 813357177.261.png 813357177.262.png 813357177.263.png 813357177.265.png 813357177.266.png 813357177.267.png 813357177.268.png 813357177.269.png 813357177.270.png 813357177.271.png 813357177.272.png 813357177.273.png 813357177.274.png 813357177.276.png 813357177.277.png 813357177.278.png 813357177.279.png 813357177.280.png 813357177.281.png 813357177.282.png 813357177.283.png 813357177.284.png 813357177.285.png 813357177.287.png 813357177.288.png 813357177.289.png 813357177.290.png 813357177.291.png 813357177.292.png 813357177.293.png 813357177.294.png 813357177.295.png 813357177.296.png 813357177.298.png 813357177.299.png 813357177.300.png 813357177.301.png 813357177.302.png 813357177.303.png 813357177.304.png 813357177.305.png 813357177.306.png 813357177.307.png 813357177.309.png 813357177.310.png 813357177.311.png 813357177.312.png 813357177.313.png 813357177.314.png 813357177.315.png 813357177.316.png 813357177.317.png 813357177.318.png 813357177.320.png 813357177.321.png 813357177.322.png 813357177.323.png 813357177.324.png 813357177.325.png 813357177.326.png 813357177.327.png 813357177.328.png 813357177.329.png 813357177.331.png 813357177.332.png 813357177.333.png 813357177.334.png 813357177.335.png 813357177.336.png 813357177.337.png 813357177.338.png 813357177.339.png 813357177.340.png 813357177.342.png 813357177.343.png 813357177.344.png 813357177.345.png 813357177.346.png 813357177.347.png 813357177.348.png 813357177.349.png 813357177.350.png 813357177.351.png 813357177.353.png 813357177.354.png 813357177.355.png 813357177.356.png 813357177.357.png 813357177.358.png 813357177.359.png 813357177.360.png 813357177.361.png 813357177.362.png
Zgłoś jeśli naruszono regulamin