免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1801 | 回复: 3
打印 上一主题 下一主题

[驱动] 双网卡 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-31 17:43 |只看该作者 |倒序浏览
双网卡和单网卡驱动一模一样吗?我单独注册设备的时候网卡都能和计算机ping通,但是注册两个设备的时候,其中一个网卡只要插上网线就会提示dm9000.0: status check fail: 127

已经设置成不同的网段了。求论坛大神解决

论坛徽章:
0
2 [报告]
发表于 2014-03-31 21:59 |只看该作者
1.同样的网卡设备,驱动是一样的,只不过硬件资源是不一样的。
2.是不是中断冲突?地址冲突?**_probe函数中,需要platform_device进来一些信息,中断,内存地址等。

可以把你注册platform_device的代码发出来看下。

论坛徽章:
0
3 [报告]
发表于 2014-04-01 11:03 |只看该作者
#define DM9000_BASE_ADDR        MX31_CS0_BASE_ADDR
#define DM9000_IRQ      IOMUX_TO_IRQ(MX31_PIN_GPIO1_0)

static struct resource dm9000_resources[] = {
        {
         .start = DM9000_BASE_ADDR,
         .end = DM9000_BASE_ADDR + 0x01,
         .flags = IORESOURCE_MEM,
         },
        {
         .start = DM9000_BASE_ADDR + 0x02,
         .end = DM9000_BASE_ADDR + 0x03,
         .flags = IORESOURCE_MEM,
         },
        {
         .start = DM9000_IRQ,
         .end = DM9000_IRQ,
         .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
         },
};

static struct dm9000_plat_data dm9000_platdata = {
        .flags = DM9000_PLATF_16BITONLY,
};

static struct platform_device dm9000_device = {
        .name = "dm9000",
        .id = 0,
        .dev = {
                .platform_data = &dm9000_platdata,
                },
        .num_resources = ARRAY_SIZE(dm9000_resources),
        .resource = dm9000_resources,


};

static void mxc_init_enet(void)
{
        int ret=0;

        ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0), "dm9000-irq");
        if (ret)
                printk("failed to get dm9000-irq pin: %d\n", ret);
        else {
                printk(KERN_INFO "Get the GPIO1_0 irq**************************************\n");
                gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_0));
                set_irq_type(IOMUX_TO_IRQ(MX31_PIN_GPIO1_0), IRQF_TRIGGER_HIGH);
                platform_device_register(&dm9000_device);
        }
}


#define DM9000_BASE_ADDR2       MX31_CS1_BASE_ADDR
#define DM9000_IRQ2      IOMUX_TO_IRQ(MX31_PIN_GPIO1_5)

static struct resource dm9000_resources2[] = {
        {
         .start = DM9000_BASE_ADDR2,
         .end =   DM9000_BASE_ADDR2 + 0x01,
         .flags = IORESOURCE_MEM,
         },
        {
         .start = DM9000_BASE_ADDR2 + 0x02,
         .end = DM9000_BASE_ADDR2  + 0x03,
         .flags = IORESOURCE_MEM,
         },
        {
         .start = DM9000_IRQ2,
         .end = DM9000_IRQ2,
         .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
         },
};

static struct dm9000_plat_data dm9000_platdata2 = {
        .flags = DM9000_PLATF_16BITONLY,
};

static struct platform_device dm9000_device2 = {
        .name = "dm9000",
        .id = 1,
        .dev = {
                .platform_data = &dm9000_platdata2,
                },
        .num_resources = ARRAY_SIZE(dm9000_resources2),
        .resource = dm9000_resources2,

};
static void mxc_init_enet2(void)
{
        int ret=0;

        ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_5), "dm90002-irq");
        if (ret)
                printk("failed to get dm90002-irq pin: %d\n", ret);
        else {
                printk(KERN_INFO "Get the GPIO1_5 irq**************************************\n");
                gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_5));
                set_irq_type(IOMUX_TO_IRQ(MX31_PIN_GPIO1_5), IRQF_TRIGGER_HIGH);
                platform_device_register(&dm9000_device2);
        }
}

论坛徽章:
0
4 [报告]
发表于 2014-04-01 22:35 |只看该作者
看了你的另外一个贴,猜测:会不会有可能是gpio设置(或IO复用设置)有问题?理由是,注册两个设备后,一个会不断地进入中断。
查清楚了,为啥不断地进入中断,有可能就找到问题的答案。另外,按照arm-linux-gcc说的加一些log,查看一些信息,或许对问题有帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP