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

这次说到是网卡驱动。

这个费了我很多时间。

 

我首先使用自带到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>

 

然后,编译,就可以了。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值