在总线匹配设备和驱动的时候,会调用probe函数然后再调用驱动自己的probe函数,
从而初始化驱动
以i2c为例:
probe函数也是驱动结构体(struct i2c_driver)中很重要的一个函数
而设备本身并不需要有probe函数。实际上,设备的存在是通过硬件描述(例如设备树或ACPI表)或总线扫描来确定的。
当内核检测到一个设备时,它会尝试找到合适的驱动程序,并调用该驱动程序的probe函数来初始化设备。
在device的角度
1.设备注册设备号 device_register(dev)
2.设备初始化 device_initialize()
3.设备添加到内核 device_add(dev)
4.添加到bus上 bus_add_device(dev)
5.等待调用probe bus_probe_device(dev)
在driver的角度
1.注册driver driver_register(drv)
2.绑定到bus上 bus_add_driver(dev)
3.device_attach(dev)
4.bus去找设备,然后driver_attach(drv,dev)
5.匹配到了驱动和设备 driver_match_device(drv,dev)
6.调用probe driver_probe_device(drv,dev)
7.really_probe(drv,dev)
可以看出,在这个过程中设备是被动地在等待,
当内核检测到一个设备时,它会调用驱动程序的probe函数,以便驱动程序可以初始化设备、分配资源、设置寄存器等
probe函数通常有以下结构:
static i