搜索
bottom↓
回复: 4

PXA270 移植U-B00T奇怪的问题请教,折腾了一天,还没头绪?

[复制链接]

出0入0汤圆

发表于 2010-9-4 21:00:30 | 显示全部楼层 |阅读模式
自学移植U-Boot,处理器是PXA270,参考的U-Boot源代码版本是 u-boot-1.1.2。目前根据网上搜集的资料,自己修改后程序能够跑到 U-Boot的第二阶段
void start_armboot (void)函数里面,但程序运行就死在这个函数的见面几句。

编译环境:
1. Windows XP2 + VM6.5虚拟机 + Fedora
2. uboot编译器: 成都国嵌网站下载的uboot用编译工具。gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-

检测void start_armboot (void)函数运行情况的方法:
1. 点LED灯、灭LED灯来判断程序运行情况。

------------------------
观察步骤如下:
void start_armboot (void)
{
        DECLARE_GLOBAL_DATA_PTR;
        ulong temp_counter;        //add by luoxiongjian
        ulong size;
        init_fnc_t **init_fnc_ptr;
        char *s;
#if defined(CONFIG_VFD) || defined(CONFIG_LCD)
        unsigned long addr;
#endif

        led_flash(3);        //第一次测试,这条语句是自己加的,是要LED灯闪烁3次。
        while(1);            //第一次测试,这条语句是自己加的,程序停在这里,

        /* Pointer is writable since we allocated a register for it */
        gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));        //0xa3080000-(0x00020000+0x00020000)-sizeof(gd_t)
        /* compiler optimization barrier needed for GCC >= 3.4 */
        __asm__ __volatile__("": : :"memory");
        memset ((void*)gd, 0, sizeof (gd_t));
        gd->bd = (bd_t*)((char*)gd - sizeof(bd_t));
        memset (gd->bd, 0, sizeof (bd_t));
        monitor_flash_len = _bss_start - _armboot_start;

          for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
         {

                if ((*init_fnc_ptr)() != 0)
                {
                        hang ();
                }
        }

/************下面几个函数是我自己在board.c里面增加的,用来驱动LED*************/
static void led_flash(unsigned int count)
{
       
        while(count--)
        {       
                ( *(volatile unsigned long *)0x40e0000c) |= (0x01<<10);//GPDR0
                ( *(volatile unsigned long *)0x40e00024) |= (0x01<<10);//GPCR0 clear 0 gpio10
                delay(1000);
                ( *(volatile unsigned long *)0x40e00018) |= (0x01<<10);//GPSR0  set 1 gpio 10
                delay(1000);

        }
}

static void delay(unsigned int loop)
{
        unsigned  int i,j;
        for(i=0;i<loop;i++)
        {
                c=0;
                for(j=0;j<10000;j++);
        }
}


   
期待程序运行现象:
       LED灯闪烁3次,就不再闪烁保持常亮或者常灭的状态。
程序实际运行现象:
       第一次测试语句生效:LED灯持续闪烁不停止。不断电源就永远永远的闪烁下去。


自己的疑惑:
      为什么会这样,程序逻辑没有看出什么问题。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-9-4 21:08:21 | 显示全部楼层
led_flash(3);
while(1);
是不是看门狗复位了。然后从头再来,感觉上好像是一直在闪灯呢?

出0入0汤圆

 楼主| 发表于 2010-9-4 22:11:58 | 显示全部楼层
多谢指点。
我在初始化过程中,没有使能看门狗。我在start.s文件中屏蔽了所有中断!

更奇怪的现象出现:
1. 上面的程序不变,重新make以后,形成的uboot.bin,重新烧录。 LED灯不闪了,处于常亮状态,但不是正常点亮的亮度,这个亮度暗很多,但是又不是灭的状态。

----------------------
1.以上程序,重新编译2次,重新下载两次,现象依旧。
2.在start.s文件中,跳入start_armboot( )之前,用汇编语句,控制LED灯功能一切正常。要它亮,它就亮,要它灭,它就灭。
  感觉进了start_armboot( )函数就诡异了。

出0入0汤圆

发表于 2010-9-4 22:53:06 | 显示全部楼层
编译不要加优化,-g -O0编译

如果没有JTAG,可以先用QEMU来调试u-boot,QEMU支持PXA270的

出0入0汤圆

 楼主| 发表于 2010-9-5 19:33:45 | 显示全部楼层
多谢ffxz大侠指点。
今天又抽时间折腾了1个小时。 下载了U-Boot-1.3.3版本源码,移植了,编译下载。现象依旧!

------------------------------
回复ffxz大侠:
        编译不要加优化,-g -O0编译

我对GCC语法不甚了解。不知道怎么设置优化选项。我参照网上方法如下处理:
       1.在终端shell窗口设置了如下环境变量:export CFLAGS="-o0 -g -march=armv5"&&CXXFLAGS=$CFLAGS
       2. make distclean
       3. make xxx_config
       4. make
最后得到的Bin文件,烧录下载,现象依旧。


今天试了几次,到start_armboot( )函数里面一点反应都没有,而在start.s里面的LED控制都正常,而昨天可以跑到start_armboot(),只是LED一直闪烁。
疑问如下:
1. 请教各位, 编译优化选项主要在哪个Makefile里面修改?
2. 有没有可能,程序根本没有跑到start_armboot( )函数里面,在执行完start.s里面的汇编语句,就飞了?
3. TEXT_BASE 参数的值没有非常严格的限制吧?只要SDRAM下端地址留足了空间给其他程序
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 20:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表