年前的时候弄的2.6.29的内核,当时可以正常启动内核。
过完年看到 2.6.33 的内核里面待了不少6410的驱动,就决定改用2.6.33。
结果编译完了以后,连解压缩的信息都没输出。没办法,又用j-link上。
在最后发现在 arch/arm/boot/compressed/head.s 的
adr r0, LC0
ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, ip, sp} )
时候出了一个很怪异的问题。LC0如下:
.align 2
.type LC0, #object
LC0: .word LC0 @ r1
.word __bss_start @ r2
.word _end @ r3
.word zreladdr @ r4
.word _start @ r5
.word _got_start @ r6
.word _got_end @ ip
.word user_stack+4096 @ sp
结果发现 ldmia 运行完以后,
r1 = LC0
r2 = __bss_start
r3 = _start
r4 = _got_start
r5 = _end
..........
开始说啥想不明白。
对比了一下2.6.29和2.6.33的代码,发现2.6.33多了一行汇编,将这行汇编删了或者加上一个nop,就OK了!
最后是把
.align 2
改成了
.align 3
但后来找了好多地方也没说ldmia要8字节对齐啊!不知道是不是因为AXI总线是64bits的。
阅读(1171) | 评论(0) | 转发(0) |