当前位置: 代码迷 >> VxWorks >> 关于END设备名初始化的有关问题
  详细解决方案

关于END设备名初始化的有关问题

热度:8474   发布时间:2013-02-26 00:00:00.0
关于END设备名初始化的问题
近我在调试BOOT程序。目前串口已经调试好,希望BOOT程序能支持网口下载vxWorks镜像。但是遇到了一个棘手的问题。
在现在END网络程序不清楚地情况下,我在BOOT命令行下输入命令:
$ motfec (0,0)host:vxWorks e=10.1.1.2 h=10.1.1.1 u=anonymous pw=user f=0x80 tn=ep8xx
得到结果:

---------------------------------------------------------
 “[VxWorks Boot]:
[VxWorks Boot]: $ motfec (0,0)host:vxWorks e=10.1.1.2 h=10.1.1.1 u=anonymous pw=
user f=0x80 tn=ep8xx

boot device : motfec
unit number : 0
processor number : 0
host name : host
file name : vxWorks
inet on ethernet (e) : 10.1.1.2
host inet (h) : 10.1.1.1
user (u) : anonymous
ftp password (pw) : user
flags (f) : 0x80
target name (tn) : ep8xx

def INCLUDE_END

motfec
attached==0

---------------------------------------------------------------
  图1


我的LOCAL STATUS bootLoad (char * bootString,FUNCPTR *pEntry) 函数里面的“pCookie=findCookie(params.unitNum, bootDev);”命令行总是返回NULL值。findCookie()函数如下:
LOCAL void* findCookie(int unitNo,char* devName )
{
  int count;
  for(count=0;count<32;count++)
{
if((cookieTbl[count].unitNo==unitNo) && 
(STREQ(cookieTbl[count].devName,devName)))
  return(cookieTbl[count].pCookie);
}
printf("%s\n",cookieTbl[count].devName);
printf("%s\n",devName);
  return (NULL);
  }
我发现cookieTbl[count].devName是个空值,在bootConfig.C的usrRoot()函数中的END网络设备初始化阶段,并没有对cookieTbl[count].devName进行初始化。遍查程序其他地方,也没有找到对cookieTbl[count].devName进行初始化的地方。
usrRoot()函数中END网络设备初始化代码如下:
for (count = 0, pDevTbl = endDevTbl; pDevTbl->endLoadFunc != END_TBL_END;
pDevTbl++, count++)
{
cookieTbl[count].pCookie=muxDevLoad(pDevTbl->unit, DevTbl->endLoadFunc,
pDevTbl->endLoadString,pDevTbl->endLoan, pDevTbl->pBSP);
   
if (cookieTbl[count].pCookie == NULL) { printf ("muxLoad failed!\n"); }
cookieTbl[count].unitNo=pDevTbl->unit;
bzero((void *)cookieTbl[count].devName,END_NAME_MAX);
pDevTbl->endLoadFunc((char*)cookieTbl[count].devName, NULL);
}
我试图在上面一段程序之后加一段初始化程序,如下:
cookieTbl[0].devName[0]='m';
cookieTbl[0].devName[1]='o';
cookieTbl[0].devName[2]='t';
cookieTbl[0].devName[3]='f';
cookieTbl[0].devName[4]='e';
cookieTbl[0].devName[5]='c';
目前我只有1个网络设备,而且名字想定义为“motfec”。但是自己初始化设备名后,结果比图1所示的结果更乱了,像是死在了“bootParamsShow (BOOT_LINE_ADRS);”函数里。bootParamsShow()函数是个库函数,函数源代码无法看到。
请问,各位大侠,“cookieTbl[count].devName”网络设备名的初始化是在什么地方进行的?如何进行的?


------解决方案--------------------------------------------------------
在网络接口能用于发送或接收数据帧前,必须将设备装载到MUX中,也就是调用muxDevLoad,此函数会初始化cookieTbl
------解决方案--------------------------------------------------------
endLoad 函数里有end设备名字的,此函数调用两遍,第一次获得设备名字,第二次执行初始化
------解决方案--------------------------------------------------------
看起来像是configNet.h中没有把你的Load函数加进去。
  相关解决方案