我试图理解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模块?
答案 0 :(得分:1)
它知道,因为您已经告诉它平台设备是USB EHCI控制器:)
在下面的代码中,您告诉内核外围设备的名称是" ixp4xx-ehci"。
.name = "ixp4xx-ehci",
内核将在您注册后的某个时间搜索可以处理此类硬件的驱动程序。无论哪种驱动程序(在您的情况下,ehci-hcd模块)与外围设备名称匹配,都将附加到该设备。
答案 1 :(得分:0)
该问题的更多信息。 Linux设备驱动程序模型揭示了底层关系。有几本好书可以帮助您了解有关Linux设备驱动程序的更多信息。 平台设备和驱动程序都注册到平台总线,当注册驱动程序时,总线驱动程序将尝试匹配匹配它们(通过此处的名称)然后探测设备。