RTEMS 的 AT91SAM9260 移植(9):Hello World

内核编译成功后,下一步我们就开始弄Hello World,完成这个工作,首先我们去官方网站下载测试程序包。

http://www.rtems.org/ftp/pub/rtems/4.9.4/class-examples-4.9.4.tar.bz2

 

解压缩,以后我们进入 class-examples-4.9.4 的文件夹。

输入以下命令

 

cd hello_world_c

 

export RTEMS_MAKEFILE_PATH=/opt/rtems-4.9/arm-rtems4.9/at9260

 

make clean; make

 

应该成功编译结束,编译结束后,应该看到下面多了一个o-optimize的文集夹。hello.exe 即是编译后生成的elf文件。

 

由于我没有仿真器,为了能使系统能跑起来,可能要使用bootloader加载该镜像,镜像也要转成内存格式。

 

arm-rtems4.9-objcopy -O binary -S hello.exe hello.bin

 

我为了图省事,没有去找 Uboot去引导系统,当然如果有现成的更好。我就是使用 ATMEL公司提供的bootstrap程序完成了对RTEMS程序的引导。但bootstrap需要少许的改动一下。

 

从官方下载bootstrap v1.16 的源代码,bootstrap也是用GNU工具链编译,两个正好统一起来。

 

我的AT91SAM9260是从dataflash中启动。

 

修改:Bootstrap_v1.16_for_at9260/board/at91sam9260ek/dataflash/at91sam9260ek.h

 

#define IMG_ADDRESS 0x10000 /* Image Address in DataFlash */ #define IMG_SIZE 0x300000 /* Image Size in DataFlash */ #define MACH_TYPE 0x44B /* AT91SAM9260-EK */ #define COPY_ADDR 0x20000000 #define JUMP_ADDR 0x20000020 /* Final Jump Address */ 

 

这里主要修改了 COPY_ADDR、IMG_SIZE、IMG_ADDRESS

增加了一个宏 JUMP_ADDR

 

 

Bootstrap_v1.16_for_at9260/main.c函数修改main函数的返回值

 

return JUMP_ADDR;

 

然后修改Bootstrap_v1.16_for_at9260/board/at91sam9260ek/dataflash/Makefile

主要是改成arm-rtems4.9-的工具链,别的没什么。

 

# TODO: set this appropriately for your local toolchain ifndef ERASE_FCT ERASE_FCT=rm -f endif ifndef CROSS_COMPILE CROSS_COMPILE=arm-rtems4.9- endif

 

至此,进入Bootstrap_v1.16_for_at9260/board/at91sam9260ek/dataflash/文件夹,直接make就好了

生成一个小于4kb大小的dataflash_at91sam9260ek.bin文件。

 

这个文件用于引导系统。

 

这里有些朋友会问我,怎么确定 COPY_ADDR和JUMP_ADDR的。

这里简要的说一下:

COPY_ADDR就是代码加载到SDRAM中,从什么位置开始。而JUMP_ADDR是代码的第一条指令从什么地方开始。

我们的linkcmds中代码是从0x20000000开始的,这没什么好说的。那第一条指令并不是0x20000000开始的。

大家可以查看o-optimize/hello.num这个文件,这个文件是所有符号的位置。可以看到_start标号对应的地址是0x20000020开始的。

RTEMS应用程序规定,第一条指令从_start标号开始。

 

至于IMG_ADDRESS和IMG_SIZE,只是告诉bootstrap,RTEMS的应用程序放置在dataflash的什么地方,应用程序有多大。

应该不难理解。

 

烧写代码可以选用j-link完成(如果是学生,建议去淘宝去买个70块钱的j-link),使用ATMEL官方提供的 SAM-BA 烧写。

 

选择/jlink/ARM0和AT91SAM9260-EK,然后链接目标板。

 

选择Dataflash的页面,启用CS1片选上的设备,然后Erase all所有内容。时间较长,需要等待一下。

这里说一下,AT45DB321D这个系列的dataflash支持边写边擦除,所以erase all不是必须的。但是为了防止写错,可以erase all,这样更可靠些。然后选择send boot file,选择文件dataflash_at91sam9260ek.bin,写完毕后。在send file name 中选择hello.bin文件,在Address(图中2位置)填写0x10000,然后点击 Send file.烧写完毕后,解除 jlink链接后,重新给板子上电,链接好串口打印,设置好波特率。

 

你看到了Hello World!!!了吗?

没看到不要着急,仔细检查每个环节,确认问题。如果你对我所说的有疑问,欢迎拍砖。谢谢。

 

 

 

 

你可能感兴趣的:(image,测试,File,Path,工具,makefile)