背景:这两天在看《嵌入式Linux驱动开发基础知识》中的 “总线设备驱动模型”,看视频有讲到 DTS 中创建了两个设备 led0 和 led1,他们的 compatible 属性完全一样,说明他们都使用了同一个驱动。
驱动代码: “05_嵌入式Linux驱动开发基础知识\source\02_led_drv\05_led_drv_template_device_tree”
问题:看视频是只加载了一次 chip_demo_gpio.ko,但是实际上是创建了两个设备节点 /dev/led0 和 /dev/led1,能否帮忙解答一下加载 ko 后,里面具体的流程是怎么样的?platform_driver_register 注册驱动后,是遍历了 device 那个链表,匹配了两个设备,分别跑了两次 probe 函数吗?我看到网上说只跑了一次 probe,但是传了两个 device。不太清楚到底哪个是对的,请大神帮忙解答一下!
当有多个匹配的设备时,probe
函数通常会被多次调用,每次调用对应一个匹配的设备。所以,如果有两个匹配的设备,probe
函数应该被调用两次,每次传递一个不同的设备描述符作为参数。
非常感谢解答!所以您的意思是,注册驱动遍历设备的时候,就算匹配上了一个设备,跑完 probe 后,还是会继续遍历设备链表上剩余的设备是吧?