OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3878|回复: 1

linux 设备树中的如何读取具有嵌套关系节点的属性值?

[复制链接]

6

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-3-22
在线时间
5 小时
发表于 2021-9-22 16:19:27 | 显示全部楼层 |阅读模式
10金钱
设备树结构如下:
/{
    mykeys {
        compatible = "mydev,gpiobeep";
        keys = <&key1 &key2>;
    };
};

&mygpio {
    key1: key {
        kyename = "key1";
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "my-gpiobeep";
        pintctrl-names = "default";
        pintctrl-0 = <&mypinctrl_key>;
        key-gpio = <&gpio1 18 GPIO_ACTIVE_LOW>;
        interrupt-parent = <&gpio1>;
        interrupts = <18 IRQ_TYPE_EDGE_BOTH>;
        status = "okay";
    };
    key2: key {
        keyname="key2";
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "my-gpiobeep";
        pintctrl-names = "default";
        pintctrl-0 = <&mypinctrl_key>;
        key-gpio = <&gpio1 18 GPIO_ACTIVE_LOW>;
        interrupt-parent = <&gpio1>;
        interrupts = <18 IRQ_TYPE_EDGE_BOTH>;
        status = "okay";
    };
};

问,我如何通过在mykeys节点上获取 keys的值 ??

最佳答案

查看完整内容[请看2#楼]

想到一个替代方案,keys 不存引用而存路径,这样就可以直接使用读字符串数组的方法了~~在看到lcd驱动时有这样的代码: &lcdif { pinctrl-names = "default"; pinctrl-0 = ; display = ; status = "okay"; display0: display { bits-per-pixel = ; bus-width = ; display-timings { native-mode = ; timing0: timing0 { clock-fr ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-3-22
在线时间
5 小时
 楼主| 发表于 2021-9-22 16:19:28 | 显示全部楼层
本帖最后由 caijingkeji 于 2021-9-26 16:23 编辑

想到一个替代方案,keys 不存引用而存路径,这样就可以直接使用读字符串数组的方法了~~在看到lcd驱动时有这样的代码:
&lcdif {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_lcdif_dat
             &pinctrl_lcdif_ctrl>;

    display = <&display0>;
    status = "okay";
    display0: display {
        bits-per-pixel = <24>;
        bus-width = <24>;

        display-timings {
            native-mode = <&timing0>;
            timing0: timing0 {
            clock-frequency = <31000000>;
            hactive = <800>;
            vactive = <480>;
            hfront-porch = <40>;
            hback-porch = <88>;
            hsync-len = <48>;
            vback-porch = <32>;
            vfront-porch = <13>;
            vsync-len = <3>;

            hsync-active = <0>;
            vsync-active = <0>;
            de-active = <1>;
            pixelclk-active = <0>;
            };
        };
    };

对应的读取代码:
    display_np = of_parse_phandle(np, "display", 0);
    if (!display_np) {
        dev_err(dev, "failed to find display phandle\n");
        return -ENOENT;
    }

    ret = of_property_read_u32(display_np, "bus-width", &width);
    if (ret < 0) {
        dev_err(dev, "failed to get property bus-width\n");
        goto put_display_node;
    }
....
所以可以用 of_parse_phandle 返回 引用对应的节点 ....






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表