总线驱动和普通驱动的区别

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_37600027/article/details/84023676

1.总线驱动中不但有驱动的注册,还有设备的注册,当设备注册的时候会寻找与之匹配的驱动,相反的注册驱动的时候也会寻找与之匹配的设备,由函数match完成,如果匹配成功了那就表明这个设备已经可以使用了

struct platform_device s3c_device_wdt =
{
        .name = "s3c2410-wdt", //设备名
        .id = - 1, .

};

2.普通驱动直接注册驱动就可以了,

        当一个设备想要注册进这个amba总线时,它就会调用以初始化好了的amba_driver结构调用amba_driver_register()这个驱动注册函数。而下一步这个函数就会调用通用的驱动注册函数driver_register。
这个函数对其他函数的调用路径如下:
        driver_register -> bus_add_driver -> driver_attach -> __driver_attach(对每个设备) -> driver_probe_device -> drv->bus->match(dev, drv)(检查这个设备是否与新注册的驱动匹配) ->    really_probe -> dev->bus->probe(dev)(如果存在) (否则) -> drv->probe(dev)
        而且我们还可以看到,传递给驱动probe的参数,是一个具体的设备。这个结构是设备注册的时候已经分配好的了。
3)设备的注册
        当往系统插入一个新的设备时,他就会调用amba_device_register函数,这个过程跟驱动注册的过程差不多。
        总线维护两个队列,一个用于设备,一个用于驱动。当一个新的设备加入是,这个设备结构会链进设备队列。而当一个驱动加入是,它就会加入驱动队列。而且,无论是设备还是驱动,当有插入操作是,它都会遍历另一个队列,寻找相应的驱动或设备,如果找到匹配的, 就会就行drv->device = dev, dev->driver=drv操作,这个某个设备就和某个驱动关联了起来。这就是说这个驱动就可以用了。

4.amba-pl011驱动首先会注册设备,然后注册驱动,注册驱动时会匹配设备,匹配成功之后会直接调用probe配置端口相关信息,配置完成之后该串口才可以使用,才可以open-》write

猜你喜欢

转载自blog.csdn.net/qq_37600027/article/details/84023676
今日推荐