RTEMS 移植到 sbc2440 的简要笔记

首先安装编译链,还有编译一下 smdk2410 和hello例子,保证编译通过再进行移植。

一, rtems-4.10.2/c/src/lib/libbsp/arm

1,添加 sbc2440目录,将smdk2440的所有文件复制过来。
2,
修改 acinclude.m4
添加 sbc2440

二,rtems-4.10.2/c/src/lib/libbsp/arm/sbc2440/make/custom
将 smdk2440.cfg 改名为 sbc2440

三,可以删除不要的BSP 提高速度

# ./bootstrap -c    清除之前的
# ./bootstrap -p    重新生成哪些编译文件
# ./bootstrap

# mkdir build-rtems
# cd build-rtems
# ../rtems-4.10.2/configure --target=arm-rtems4.10 --disable-posix --disable-itron --disable-cxx

--disable-networking --enable-rtemsbsp=sbc2440

应该能编译通过

四,
rtems-4.10.2\c\src\lib\libbsp\arm\sbc2440 中的 Makefile.am 文件中看到具体哪些文件被连接了。
可以看到,有下面这些文件是引用了 gp32 的,所以这里将gp32中对应的文件复制过来并且修改makefile

include_HEADERS = ../gp32/include/bsp.h
include_HEADERS += ../gp32/smc/smc.h
libbspstart_a_SOURCES = ../gp32/start/start.S
 ../gp32/startup/bspstart.c
libbsp_a_SOURCES += ../gp32/console/uart.c
libbsp_a_SOURCES += ../gp32/smc/smc.c ../gp32/smc/smc.h

重新 bootstrap configure 和 make,应该能编译通过。


五,修改源代码让代码跑起来。
由于2410的寄存器基本吻合,所以头文件不改也没问题

我主要是修改了时钟(PLL设置)和串口

\c\src\lib\libcpu\arm\s3c24xx\clock\support.c
修改get_FCLK
由于2440 的PLL计算公式不同,在原来的基础上乘以2 就行了。修改为
 return((BSP_OSC_FREQ * m * 2) / (p << s));

\c\src\lib\libbsp\arm\sbc2440\start\start.S
修改启动代码,主要工作是
RTEMS 的运行地址是 0x30000100 ,所以需要用bootloader 加载到这个地址然后运行。
如果是用GDB的话,则会根据ELF文件自动下载的
可以使用 uboot加载进来(我没有测试过,暂时不说,之后也要用这个办法的,先搁下)
我是使用自己加载的方式。主要做了(在原来的设置堆栈之后工作)
1,关闭看门狗,关闭所有中断,SVC模式
2,设置PLL,将 FCLK : HCLK : PCLK 设置为 200 : 100 : 50 MHZ
3,根据具体的SDRAM型号参数,设置MEMORY CONTROLER
4,由于SDRAM初始化完毕,开始复制.text 和.data 段(可以看连接脚本)到SDRAM上面。
5,清除 .bss 段的内容。
6,跳转到 SDRAM 上面执行。
7,接着做RTEMS 原来的初始化

\c\src\lib\libbsp\arm\sbc2440\console\uart.c
主要修改 UART0 口的初始化就行了,不用FIFO,主要发送的时候判断

完成之后 make install 安装
然后编译hello world,然后 objcopy -O binary 转化为 bin 格式。烧写到 0 地址的norflash 就可以了。

简要笔记。主要是能通过串口打印hello world,网络还没搞


Etual
2012-12-7

 

你可能感兴趣的:(RTOS,rtems)