亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7360 | 回復: 9
打印 上一主題 下一主題

移植支持dm9000的u-boot-1.1.6問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-06-10 11:14 |只看該作者 |倒序瀏覽
本帖最后由 yians 于 2010-06-10 11:18 編輯

由于一些原因選用了u-boot-1.1.6移植到mini2440,現(xiàn)在在dm9000網(wǎng)卡驅(qū)動這卡住了。
問題是這樣的:
我將dm9000的一些宏定義添加完后在編譯燒寫,啟動u-boot,串口會出現(xiàn)“Net:No ethernet found.”。我發(fā)現(xiàn)它是在net/eth.c中的eth_initialize()里打印的:
00255:        if (!eth_devices) {
00256:                puts ("No ethernet found.\n" );
而eth_initialize()是在lib-arm/board.c中start_armboot()中調(diào)用。
于是我去找給eth_devices賦值的地方,可是在eth_initialize()中除了在初始的地方給eth_devices=NULL以外,并沒有更改,也就是這種錯誤是應該的?那dm9000的初始化應該在哪做的呢?

還有我發(fā)現(xiàn)eth.c中和dm9000x.c中都定義eth_init(),eth_halt()等函數(shù),這不會導致沖突嗎?其實這個問題對于cs8900也是一樣的。到底如何解釋呢?
這在最新版的u-boot里沒有問題,最新版中dm9000x.c已經(jīng)改為dm9000_init(),dm9000_halt(),初始化過程與1.1.6也不一樣,所以希望能從1.1.6給出解釋。

真的謝謝了,我實在是自己解決不了了。
1.1.6版本的u-boot可以在 http://www.icdev.com.cn/batch.viewlink.php?itemid=1694 里下。期待好心人啊。

eth_initialize()的代碼如下:
int eth_initialize(bd_t *bis)
{
        char enetvar[32], env_enetaddr[6];
        int i, eth_number = 0;
        char *tmp, *end;

        eth_devices = NULL;
        eth_current = NULL;

#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
        miiphy_init();
#endif

#ifdef CONFIG_DB64360
        mv6436x_eth_initialize(bis);
#endif
#ifdef CONFIG_CPCI750
        mv6436x_eth_initialize(bis);
#endif
#ifdef CONFIG_DB64460
        mv6446x_eth_initialize(bis);
#endif
#if defined(CONFIG_4xx) && !defined(CONFIG_IOP480) && !defined(CONFIG_AP1000)
        ppc_4xx_eth_initialize(bis);
#endif
#ifdef CONFIG_INCA_IP_SWITCH
        inca_switch_initialize(bis);
#endif
#ifdef CONFIG_PLB2800_ETHER
        plb2800_eth_initialize(bis);
#endif
#ifdef SCC_ENET
        scc_initialize(bis);
#endif
#if defined(CONFIG_MPC5xxx_FEC)
        mpc5xxx_fec_initialize(bis);
#endif
#if defined(CONFIG_MPC8220_FEC)
        mpc8220_fec_initialize(bis);
#endif
#if defined(CONFIG_SK98 )
        skge_initialize(bis);
#endif
#if defined(CONFIG_MPC85XX_TSEC1)
        tsec_initialize(bis, 0, CONFIG_MPC85XX_TSEC1_NAME);
#elif defined(CONFIG_MPC83XX_TSEC1)
        tsec_initialize(bis, 0, CONFIG_MPC83XX_TSEC1_NAME);
#endif
#if defined(CONFIG_MPC85XX_TSEC2)
        tsec_initialize(bis, 1, CONFIG_MPC85XX_TSEC2_NAME);
#elif defined(CONFIG_MPC83XX_TSEC2)
        tsec_initialize(bis, 1, CONFIG_MPC83XX_TSEC2_NAME);
#endif
#if defined(CONFIG_MPC85XX_FEC)
        tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME);
#else
#    if defined(CONFIG_MPC85XX_TSEC3)
        tsec_initialize(bis, 2, CONFIG_MPC85XX_TSEC3_NAME);
#    elif defined(CONFIG_MPC83XX_TSEC3)
        tsec_initialize(bis, 2, CONFIG_MPC83XX_TSEC3_NAME);
#    endif
#    if defined(CONFIG_MPC85XX_TSEC4)
        tsec_initialize(bis, 3, CONFIG_MPC85XX_TSEC4_NAME);
#    elif defined(CONFIG_MPC83XX_TSEC4)
        tsec_initialize(bis, 3, CONFIG_MPC83XX_TSEC4_NAME);
#    endif
#endif
#if defined(CONFIG_MPC86XX_TSEC1)
       tsec_initialize(bis, 0, CONFIG_MPC86XX_TSEC1_NAME);
#endif

#if defined(CONFIG_MPC86XX_TSEC2)
       tsec_initialize(bis, 1, CONFIG_MPC86XX_TSEC2_NAME);
#endif

#if defined(CONFIG_MPC86XX_TSEC3)
       tsec_initialize(bis, 2, CONFIG_MPC86XX_TSEC3_NAME);
#endif

#if defined(CONFIG_MPC86XX_TSEC4)
       tsec_initialize(bis, 3, CONFIG_MPC86XX_TSEC4_NAME);
#endif

#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
        fec_initialize(bis);
#endif
#if defined(CONFIG_AU1X00)
        au1x00_enet_initialize(bis);
#endif
#if defined(CONFIG_IXP4XX_NPE)
        npe_initialize(bis);
#endif
#ifdef CONFIG_E1000
        e1000_initialize(bis);
#endif
#ifdef CONFIG_EEPRO100
        eepro100_initialize(bis);
#endif
#ifdef CONFIG_TULIP
        dc21x4x_initialize(bis);
#endif
#ifdef CONFIG_3COM
        eth_3com_initialize(bis);
#endif
#ifdef CONFIG_PCNET
        pcnet_initialize(bis);
#endif
#ifdef CFG_GT_6426x
        gt6426x_eth_initialize(bis);
#endif
#ifdef CONFIG_NATSEMI
        natsemi_initialize(bis);
#endif
#ifdef CONFIG_NS8382X
        ns8382x_initialize(bis);
#endif
#if defined(CONFIG_RTL8139)
        rtl8139_initialize(bis);
#endif
#if defined(CONFIG_RTL8169)
        rtl8169_initialize(bis);
#endif

        if (!eth_devices) {
                puts ("No ethernet found.\n" );
        } else {
                struct eth_device *dev = eth_devices;
                char *ethprime = getenv ("ethprime" );

                do {
                        if (eth_number)
                                puts (", " );

                        printf("%s", dev->name);

                        if (ethprime && strcmp (dev->name, ethprime) == 0) {
                                eth_current = dev;
                                puts (" [PRIME]" );
                        }

                        sprintf(enetvar, eth_number ? "eth%daddr" : "ethaddr", eth_number);
                        tmp = getenv (enetvar);

                        for (i=0; i<6; i++) {
                                env_enetaddr = tmp ? simple_strtoul(tmp, &end, 16) : 0;
                                if (tmp)
                                        tmp = (*end) ? end+1 : end;
                        }

                        if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
                                if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) &&
                                    memcmp(dev->enetaddr, env_enetaddr, 6))
                                {
                                        printf ("\nWarning: %s MAC addresses don't match:\n",
                                                dev->name);
                                        printf ("Address in SROM is         "
                                               "%02X:%02X:%02X:%02X:%02X:%02X\n",
                                               dev->enetaddr[0], dev->enetaddr[1],
                                               dev->enetaddr[2], dev->enetaddr[3],
                                               dev->enetaddr[4], dev->enetaddr[5]);
                                        printf ("Address in environment is  "
                                               "%02X:%02X:%02X:%02X:%02X:%02X\n",
                                               env_enetaddr[0], env_enetaddr[1],
                                               env_enetaddr[2], env_enetaddr[3],
                                               env_enetaddr[4], env_enetaddr[5]);
                                }

                                memcpy(dev->enetaddr, env_enetaddr, 6);
                        }

                        eth_number++;
                        dev = dev->next;
                } while(dev != eth_devices);

#ifdef CONFIG_NET_MULTI
                /* update current ethernet name */
                if (eth_current) {
                        char *act = getenv("ethact" );
                        if (act == NULL || strcmp(act, eth_current->name) != 0)
                                setenv("ethact", eth_current->name);
                } else
                        setenv("ethact", NULL);
#endif

                putc ('\n');
        }

        return eth_number;
}

論壇徽章:
0
2 [報告]
發(fā)表于 2010-06-10 12:12 |只看該作者
lz看清楚編譯條件,有的函數(shù)是不被編譯的。

論壇徽章:
0
3 [報告]
發(fā)表于 2010-06-10 12:34 |只看該作者
eth.c中和dm9000x.c中都定義eth_init(),eth_halt()等函數(shù),

請注意

  1. #if defined(CONFIG_RTL8139)
  2.          #endif
復制代碼

論壇徽章:
0
4 [報告]
發(fā)表于 2010-06-10 14:40 |只看該作者
本帖最后由 yians 于 2010-06-10 14:51 編輯

回復 3# aaaaa5aa


    你好,這兒的網(wǎng)卡是dm9000,不是rtl8139網(wǎng)卡,你說的宏是不被定義的。

論壇徽章:
0
5 [報告]
發(fā)表于 2010-06-10 14:47 |只看該作者
回復 2# klanet


     這里不光是被編譯的問題。您能解釋一下dm9000要正常工作,是如何得到struct eth_device變量,接著eth_register(strcuct eth_device *)的嗎?
   移植dm9000部分時,并沒有添加這種相關(guān)代碼,一般都是添加一些宏;蛘哒fcs8900也沒有。

論壇徽章:
0
6 [報告]
發(fā)表于 2010-06-10 17:05 |只看該作者
你要自己初始化eth_device。
參考一下其他網(wǎng)卡的代碼。應該有共性。

論壇徽章:
0
7 [報告]
發(fā)表于 2010-06-10 20:41 |只看該作者
回復 6# klanet

我認為也是這樣,我就不知道‘網(wǎng)上一般的方法’光修改添加個宏怎么就能用了。
我準備用新版的u-boot了,希望以后能有機會把這個問題弄明白。

論壇徽章:
0
8 [報告]
發(fā)表于 2010-06-10 22:20 |只看該作者
我的意思是你自己那定義了
  1. #ifdef CONFIG_NS8382X
  2.         ns8382x_initialize(bis);
  3. #endif
  4. #if defined(CONFIG_RTL8139)
  5.         rtl8139_initialize(bis);
  6. #endif
  7. #if defined(CONFIG_RTL8169)
  8.         rtl8169_initialize(bis);
  9. #endif
復制代碼
是你自己的代碼,我的意思是一旦定義了就不會再重復定義

所以不會導致沖突

論壇徽章:
2
2015年亞洲杯之阿曼
日期:2015-03-23 18:11:212015亞冠之大阪鋼巴
日期:2015-09-07 13:54:16
9 [報告]
發(fā)表于 2010-06-11 21:49 |只看該作者
net_eth.c里面實際上是有2個eth_initialize()的。分別為定義了CONFIG_NET_MULTI和沒有定義。
如果定義了CONFIG_NET_MULTI那么最后鏈接的時候必然會出現(xiàn)eth_init()重復定義。
如果沒有定義CONFIG_NET_MULTI的話。net_eth.c其實主要是初始化各個網(wǎng)卡的mac。并沒有調(diào)用eth_init,并且其實現(xiàn)了一個通用的eth_init。
具體網(wǎng)卡的收發(fā)是在cmd_net.c里面實現(xiàn)的。包括間接調(diào)用eth_init等等。

所以其實板子的初始化并沒有初始化dm9000,打印No ethernet found。
你所貼的eth_initialize()是定義了CONFIG_NET_MULTI。

論壇徽章:
0
10 [報告]
發(fā)表于 2011-01-06 17:33 |只看該作者
你好, 我是愛欣文科技的 ,有關(guān)于DM9000AEP的問題我們可以提供技術(shù)支持。
                        現(xiàn)在用到的加我QQ1667698625        以后我們可以多多交流!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP