共3条
1/1 1 跳转至页
急切求助关于8260双网口BSP配置的问题!!!
只看楼主 1楼
前面的文章看过了,自己也仔细分析过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双 网口 配置 问题
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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |