免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3859 | 回复: 1

[BootLoader] linux卡在starting kernel...后在compressed/head.S里点灯调试出错 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
发表于 2013-01-09 14:21 |显示全部楼层
本帖最后由 registcn 于 2013-01-09 14:55 编辑

最近做移植官方linux到x210ii(s5pv210)开发板,linux卡在starting kernel...看遍网上各种贴子,ID,频率,分区(貌似此处还不涉及,都说卡在uncompressing后才可能是分区问题),串口驱动,都检查过,也开过低级调试信息,没发现问题,按照厂商说的,设定bootcmd、bootargs就成,但是我这不行啊。请前辈们赐教,这里先把我的问题描述如下:

首先printascii(自己用一段汇编封装了这个函数)确认了不能进入arch/arm/kernel/head.S(因为正常kernel用本人的程序有提示性输出)。然后在arch/arm/boot/compressed/head.S里添加点灯程序(写成了宏,也保存恢复了寄存器),发现,加在文件开头_start紧后,可以亮,但是在文件bl decompress_kernel语句(两条可能的分支都加了)前、后都没结果,灯不亮。

我是否应该把问题锁定在head.S解压出错?或者,有没有可能是我加的位置不对?因为直接加载含有.word,.type(没仔细研究过at&t)的汇编语句上下文中,不亮,但是放在bl  1f所指向的标签“1:”里就可以亮,这几个字段莫非有干扰?

希望大家给个问题范围,现在脑袋大了。。。今天我把汇编(节选自我的arch/arm/boot/compressed/head.S)贴出来。

#include <linux/linkage.h>
//下面这句自己加的,这里面有printascii及其内部实现所需要的一些宏
#include "../../kernel/debug.S"

//这个过程写的没问题吧?复制的一个调试成功的人的代码。
__right_p:
            adr                 r13,spbuf1
            stmia                 r13, {R1-R4,R7}

            mov                 r7,lr

            mov                 r4, r0
            adr                 r0, str_p3
            bl                     printascii

            mov                 r0 ,r4
            bl                 printhex8
            adr                 r0,str_p4

            bl                 printascii
            mov                 lr,r7
            ldmia                 r13,{R1-R4,R7}

            mov                 pc,lr
            str_p3:         .asciz "\nkernel boot step 0x"
            str_p4:              .asciz "\n"
        .align
ENDPROC(__right_p)
spbuf1: .space 20

//这个宏写的也没问题吧?
.macro ledon
        stmea                sp!,{r0,r1}
        ldr                r0,=0xE0200240
        mov                r1,#0x10000
        str                r1,[r0]

        ldr                r0,=0xE0200244
        mov                r1,#0x7f
        str                r1,[r0]
        ldmea                sp!,{r0,r1}
.endm


/*
* Debugging stuff
*
* Note that these macros must not contain any code which is not
* 100% relocatable.  Any attempt to do so will result in a crash.
* Please select one of the following when turning on debugging.
*/

/*

次数省略很多调试宏,他们怎么用呢?
还有上面英文注释里说的话(must not contain any code which is not 100% relocatable),
感觉和我下面添加代码导致的错误有关系,但是不知道怎么个意思?
重定位是指从flash到sdram吗,还是只编译原理上的代码重定位呢?
*/

start:
                //这里出错,uboot提示找不到image,可能是这句话在最终文件里占据了空间干扰了image解压的位置?那怎么调试啊,调试总不能不加语句吧?
                //mov r0,#0x110
                //bl __right_p
               

                .type        start,#function
                .rept        8
                mov        r0, r0
                .endr
               
                //ledon宏放在这里,也会导致同样的错误,找不到image。还是同问,怎么写100%可重定位的程序呢?
                //ledon
                b        1f
                .word        0x016f2818                @ Magic numbers to help the loader
                .word        start                        @ absolute load/run zImage address
                .word        _edata                        @ zImage end address
1:               
                //这个宏放在这里就可以!灯就亮了!!!这是因为这里的代码100%可重定位?
                //但是这种标签有限啊,调试的地方不都是有标签的。
                //我想在任意处添加调试代码,结果就是上面错误!请大侠指教怎么破?
                //ledon
                mov        r7, r1                        @ save architecture ID
                mov        r8, r2                        @ save atags pointer

添加调试代码后不仅没有到达starting kernel,而且有其他错误信息,分析如下:
在do_bootm函数里,if (*(ulong *)(addr + 9*4) == LINUX_ZIMAGE_MAGIC) 判断为不等于,
导致未能直接跳转到goto after_header_check,
最终在 if (os_len == 0) {  puts ("ERROR: can't get kernel image!\n");return 1;   }里面终止,
dnw输出错误信息:ERROR: can't get kernel image!

论坛徽章:
0
发表于 2013-06-05 12:14 |显示全部楼层
高度串口,内核镜像大小,uboot传参,硬件内存加电容去扰
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP