TI OMAP 3530 psp compile note(4)——- 在devkit8000的板子上運行(2)

來源:互聯網
上載者:User

這次說到是網卡驅動。

這個費了我很多時間。

 

我首先使用內建到dm9000的驅動,然後編譯,下載,載入執行。到網卡驅動載入到時候(啟用網卡,IP-Config),發現只是列印一句:

 

dm9000 Ethernet Driver, V1.31

 

然後就是等待。

 

我查看正常到啟動過程,下一步應該是要列印probe中到一個資訊,即dm9000註冊成功,類似:

 

eth0: dm9000a at c8858000, c885c400 IRQ 185 MAC: aa:bb:cc:dd:ee:ff (chip)

 

但其中沒有,我有點奇怪,probe為啥沒執行到呢?

 

疑惑很久,先懷疑是新核心中到驅動有問題,按照老到核心中的dm9000驅動修改了一些,其實也就是初始化了mac地址,然後讓從eeprom讀mac地址改為一個死的地址賦值。還是不行。

 

然後把老到驅動直接拿過來替換,遇到很多編譯問題,比如最明顯一個:

 

          //board_info_t *db = (board_info_t *) dev->priv;
        board_info_t *db = netdev_priv(dev);    // rings wpl add

 

上面的是老的代碼,要修改成下面到樣子,類似此處很多,需要一一修改過來,當然還有其他問題,都是類似。

 

這樣改過以後,還是不行。

 

仔細思考。

仔細思考。

大概一天。

 

想起驅動初始化到時候,所謂中斷,基地址等資源。然後想起應該有個地方初始化,當然想到了linux-03.00.01.06_baegle/arch/arm/mach-omap2/board-omap3beagle.c

 

原來當時用了beagle到此檔案,有些東西沒有添加進來,比如:

 

#define OMAP_DM9000_GPIO_IRQ    25

static void __init omap_dm9000_init(void)
{
        if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) {
                printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ/n",
                        OMAP_DM9000_GPIO_IRQ);
                return;
        }

        gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
}

 

起源是omap3_beagle_init_irq中,在最後,要添加        omap_dm9000_init() 調用。

 

這是中斷。

 

資源,先是:

 

static struct platform_device *omap3_beagle_devices[] __initdata = {
        &omap3_beagle_lcd_device,
        &leds_gpio,
        &keys_gpio,
        &omap_dm9000_dev,       // wpl add
};

 

涉及到:

 

static struct platform_device omap_dm9000_dev = {
        .name = "dm9000",
        .id = -1,
        .num_resources  = ARRAY_SIZE(omap_dm9000_resources),
        .resource       = omap_dm9000_resources,
        .dev = {
                .platform_data = &omap_dm9000_platdata,
        },
};

 

再涉及到:

 

static struct resource omap_dm9000_resources[] = {
        [0] = {
                .start          = OMAP_DM9000_BASE,
                .end            = (OMAP_DM9000_BASE + 0x4 - 1),
                .flags          = IORESOURCE_MEM,
        },
        [1] = {
                .start          = (OMAP_DM9000_BASE + 0x400),
                .end            = (OMAP_DM9000_BASE + 0x400 + 0x4 - 1),
                .flags          = IORESOURCE_MEM,
        },
        [2] = {
                .start          = OMAP_GPIO_IRQ(OMAP_DM9000_GPIO_IRQ),
                .end            = OMAP_GPIO_IRQ(OMAP_DM9000_GPIO_IRQ),
                .flags          = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
        },
};

 

如果提示IRQF_TRIGGER_LOW未定義,還有其它錯誤,記得添加:

 

#include <linux/dm9000.h>
#include <linux/interrupt.h>

 

然後,編譯,就可以了。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.