移植Uboot-2017(1)

移植uboot 2017-07S5PV210

1. 使用uboot源码里面本身有的代码的基础上进行修改

   Arch/arm/cpu/arnv7这个目录

   Board/samsung/goin 这个目录

2. 代码看了一下,第一阶段不用怎么改,但是我们需要调试知道我们运行到了哪一步,于是我们在Lowlevel_init.S下改了如下地方

uboot的第一阶段上面加上

.word 0x2000

.word 0x0

.word 0x0

.word 0x0

效验头

3.我们在串口的初始化函数上面加了一句打印,这里就是在串口那里打印出一个G


 但是这里应该是输出不出来G,LED电灯的方法去调试哪里执行了,哪里没执行

LED点灯代码如下:

Ldr r0,=0x11111111

Ldr r1,=GPJ0CON

Str r0,[r1]

Ldr r0.=((1<<3) | (0<<4) | (1<<5))

Ldr r1,=GPJ0DAT

Str r0,[r1]

Ldr r2,=9000000

Ldr r3,=0x0

Delay2:

Sub r2,r2,#1

Cmp r2,r3

Bne delay2

通过分析发现是b lowlevel_init这句话有问题,但是这句代码只是一个简单的跳转,为什么会出问题呢,问题应该是什么问题呢,这个问题就出在范围超限了,因为我们在烧录Uboot的时候,我们是把Uboot分为两部分,前8KB放在SD卡的前部,依次加载进去作为BL1,然后后面那些东西放在后部的,那么程序在链接的时候你必须保证我们uboot的第一阶段的完整性。我们就需要用链接脚本把我们的代码放到前面,我们就修改链接脚本,在我们arch/arm/cpu/这下面的uboot.lds加上。如下


然后make disclean之后重新编译

但是会报错


这个错误可以看出来是board/samsung/lowlecel_init重复定义了。

 

怎么解决这个问题,为什么会重复定义,因为我们lowlevel_init.o,这个函数被我们链接的时候,链接了两次,一次是我们board/samsung/goin这个目录下本身的链接,不信你进入这个目录下,会有个obj-y :=lowlevel_init.o

还一次就是我们的链接脚本,最终在链接生成U-boot的时候又链接了一次,所以这里链接了两次导致了重定义。所以重复定义了。

这个错误怎么解决:我们冷静下来想一想,我们想一下,这个start.s肯定也链接了两次,为什么他没报这个重复定义的错误,于是我们打开这个目录下的makefile


发现它用的是extra-y

这个应该是外部引用吧,我猜,所以我们也把我们的lowlevel_init这个也改为这个这个

然后make distclean,然后make,发现编译成功了




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值