我在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总线相连或接口?
我们如何确定我们要编写的驱动程序是平台驱动程序还是普通驱动程序?
答案 0 :(得分:2)
根据我在开发ARM平台驱动程序方面的有限经验,AMBA设备通常在其内存映射IO寄存器接口的末尾具有标识寄存器。
一般来说,如果查看以太网控制器的参考手册,寄存器摘要指定外设/组件标识寄存器(通常在偏移量0xFE0-0xFEC和0xFF0-0xFFC),则应编写AMBA总线驱动程序。总线驱动程序可以自动识别这些驱动程序。
否则,如果寄存器接口未在偏移量0xFE0-0xFEC和0xFF0-0xFFC处指定任何ID寄存器,您可能只想编写平台驱动程序。无法自动识别这些设备,您需要专门将驱动程序连接到设备。