我已经在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总线接口?
如何确定我们将要编写的驱动程序是平台驱动程序还是普通驱动程序?
发布于 2014-05-25 12:20:19
根据我在开发ARM平台驱动程序方面的有限经验,AMBA设备通常在内存映射的IO寄存器接口的末尾有标识寄存器。
一般来说,如果您查看以太网控制器的参考手册并指定外围/组件标识寄存器(通常位于偏移量0xFE0-0xFEC和0xFFFC),则应该编写一个AMBA总线驱动程序。这些司机可由巴士司机自动识别。
否则,如果寄存器接口没有在偏移量0xFE0-0xFEC和0xFFFC上指定任何ID寄存器,那么您可能只想编写一个平台驱动程序。无法自动识别这些设备,需要将驱动程序专门附加到设备上。
https://stackoverflow.com/questions/23783649
复制相似问题