主题 : arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu编译tekkamanninja-u-boot-2010.03问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 24664
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-07-12
最后登录: 2010-09-15
楼主  发表于: 2010-07-26 10:19

 arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu编译tekkamanninja-u-boot-2010.03问题

各位,有没有使用arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu编译tekkaman的u-boot?
本人在成功编译后,program到友善之臂的mini2440开发板上面,无法实现功能,串口无打印,但是蜂鸣器可以发声。很奇怪!使用tekkaman提供的u-boot.bin烧写进去,串口有打印信息。所以,不知道问题出在什么地方,是tekkaman提供的源码有问题,还是编译器的问题,困惑中》》》》》》》
级别: 新手上路
UID: 24664
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-07-12
最后登录: 2010-09-15
1楼  发表于: 2010-08-02 13:09
有人出来给点提示不
级别: 新手上路
UID: 24664
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-07-12
最后登录: 2010-09-15
2楼  发表于: 2010-08-03 18:14

 回 1楼(jackzheng) 的帖子

我用点灯大法跟踪,跟踪到了board.c里面的start_armboot ()函数,在执行到:
    for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
        if ((*init_fnc_ptr)() != 0) {
            hang ();
        }
程序飞掉了。后续程序无法执行。
查看函数指针数组init_sequence[],对照u-boot.map,找到对应的函数,发现:
init_fnc_t *init_sequence[] = {
#if defined(CONFIG_ARCH_CPU_INIT)
    arch_cpu_init,        /* basic arch cpu dependent setup */
#endif
    board_init,        /* basic board dependent setup */
#if defined(CONFIG_USE_IRQ)
    interrupt_init,        /* set up exceptions */
#endif
    timer_init,        /* initialize timer */
#ifdef CONFIG_FSL_ESDHC
    get_clocks,
#endif
    env_init,        /* initialize environment */
    init_baudrate,        /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,        /* stage 1 init of console */
    display_banner,        /* say that we are here */
#if defined(CONFIG_DISPLAY_CPUINFO)
    print_cpuinfo,        /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
    checkboard,        /* display board info */
#endif
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
    init_func_i2c,
#endif
    dram_init,        /* configure available RAM banks */
#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
    arm_pci_init,
#endif
    display_dram_config,
    NULL,
};
发现是由于程序进入不了serial_init里面去,造成程序无法执行。
所以,怀疑是编译器链接的问题。因为serial_init函数所处的位置超出了跳转的范围,造成程序的跑飞。
####继续分析。。。。
也希望高手不吝赐教!!!!
级别: 新手上路
UID: 24664
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-07-12
最后登录: 2010-09-15
3楼  发表于: 2010-08-05 16:04
继续debug!
点灯点到了serial_init(),接着serial_init_dev(),接着追踪到了
void _serial_setbrg(const int dev_index)
{
    struct s3c24x0_uart *uart = s3c24x0_get_base_uart(dev_index);
    unsigned int reg = 0;
    int i;

    /* value is calculated so : (int)(PCLK/16./baudrate) -1 */
    reg = get_PCLK() / (16 * gd->baudrate) - 1;

    writel(reg, &uart->UBRDIV);
    for (i = 0; i < 100; i++)
        /* Delay */ ;
}
最终锁定了get_PCLK()函数。灯在reg = get_PCLK() / (16 * gd->baudrate) - 1;之前可以点亮,之后点不亮。
这样,说明:1 . 之前的怀疑是错的,程序可以进入serial_init()函数;
            2.  get_PCLK()函数调用出错,程序死在了这里。
怀疑get_PCLK()所在的speed.c没有被编译,但是查看u-boot.map,发现get_PCLK()被编译进去了,如下:
.text          0x33fa3598      0x170 cpu/arm920t/s3c24x0/libs3c24x0.a(speed.o)
                0x33fa3618                get_UCLK
                0x33fa3620                get_FCLK
                0x33fa3628                get_HCLK
                0x33fa36dc                get_PCLK
那么为什么没有被调用呢??serial_s3c24x0.c有包含common.h头文件,而get_PCLK在该头文件中有声明的。
而且同样是调用 get_PCLK(),s3c24x0_i2c.c中的i2c_init()这一步就没有出错。查看u-boot.map文件,发现如下特征:
cpu/arm920t/s3c24x0/libs3c24x0.a(speed.o)
                              drivers/i2c/libi2c.a(s3c24x0_i2c.o) (get_PCLK)
有关联的就没有问题。
而serial_s3c24x0.o就没有这种关联!
继续搞!!!!

        
级别: 新手上路
UID: 24664
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-07-12
最后登录: 2010-09-15
4楼  发表于: 2010-08-10 17:18
OK了!!!终于有serial print message了,换成老的编译器就可以了,搞不清楚!!!
有没有人能解析下u-boot.map文件,谢谢
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2010-08-10 17:51
下面是我当时贴在tekkaman博客上(http://blog.chinaunix.net/u1/34474/showart.php?id=2217066)的评论,你可以试试这个。

下面的补丁可以让该uboot用更多的交叉编译工具链来编译,避免因为工具链提供的libgcc.a与arm920t架构的CPU不兼容而导致运行出错。



[PATCH] use uboot's own libgcc.a for better toolchain compatibility:

From a65ccf5996ae50731b6fbe3ca8a8c98e4c874ca0 Mon Sep 17 00:00:00 2001

From: Alex Ling <kasimling@gmail.com>

Date: Wed, 5 May 2010 11:37:20 +0800

Subject: use uboot's own libgcc for better compatibility



---

board/tekkamanninja/mini2440/config.mk |    4 ++++

1 files changed, 4 insertions(+), 0 deletions(-)



diff --git a/board/tekkamanninja/mini2440/config.mk b/board/tekkamanninja/mini2440/config.mk

index dc59d08..eb4f625 100644

--- a/board/tekkamanninja/mini2440/config.mk

+++ b/board/tekkamanninja/mini2440/config.mk

@@ -21,3 +21,7 @@

# download area is 3300'0000



TEXT_BASE = 0x33F80000

+

+#

+#for better toolchain compatibility, use own libgcc.a

+USE_PRIVATE_LIBGCC=yes

--

1.6.3.3
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 26391
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-08-08
最后登录: 2011-07-04
6楼  发表于: 2010-08-10 22:30
你好 我想问一下我用arm-linux-gcc 4.3.2编译你们给的源码串口还是没有输出,但是用arm-linux-gcc 3.4.5 编译就可以,可以分析下原因吗?
级别: 新手上路
UID: 27561
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2010-08-27
最后登录: 2011-09-01
7楼  发表于: 2010-08-27 19:29
LZ,,我也,遇到这样的问题了,,不过是,去年的事,直到今年,,才有人,,,,我移植了,好几个晚上了,,如果有新情况,,保持联系,
顶了,
级别: 新手上路
UID: 28258
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2010-09-08
最后登录: 2011-03-03
8楼  发表于: 2010-09-08 14:51
CLZ 未定义指令异常
级别: 新手上路
UID: 3333
精华: 0
发帖: 26
金钱: 170 两
威望: 78 点
综合积分: 52 分
注册时间: 2009-01-05
最后登录: 2010-10-27
9楼  发表于: 2010-09-27 15:25
哈哈,我自己制作的交叉编译器,用起来挺好