Chinaunix首页 | 论坛 | 博客
  • 博客访问: 193983
  • 博文数量: 30
  • 博客积分: 1571
  • 博客等级: 上尉
  • 技术积分: 363
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-28 11:42
文章分类

全部博文(30)

文章存档

2012年(6)

2011年(11)

2010年(13)

我的朋友

分类: LINUX

2010-03-23 15:50:25

年前的时候弄的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的。

阅读(1158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~