platform_device_register和usb ehci驱动程序

时间:2014-03-03 09:46:54

标签: linux linux-kernel linux-device-driver

我试图理解linux如何在我的cambria(ARM)板上初始化USB EHCI控制器。

linux内核中有一些文件:

arch/arm/mach-ixp4xx/cambria-setup.c

并且USB EHCI控制器有一些定义作为平台设备:

static struct platform_device cambria_usb0_device =  {
    .name       = "ixp4xx-ehci",
    .id     = 0,
    .resource   = cambria_usb0_resources,
    .num_resources  = ARRAY_SIZE(cambria_usb0_resources),
    .dev = {
        .dma_mask       = &ehci_dma_mask,
        .coherent_dma_mask  = 0xffffffff,
    },
};

并引用:

platform_device_register(&cambria_usb0_device);

我的问题是:linux如何知道这个平台设备是USB EHCI控制器,应该为它初始化ehci-hcd.ko模块?

2 个答案:

答案 0 :(得分:1)

它知道,因为您已经告诉它平台设备是USB EHCI控制器:)

在下面的代码中,您告诉内核外围设备的名称是" ixp4xx-ehci"。

    .name       = "ixp4xx-ehci",

内核将在您注册后的某个时间搜索可以处理此类硬件的驱动程序。无论哪种驱动程序(在您的情况下,ehci-hcd模块)与外围设备名称匹配,都将附加到该设备。

答案 1 :(得分:0)

该问题的更多信息。 Linux设备驱动程序模型揭示了底层关系。有几本好书可以帮助您了解有关Linux设备驱动程序的更多信息。 平台设备和驱动程序都注册到平台总线,当注册驱动程序时,总线驱动程序将尝试匹配匹配它们(通过此处的名称)然后探测设备。