裝置樹中子節點的名字和地址表示
阿新 • • 發佈:2018-11-11
比如如下的myip_led_0節點下面的子節點
/ { amba_pl: [email protected] { #address-cells = <2>; #size-cells = <2>; compatible = "simple-bus"; ranges ; myip_led_0: [email protected] { compatible = "xlnx,myip-led-1.0"; reg = <0x0 0x80001000 0x0 0x1000>; clock-names = "ref_clk", "pclk"; clocks = <&clk 31>, <&clk 32>; /*clocks = <&clk 19>, <&clk 31>;*/ xlnx,s00-axi-addr-width = <0x4>; xlnx,s00-axi-data-width = <0x20>; led0: led0 { #phy-cells = <4>; }; led1: led1 { #phy-cells = <4>; }; led2: led2 { #phy-cells = <4>; }; }; }; };
用如下的程式碼打印出來!
static int led_simple_probe(struct platform_device *pdev) { struct device *dev=&pdev->dev; struct device_node *np=dev->of_node; struct device_node *child; struct resource *res; struct list_head *ptr = NULL; struct list_head *pos; struct list_head clklist=dev->devres_head; int clkCnt=0; int index=0; struct myled_dev *ledDev; ledDev=devm_kzalloc(dev, sizeof(*ledDev), GFP_KERNEL); if(!ledDev) return -ENOMEM; ledDev->dev=dev; res = platform_get_resource(pdev,IORESOURCE_MEM, 0); printk(KERN_ERR "res.start=%llx,res.end=%llx\n",res->start,res->end); printk(KERN_ERR"pdev->name is %s\n",pdev->name); list_for_each(pos,&dev->devres_head){ clkCnt++; } printk(KERN_ERR"Total resource number clkCnt =%d\n",clkCnt); clkCnt=0; ledDev->pclk = devm_clk_get(&pdev->dev, "pclk"); if (IS_ERR(ledDev->pclk)) { dev_err(dev, "pclk clock not found.\n"); return -1; } list_for_each(pos,&dev->devres_head){ clkCnt++; } for (index = 0; index < of_get_child_count(dev->of_node); index++) { printk(KERN_ERR"Phy index =%d\n",index); } for_each_child_of_node(np, child) printk(KERN_ERR"child->name=%s,child->full_name=%s,%p\n",child->name,child->full_name,child); printk(KERN_ERR"Total resource number clkCnt =%d\n",clkCnt); printk(KERN_ERR"led np->name=%s,np->full_name=%s\n",np->name,np->full_name); printk(KERN_ERR"kobject name is %s\n",dev->kobj.name); return 0; }
列印結果如下: