这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 急切求助关于8260双网口BSP配置的问题!!!

共3条 1/1 1 跳转至

急切求助关于8260双网口BSP配置的问题!!!

菜鸟
2004-09-30 04:34:18     打赏
前面的文章看过了,自己也仔细分析过BSP,但现在感觉仍然无从下手.真诚的请高手相救! 我先说说现在改的情况! confignet.h中: { 0, MOT_FCC_LOAD_FUNC, MOT_FCC_LOAD_STRING, 1, NULL, FALSE}, /* FCC3 */ { 1, MOT_FCC_LOAD_FUNC, MOT_FCC_LOAD_STRING, 1, NULL, FALSE}, /* FCC2 */ config.h中: #define MAX_END_DEVS 4 /*此处加入第二个网卡的IP地址*/ if (boardID == 0) \ /*只有在boardID=0时才支持多个网卡,原因未知!*/ { \ ipAttach(1,"motfcc"); \ /* Call ifAddrSet("motfcc1","Your.IP.Address.Here"); to */ \ /* give the second network interface an IP address. */ \ } \ sysmotFccEnd.c中需要修改END_OBJ * sysMotFccEndLoad(): (为了看的方便,我只列出可能与需要修改有关的地方.这是原始的支持一个Fcc的情况) char paramStr [300]; int unitNumber; .... if (strlen (pParamStr) == 0) { /* * muxDevLoad() calls us twice. If the string is * zero length, then this is the first time through * this routine. */ pEnd = (END_OBJ *) motFccEndLoad (pParamStr);/*此处调用驱动程序m8260FccEnd.c */ }else{ ------------------------------------------------------------------------- /* Chuck (PTR Group) Added: */ unitNumber = pParamStr[0] - '0'; ..... /* finish off the initialization parameter string */ sprintf (pStr, motFccEndParamTemplate, (UINT) vxImmrGet (), (unitNumber ? MOT_FCC_NUM_UNIT1 : MOT_FCC_NUM_UNIT0), /* * 前面有这两个变量的定义,分别表示Fcc3和Fcc2 * #define MOT_FCC_NUM_UNIT0 0x03 /* FCC3 is unit 0 */ * #define MOT_FCC_NUM_UNIT1 0x02 /* FCC2 is unit 1 */ */ motFccBufsDescAdr, motFccBufsDescSize, motFccBufsAdr, motFccBufsSize, -1UL,-1UL, MOT_FCC_TBD_NUM, MOT_FCC_RBD_NUM, MOT_FCC_PHY_ADDR, /* PHY address */ MOT_FCC_DEF_PHY_MODE, &motFccAnOrderTbl, motFccFlags, 3, /* driver allocates (3 * MOT_FCC_RBD_NUM) mblks */ 4 /* driver allocates (4 * MOT_FCC_RBD_NUM) clusters */ ); if ((pEnd = (END_OBJ *) motFccEndLoad(paramStr)) == (END_OBJ *)ERROR) { logMsg ("Error: motFccEndLoad failed to load driver\n", 0, 0, 0, 0, 0, 0); } } 根据版上兄弟们的说法,可将里面的sprintf扩展: if (pParamStr[0] == '0') ....(Fcc3) else if (pParamStr[0] == '1') ....(Fcc2) 但我还是不能明白,怎么保证在两次load device(Fcc2和Fcc3)的时候pParamStr[0]分别取0和1呢?这个地方我跟了程序好久还是没明白. 另一个问题是如果这样做,那么上面string里的MOT_FCC_PHY_ADDR在两个Fcc各自的配置似乎需要改动? 最后一个问题是除此之外,其他地方是否无须改动?(当然除了还要配置Fcc2的MII接口),很担心还遗漏了什么. btw:我原来的想法是根据bootconfig.c中的usrRoot()里初始化设备的一段函数: #ifdef INCLUDE_END /* initialize the MUX */ muxMaxBinds = MUX_MAX_BINDS; if (muxLibInit() == ERROR) return; /* can't return ERROR */ /* Initialize all the available devices. */ for (count = 0, pDevTbl = endDevTbl; pDevTbl->endLoadFunc != END_TBL_END; pDevTbl++, count++) { cookieTbl[count].pCookie = muxDevLoad (pDevTbl->unit, pDevTbl->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); } #endif /* INCLUDE_END */ 将上面的sysMotFccEndLoad()复制一段为sysMotFccEndLoad1(),并将endDevTbl[]表中改为: { 0, MOT_FCC_LOAD_FUNC, MOT_FCC_LOAD_STRING, 1, NULL, FALSE}, /* FCC3 */ { 1, MOT_FCC_LOAD_FUNC1, MOT_FCC_LOAD_STRING1, 1, NULL, FALSE}, /* FCC2 */ 虽然感觉比较别扭,但也不知道有没有错,所以写出来,不怕被鄙视,呵呵! 罗嗦了半天,要嫌烦了,但真的很希望有人帮帮我,我这边找个讨论的人都没有,惨啊! [align=right][color=#000066][此贴子已经被作者于2004-9-29 22:22:31编辑过][/color][/align]



关键词: 急切     求助     关于     8260双     网口     配置     问题    

菜鸟
2004-09-30 18:35:00     打赏
2楼

我的做法是,两个接口的MOT_FCC_LOAD_FUNC不一样。这样就可以指定使用哪个fcc了。

举例:sysMotFccEnd.c中本来只有一个sysMotFccEndLoad,我把它改为sysMotFccEndLoad1,然后拷贝一份,更名为sysMotFccEndLoad2,根据实际情况修改sysMotFccEndLoad2的内容。这样第一个网口使用sysMotFccEndLoad1,第二个使用sysMotFccEndLoad2。

此外,要修改IP_MAX_UNITS,使其大于1。


菜鸟
2004-10-06 04:22:00     打赏
3楼

是这样的,ep8260板上原来自带了一个网口,并且现在我们的BSP已经能够跑起来,并支持该网口(Lxt971),现在在想在加一个网口(使用同样的网口芯片),并改BSP,使之支持两个网口,两个网口的工作方式完全一样.我没有弄明白zhyxue兄弟的意思.

另外,继续请教gem2000大哥,我原先的想法也是和你一样,再拷贝一份sysMotFccEndLoad,命名为sysMotFccEndLoad2给Fcc2用,现在的问题是拷贝完了后还需要修改sysMotFccEndLoad2函数,感觉是只需要修改一下sprintf(........)中的unitnumber为Fcc2即可,其他的完全不需要修改(除了配置参数如速度,双工方式及协商模式等可以修改外),不知道这样理解对否?

最后一个问题是关于取MAC地址.(IP地址的设置我已经知道了,调用ipAttach,ifMaskSet,ifAddrSet这三个函数,应该没错吧?): 现在bootloader启动时(只有一个网口),能打印显示出该fcc3的MAC地址,但是我怎么也没搞明白这个MAC地址是最初在哪里以及怎么设置的(BSP里提示说是由boot loader存放在DPRAM中的,在sysInit函数中),我想必须先把这个问题搞清楚了才能去修改sysEnetAddrGet,使之能取到第二个fcc的MAC地址.请指教!

[align=right][color=#000066][此贴子已经被作者于2004-10-5 21:49:08编辑过][/color][/align]

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]