我已经浏览了 Linux 内核源代码中的一些驱动程序实现,可以看到这些是平台驱动程序。
drivers/net/ethernet/smsc/smsc911x.c
static struct platform_driver smc911x_driver = {
.probe = smc911x_drv_probe,
.remove = smc911x_drv_remove,
.suspend = smc911x_drv_suspend,
.resume = smc911x_drv_resume,
.driver = {
.name = CARDNAME,
.owner = THIS_MODULE,
},
};
上面是平台设备(基于 smsc 的以太网控制器)的驱动程序,平台设备是在系统启动期间不会自动探测的设备,与 pci 总线上的传统设备不同。
我想我的这个理解在这里可以吗?
现在,当我说它是平台设备时,是否意味着这些设备(以太网控制器)位于平台总线上,而在 ARM 架构上,默认平台总线是 AMBA。
那么,当我们在基于 ARM 的板上焊接以太网控制器时,它应该位于 AMBA 总线上或与 AMBA 总线连接吗?
我们如何决定要编写的驱动程序是平台驱动程序还是普通驱动程序?
根据我开发 ARM 平台驱动程序的有限经验,AMBA 设备通常在其内存映射 IO 寄存器接口的末尾有标识寄存器。
一般来说,如果您查看以太网控制器的参考手册,并且寄存器摘要指定了外设/组件标识寄存器(通常位于偏移量 0xFE0-0xFEC 和 0xFF0-0xFFC),则您应该编写 AMBA 总线驱动程序。公交车司机可以自动识别这些司机。
否则,如果寄存器接口未在偏移量 0xFE0-0xFEC 和 0xFF0-0xFFC 处指定任何 ID 寄存器,您可能只想编写一个平台驱动程序。这些设备无法自动识别,您需要专门为设备附加驱动程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)