1、采用什么方式跃?
2、检验是否跃成功?
跳转方式
①相对跳转 b bl
②绝对跳转 ldr pc, =xxxxxxx
main.c
-
#define GPBCON (volatile unsigned long*) 0x56000010 定义指针地址为0x56000010
-
#define GPBDAT (volatile unsigned long*) 0x56000014 定义指针地址为0x56000014
-
-
int gboot_main()
-
{
-
*(GPBCON) = 0x15400;
-
*(GPBDAT) = 0x6bf;
-
-
return 0;
-
}
指针的地址一般都用unsigned long*类型,volatile是不用编译器优化
start.S中跳转到main
-
ldr pc, =gboot_main @跳转到gboot_main
修改Makefile
-
all : start.o main.o #加入main.o
-
arm-linux-ld -Tgboot.lds -o gboot.elf $^
-
arm-linux-objcopy -O binary gboot.elf gboot.bin
问题记录:
210的Led无法点亮。
210的将bootloader复制到内存中时,因为210的bootloader使用之前需要加16字节的头。
当把stepping stone中的文件复制到内存中时,所有的内容其实多拷贝了16字节。所有地址都多移动了16字节,指针指向的位置也全偏移了。
所以在copy_sdram时要考虑不复制16字节的头。
阅读(849) | 评论(0) | 转发(0) |