10966|13

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

vxworks 启动过程死机 [复制链接]

 请教高手:

   我用的是MPC880。上面跑vxworks5.5。

   采用bootRom + vxworks image的方式。

   目前我采用的是从网络加载vxworks映像的方式进行调试。调试串口和调试网口都已经打通。
但是,在boot的过程中,运行到bootConfig.c的usrNetIfConfig()这个函数后,经常出现
启动死在这个地方的现象。串口打印信息就停止不动了。

Attached TCP/IP interface to cpm0.
Warning: no netmask specified.
Attaching network interface lo0... done.
Loading from PC (vxworks.bin) ...c:/tornado2.2/vxworks.bin
start inflate file to 0x10000
Starting at 0x10000...

Attaching to TFFS...
done.
Target Name: vxTarget
Attached TCP/IP interface to cpm unit 0
Attaching network interface lo0... done.

Adding 3716 symbols for standalone.


auto-booting...


boot device          : cpm
unit number          : 0
processor number     : 0
host name            : host
file name            : c:/tornado2.2/vxworks.bin
inet on ethernet (e) : 192.168.1.56
host inet (h)        : 192.168.1.99
user (u)             : target
ftp password (pw)    : target
flags (f)            : 0x0
other (o)            : cpm

Attached TCP/IP interface to cpm0.
死在这里。不再打印信息。

   经过在bootConfig.c中加入打印信息,发现是在bootload()中调用
if (usrNetIfConfig (bootDev, params.unitNum, pBootAddr,(char *) NULL, netmask) != OK)
return (ERROR);
在这个函数中程序死掉了。

   奇怪的是,当出现死机后,断电上电,有时还能够正常的从网口加载vxworks映像。

   请高手指点!多谢。


最新回复

    各位高手,这个问题今天解决了。      在此,我感谢提出意见的高手!      问题出在网络的初始化上,我将bootConfig.c中涉及到网络初始化的那些操作再次初始化了一遍。 目前,启动过程正常。还没有出现死机的现象。        详情 回复 发表于 2008-7-22 13:33
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
把other(0)项的cpm清掉试试,不行的话就查网卡驱动了
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
  去掉了bootline中的other(0)项,死机现象任然存在。

   我现在怀疑是不是板子的问题。目前我手头只有一块板子。也不好做对照。
网口驱动在852t和850上都验证通过,没出现这样的问题。如果是网口驱动的
问题,那也应该不会出现加载vxworks映像成功的现象。时而能启动,时而不
能启动,还是比较困惑。

   计划再准备一块板子,两个板子对照一下。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
有时死有时不死,说明镜像本身没问题。

那问题无非是在板子的稳定性,和相关驱动两部分了。

是不是网卡驱动没写好,由于网络的一些延迟、错误等造成了假死了?CPU没死,只是无法继续执行有效正确代码了。

有没有试过直接在板上启动镜像?如果这样能每次都正确启动,那么说明板子没问题。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
尝试了一下从板上文件系统直接加载,还是出现了死机的现象。

Press any key to stop auto-boot...
0
auto-booting...


boot device          : tffs,0
unit number          : 0
processor number     : 0
host name            : host
file name            : /tffs0/vxworks.bin
inet on ethernet (e) : 192.168.1.56
host inet (h)        : 192.168.1.99
user (u)             : target
ftp password (pw)    : target
flags (f)            : 0x0

Loading from tffs  /tffs0/vxworks.bin...
start inflate file to 0x10000
Starting at 0x10000...

Attaching to TFFS...
done.
Target Name: vxTarget
Attached TCP/IP interface
死在这里了。不再打印信息。

又准备了一块板子,还是同样的现象。

先按照楼上的高手分析的,从网络驱动着手,追踪一下原因。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
  各位好!

  按照高手的指点,我分析了一下网络驱动。

  1,boot过程中运行到bootConfig.c中的usrNetIfConfig函数中的ifAddrSet(),会死机;
  2,加载vxwork image后,运行到ursConfig.c中的usrNetInit()。usrNetInit()在
    usrNetWork.c函数中。运行到usrNetIfConfig函数中的ifAddrSet(),会死机;

  ifAddrSet()看不到源码,不容易分析。

  if (ifAddrSet (ifname, inetAdrs) != OK)
  {
     printf ("Error setting inet address of %s to %s, errno = %#x\n",
                ifname, inetAdrs, errno);
     return (ERROR);
  }
  在运行到这一步之前打印ifname和inetAdrs的信息,没有发现这两个信息出错的现象。
  我打印的信息是:
               ifname = cpm0
             inetAdr = 192.168.1.56

  在usrConfig.c中,
#ifdef  INCLUDE_TFFS   
    if(!strncmp (BOOT_LINE_ADRS,"tffs",4))  
    {      
                 
            char strtmp[255];
            char BOOT_NET_LINE[255];
这两行改用全局变量,在用文件系统加载时则不出现死机现象。
                 
            memset(strtmp,0,255);
            memset(BOOT_NET_LINE,0,255);

            strcpy(strtmp, BOOT_LINE_ADRS + 5);
            strcpy( BOOT_NET_LINE,"cpm");
            strcat( BOOT_NET_LINE ,strtmp);
                      
            usrNetInit (BOOT_NET_LINE);/* initialize network support */   
    }
    else
        {
           usrNetInit (BOOT_LINE_ADRS);        /* initialize network support */
        }
#else
    {
      usrNetInit (BOOT_LINE_ADRS);/* initialize network support */
    }
#endif  /*INCLUDE_TFFS*/

    为什么在调用ifAddrSet()时会死机?还是比较困惑。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

7
 


   呵呵,没高手指点啊。

   我又做了这样的尝试:
   在bootConfig.c和usrConfig.c中,都要进行网络初始化。我将涉及到ifAddrSet()的操作都
注销掉。
   然后,在通过TFFS加载vxworks image。当然,该image中是不含ifAddrSet()操作的,网络功能
也就没有了。
   等vxworks image加载成功后,我在tShell中通过ipAttach,ifMaskSet,ifAddrSet设置网络参数。
在tshell中,也会出现执行ifAddrSet就死机的现象。但是有时不会死机。

   死机时,
   -> ifAddrSet("cpm0","192.168.1.56");
      valu  死掉了
      value信息打印不出来了。

   呼唤高手指点!!!我有进展,会及时发帖。

 
 
 

回复

173

帖子

0

TA的资源

一粒金砂(高级)

8
 
ifAddrSet这个函数有源码吗?跟踪一下到底是系统彻底死翘翘了,还是只是这里阻塞了。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

9
 
你修改过bootConfig或者usrConfig.c么
ifAddrSet这个函数没有操作实际的设备,是在给协议栈进行配置,所以说是驱动的问题就比较奇怪,不过你把configNet.h给弄上来看看?
每次到这里死是有点奇怪,觉得应该与你的driver没关系,会不会是你的config.h有些组件没有加对?导致ifAddrSet的时候协议栈实际上没有正确初始化









 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 

   终于有高手愿意指点了,十分感谢!

   ifAddrSet没有源码,是vxworks的一个库函数,在ifLib中。

   bootConfig和usrConfig.c没有修改过。

   按照高手的意思,我把configNet.h粘贴到这里,各位看看有没有错误。

/* configNet.h - network configuration header */

/* Copyright 1984-2001 Wind River Systems, Inc. */

#ifndef INCconfigNeth
#define INCconfigNeth

#ifdef __cplusplus
    extern "C" {
#endif

#include "vxWorks.h"
#include "end.h"

/* defines */

#define PHY_10BASE_T            0x00     /* 10 Base-T */
#define PHY_10BASE_T_FDX        0x01     /* 10 Base Tx, full duplex */
#define PHY_100BASE_TX          0x02     /* 100 Base Tx */
#define PHY_100BASE_TX_FDX      0x03     /* 100 Base TX, full duplex */
#define PHY_100BASE_T4          0x04     /* 100 Base T4 */

#ifdef INCLUDE_CPM_END

#define CPM_LOAD_FUNC   sysMotCpmEndLoad

/* motCpmAddr:ivec:sccNum:txBdNum:rxBdNum:txBdBase:rxBdBase:bufBase */

/*
* this is the default initialization string, valid for all ads860
* boards using SCC1. If running an 823, use SCC2 => the initialization
* string slightly varies, in that both the SCC number and the interrupt
* vector have different values
*/

#define CPM_LOAD_STRING ""

IMPORT END_OBJ* CPM_LOAD_FUNC (char *, void*);

#endif /* INCLUDE_CPM_END */

#ifdef INCLUDE_MOT_FEC

/* Motorola Fast Ethernet Controller */

#define FEC_LOAD_FUNC   motFecEndLoad

/*
* ":::::
* ::::::
* :"
*/

/*
* clockSpeed is optional for processors running at 50 MHz or less but required
* for proper MII management operation, otherwise.  The "stringize" macros are
* ANSI C.  Use of K&R C requires clockSpeed to be hard-coded or set in a
* separate function
*/

#define FEC_CLOCK_STRINGIZE(x)        #x
#define FEC_CLOCK_SPEED(x)        FEC_CLOCK_STRINGIZE(x)

#define FEC_LOAD_STRING "0xff000000:0x07:-1:0x0:-1:-1:0x80:0x80:0x0:0xff:4:0x2"
                       
/*#define FEC_LOAD_STRING "0x02200000:0x07:-1:0x0:-1:-1:0x40:0x30:0x0:0xff:2:0x4:" */

IMPORT END_OBJ* FEC_LOAD_FUNC (char *, void*);

/*
* this table may be customized by the user to force a
* particular order how different technology abilities may be
* negotiated by the PHY.
*/

INT16 motFecPhyAnOrderTbl [] = {
                                PHY_100BASE_T4,       /* 100Base-T4 */
                                PHY_100BASE_TX_FDX,   /* 100Base-T full duplex*/
                                PHY_100BASE_TX,       /* 100Base-T */
                                PHY_10BASE_T_FDX,     /* 10Base-T full duplex */
                                PHY_10BASE_T,         /* 10Base-T */
                                -1                    /* Signal end of table */
                               };
#endif /* INCLUDE_MOT_FEC */

/* max number of SENS ipAttachments we can have */

#ifndef IP_MAX_UNITS
#   define IP_MAX_UNITS (NELEMENTS (endDevTbl) - 1)
#endif

/* zhu jinjun */
END_TBL_ENTRY endDevTbl [] =
{
#ifdef SCC3_IS_DEBUG_ETHERNET   /*我在里使用SCC3作为网络接口*/
    { 0, CPM_LOAD_FUNC, CPM_LOAD_STRING, 1, NULL, FALSE},
    /*{ 1, FEC_LOAD_FUNC, FEC_LOAD_STRING, 1, NULL, FALSE},*/
#else
    /*{ 0, FEC_LOAD_FUNC, FEC_LOAD_STRING, 1, NULL, FALSE},*/
    { 1, CPM_LOAD_FUNC, CPM_LOAD_STRING, 1, NULL, FALSE},
#endif
    { 0, END_TBL_END, NULL, 0, NULL, FALSE},
};


#ifdef __cplusplus
    }
#endif

#endif /* INCconfigNeth */

 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 

   也把我的config.h中与网络有关的组件粘贴出来,请各位看看是不是有的组件没加对或者有些组件没有加
上。

#define INCLUDE_TIMESTAMP
#define INCLUDE_PING
#define INCLUDE_NET_SHOW   
#define INCLUDE_WINDVIEW
#define INCLUDE_FTP_SERVER       
#define INCLUDE_WDB_SYS
#define INCLUDE_SHELL
#define INCLUDE_SYM_TBL
#define INCLUDE_SYM_TBL_SYNC
#define STANDALONE_NET
#define INCLUDE_SIGNALS
#define INCLUDE_NET_SYM_TBL
#define INCLUDE_NETWRS_IFLIB
#define INCLEDE_FTPD_SECURITY

#undef  INCLUDE_END
#define INCLUDE_END        /* Enhanced Network Driver see configNet.h */

#undef        INCLUDE_NETWORK
#define        INCLUDE_NETWORK
#ifdef        INCLUDE_NETWORK    /* defined in configAll.h */
#undef INCLUDE_MOT_FEC     /* define if you are using the FEC. */
#define INCLUDE_CPM_END    /* define, if you want to use the   */
                           /* CPM ethernet driver */
#endif /* INCLUDE_NETWORK */

#ifdef INCLUDE_MOT_FEC
#ifndef INCLUDE_END
#define INCLUDE_END                      /* define if you are using the FEC */
#endif /* INCLUDE_END */
#endif /* INCLUDE_MOT_FEC */

/* telnet surport */
#define INCLUDE_TELNET

/* remove unnecessary drivers */

#undef INCLUDE_BP
#undef INCLUDE_EX
#undef INCLUDE_ENP
#undef INCLUDE_SM_NET
#undef INCLUDE_SM_SEQ_ADD
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 

    上电后,如果boot和加载vxworks image顺利(ifAddrSet()不引起死机),反复用hard reset和tShell
中的reboot命令,则一直不会出现死机的现象。如果这时掉电重启,则可能就会出现死机的现象。

     分析一下上述的现象,上电重启后,处理器的某些寄存器可能处于不确定的状态;或者,在bootConfig.c
中进行网络初始化时,出现了异常。

     ifAddrSet()这个函数,是vxworks的库函数。在bootConfig.c中调用该函数,操作的过程应该只涉及到
SDRAM的读写和mpc880处理器的CPM。

     SDRAM的读写应该没有问题,那么可能出问题的地方就在cpm的操作上了。

     但是ifAddrSet()这个函数,具体会对cpm有什么影响呢?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(高级)

13
 
遇到这种情况,其实不是死机,而是因为你的某个函数调用需要等到某种资源block在那了.时间长了,具体情况忘记了,好象当时是需要设置网网络地址,在程序里面设置好之后就可以继续运行了.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

14
 

    各位高手,这个问题今天解决了。

     在此,我感谢提出意见的高手!

     问题出在网络的初始化上,我将bootConfig.c中涉及到网络初始化的那些操作再次初始化了一遍。
目前,启动过程正常。还没有出现死机的现象。

     
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表