populate_node() device_nodes 结点如下: device_node 创建完成后,kernel 创建 platform_device 时依据这个阶段完成的工作情况进行对应的设备注册,供驱动代码使用。
pinctrl_get/* 构建pinctrl */create_pinctrl(dev);/* 分配pinctrl */p = kzalloc(sizeof(*p), GFP_KERNEL);/* 设备树节点转换为pinctrl_map */pinctrl_dt_to_map(p);/* 每个pinctrl_map,又被转换为一个pinctrl_setting,添加到setting链表 */for_each_maps(maps_node, i,map) { ret = add_setting(...
解析分两个阶段,第一阶段进行校验以及启动参数的再调整;第二阶段完成设备树的解压,也就是将设备树由 FDT 变成 EDT,创建 device_node。 第一阶段 kernel 启动日志中与设备树相关的第一条打印如下,也就是打印出当前硬件设备的模型名,"OF: fdt: Machine model: V2P-CA9" Booting Linux on physical CPU 0x0 Linux...
*/ struct bus_type { const char *name; const char *dev_name; struct device *dev_root; struct device_attribute *dev_attrs; /* use dev_groups instead */ const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int ...
Linux设备树详解(三) 内核解析DTB成device_node Linux 一、背景 前面我们了解到dtb的内存分布以后(dtb格式),接下来就来看看内核是如何把设备树解析成所需的device_node。 平台:arm 内核版本:Linux 5.19 二、解析详细流程 三、设备树的执行入口setup_arch
if(of_irq_to_resource_table(np,res,num_irq)!=num_irq)pr_debug("not all legacy IRQ resources mapped for %s\n",\np->name);}//将platform_device的dev.of_node成员指针指向device_node。dev->dev.of_node=of_node_get(np);//将platform_device的dev.fwnode成员指针指向device_node的fwnode成员。
of_get_named_gpio(dev->of_node, data[i].name, 0):将dev->of_node节点上的data[i].name的值取下。--> irq = gpio_to_irq(irq_gpio); //将gpio转换成对应的中断号--> ret = devm_request_any_context_irq(dev, irq, int_demo_isr, IRQF_TRIGGER_FALLING, data[i].name, data+i); ...
⚫ 比较:platform_device.dev.of_node和platform_driver.driver.of_match_table。 由设备树节点转换得来的platform_device中,含有一个结构体:of_node。 它的类型如下: 如果一个platform_driver支持设备树 , 它的platform_driver.driver.of_match_table是一个数组 ...
pm_runtime_get_syncdevm_reset_control_get(dev,"usb3-otg")// 获取用于复位的reset_controlof_get_child_by_name(np,"dwc3")// 获取子节点dwc3的device_node/* 遍历指定节点的所有子节点,将复合要求的转换为platform_device,即将usbdrd3_0的子节点 ...
start_kernel// init/main.csetup_arch(&command_line);// arch/arm/kernel/setup.cmdesc=setup_machine_fdt(__atags_pointer);// arch/arm/kernel/devtree.cearly_init_dt_scan_nodes();// drivers/of/ftd.c/* Retrieve various information from the /chosen node */of_scan_flat_dt(early_init_dt...