bootloader疑问

发布于 2022-09-29 20:51:07 字数 2087 浏览 15 评论 0

初学2410,尝试写了一个BOOTLOADER。可在stage1跳转stage2的时候出现问题。代码如下:

stage1用汇编写的,代码就是初始化CPU等等,最后用
b main        
进行跳转

lds代码:
SECTIONS
{
        firtst 0x00000000:
        {
                  head.o
                  copy_myself.o
          }
          second 0x33f00000:
          AT(4096)
          {
                  main.o
                  *.o
          }
}

makeflie代码:
kboot: head.S nand_flash.c string.c uart.c main.c
        arm-linux-gcc -g -c -o head.o head.S
        arm-linux-gcc -g -c -o nand_flash.o nand_flash.c
        arm-linux-gcc -g -c -o string.o string.c
        arm-linux-gcc -g -c -o uart.o uart.c
        arm-linux-gcc -g -c -o main.o main.c
        arm-linux-ld -Tboot.lds -g head.o nand_flash.o string.o uart.o main.o -o kboot.o
        arm-linux-objcopy -O binary -S kboot.o kboot
clean:
        rm -f *.o
        rm -f kboot

编译器使用的是arm-linux-gcc  3.4.1
fc6  LINUX
提示错误:
arm-linux-ld -Tboot.lds -g head.o nand_flash.o string.o uart.o main.o -o kboot.o
head.o(.text+0xa4):/root/workspace/kboot/head.S:89: relocation truncated to fit: R_ARM_PC24 main

我用 ldr  pc, =main
能编译通过。不过不能跳转,我的stage2就是打印一个o.

那位高手帮帮忙。谢谢。

[ 本帖最后由 jlu3389 于 2007-7-24 15:24 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

口干舌燥 2022-10-06 20:51:07

可能是寻址范围问题。

故事还在继续 2022-10-06 20:51:07

我无法用JTAG调试,也没有仿真器。
所以不知道那里寻址错误。

转身泪倾城 2022-10-06 20:51:07

b指令系列的寻址范围为当前指令的+-32M。如果你指令的跳转跨度大于32M,可用大范围寻址指令,或直接向pc赋值。

内心荒芜 2022-10-06 20:51:07

原帖由 sep 于 2007-7-24 15:59 发表
b指令系列的寻址范围为当前指令的+-32M。如果你指令的跳转跨度大于32M,可用大范围寻址指令,或直接向pc赋值。

我尝试过给PC寄存器赋值,编译通过,可烧写到板子上还是没有反映,这里我可以肯定驱动方面没有问题,因为我曾经尝试使用vivi的lds,结果是bl main可以成功跳转,可在我再增加string.c的时候提示 no enougth room ,我不知道为什么了。

抱猫软卧 2022-10-06 20:51:07

寻址范围大于了32M,所以直接用b main是不能实现的,所以只能通过改变pc来实现

还有一个方法就是,在bl main之前就跑内存,而不是片内ram中跑.但是还是需要通过改变pc来实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文