免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 18793 | 回复: 24
打印 上一主题 下一主题

[BootLoader] uboot卡在了starting kernel....,快一个月了 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-06 17:38 |只看该作者 |倒序浏览
本帖最后由 registcn 于 2013-01-09 14:11 编辑

uboot卡在了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:”里就可以亮,这几个字段莫非有干扰?

希望大家给个问题范围,现在脑袋大了。。。明天我把汇编贴出来。
///////////////////////////////////麻烦各位了,今天贴出代码////////////////////////////////////////
#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

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
2 [报告]
发表于 2013-01-07 16:58 |只看该作者
http://bbs.chinaunix.net/forum.p ... age%3D1#pid23750253
跟这个问题一样,但是没解决啊。顶起啊

论坛徽章:
0
3 [报告]
发表于 2013-01-07 17:27 |只看该作者
我没有做过arm的,不过我觉得如果在arch/arm/boot/compressed/head.S 入口到bl decompress_kernel 没有改变灯点亮行为的汇编,也就是灯程序在这之间能够正常工作的话,
那楼主在bl decompress_kernel前也没有点亮,那应该不是decompress_kernel的问题,应该是程序没有执行到这边,另外不知道楼主的开发板printascii是输出到哪个设备的,比如uart?

论坛徽章:
0
4 [报告]
发表于 2013-01-07 17:37 |只看该作者
首先printascii确认了不能进入arch/arm/kernel/head.S。

你在哪里加的 printascii?

另外console 驱动实现了吗?

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
5 [报告]
发表于 2013-01-08 13:49 |只看该作者
在head.S最开始处,print的。串口驱动也配置了,端口也选好了。。。无解。我是在kernel.org 下载的内核,make xxx_defconfig也做了。。。 回复 4# hanshu830


   

论坛徽章:
0
6 [报告]
发表于 2013-01-08 16:04 |只看该作者
你能确定代码运行到decompress_kernel吗

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
7
发表于 2013-01-08 21:08
这个怎么确定?点灯宏在_start开始外/前是亮的,放在_start里最开始处(确定执行的分支里)不亮(附近有很多.word,.type,会不会是这些字节受干扰呢?at&t没仔细研究过),后来看到有一句bl  1f,我放到1这个标签下的代码里就可以点,真是奇了怪了?!所以,你问确定是否到了decompress处,我也不确定,因为是直接放到流程里而不是某个标签下,仍然怀疑是不是.type,.word干扰,所以我不确定。。。回复 6# dj_shu


   

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
8
发表于 2013-01-08 21:09
printascii是输出到uart,dnw显示的,这时借助的是uboot的串口驱动。回复 3# dj_shu


   

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
9
发表于 2013-01-08 21:11
没有正式进入内核,卡在这解压过程,可不可以用gdbserver呢,你说?灯不好使,只能寄希望于gdb作代替进行单步(语句级)跟踪了回复 6# dj_shu


   

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
10 [报告]
发表于 2013-01-09 14:13 |只看该作者
你好,贴出代码了,麻烦你简单看下回复 6# dj_shu


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP