dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent); // 生成bus节点的platform_device结构体 if (!dev || !of_match_node(matches, bus)) // 如果bus节点的compatile属性不吻合matches成表, 就不处理它的子节点 return 0; for_each_child_of_node(bus, child) { // 取出...
dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent); // 生成bus节点的platform_device结构体 if (!dev || !of_match_node(matches, bus)) // 如果bus节点的compatile属性不吻合matches成表, 就不处理它的子节点 return 0; for_each_child_of_node(bus, child) { // 取出...
struct device_node *of_find_matching_node_and_match(struct device_node *from,const struct of_device_id *matches, const struct of_device_id **match) 函数参数和返回值含义如下: from:开始查找的节点,如果为 NULL 表示从根节点开始查找整个设备树。 matches: of_device_id 匹配表,也就是在此匹配表里面...
of_find_matching_node_and_match通过 of_device_id 匹配表来查找指定的节点,函数原型如下: structdevice_node *of_find_matching_node_and_match(structdevice_node *from,conststructof_device_id *matches,conststructof_device_id `match); 函数参数和返回值含义如下: from:开始查找的节点,如果为 NULL 表示从...
of_platform_populate(NULL, of_default_bus_match_table,NULL,NULL) for_each_child_of_node(root, child) { rc = of_platform_bus_create(child, matches, lookup,parent,true);// 调用过程看下面 dev = of_device_alloc(np, bus_id,parent);// 根据device_node节点的属性设置platform_device的resource...
(2)我们可以看到,这里其实就是platform_driver.driver.of_match_table与设备树的compatible 属性进行匹配。(如下图) static inline int of_driver_match_device(struct device *dev,const struct device_driver *drv) { return of_match_device(drv->of_match_table, dev) != NULL; ...
of_address.h :地址相关的函数, 比如 of_get_address(获得reg属性中的addr, size值) of_device.h :设备相关的函数, 比如 of_match_device、of_device_register of_dma.h :设备树中DMA相关属性的函数 of_fdt.h dtb:文件的相关操作函数,我们一般不使用 ...
第6行,通过MODULE_DEVICE_TABLE声明一下leds_of_match这个设备匹配表。第11行,设置platform_driver中的of_match_table匹配表为上面创建的leds_of_match,至此我们就设置好了platform驱动的匹配表了。3、编写platform驱动 基于设备树的platform驱动和上一章无设备树的platform驱动基本一样,都是当驱动和设备匹配成功以后...
(2)platform_driver.driver里面我们增加了一个of_match_table变量,led_dtb。这个是用于和设备树进行匹配的。关于驱动程序和设备匹配规则不太明白的同学,建议看一下 Linux驱动与设备的匹配规则。 (3)我们在of_match_table变量中需要传入const struct of_device_id类型的数组。这里里面的of_device_id结构体中的compatib...
struct device_driver{constchar*name;struct bus_type*bus;struct module*owner;constchar*mod_name;/* used for built-in modules */bool suppress_bind_attrs;/* disables bind/unbind via sysfs */conststruct of_device_id*of_match_table;conststruct acpi_device_id*acpi_match_table;int(*probe)(struct...