【问题标题】:Getting the device address by device tree file in C通过C中的设备树文件获取设备地址
【发布时间】:2015-06-02 12:47:58
【问题描述】:

我在 Linux 上工作; Linux 启动时 DTS(设备树),该文件将由 Linux 内核加载。

我的问题是,有没有什么方法可以使用 C 语言通过 DTS 文件获取设备地址?

例如:

DTS 文件的某些部分是这样的:

soc@ffe00000{
    .......
    i2c@112000{
    .......
    }
}

我要获取设备name(soc,i2c),和address(ffe00000,112000)...

【问题讨论】:

    标签: c linux kernel device-tree


    【解决方案1】:

    你好CK病毒,

    你的问题不是很清楚。我假设您正在寻找某种函数,该函数将 dts 文件的内容作为参数并返回一堆(设备、地址)对。对吗?

    此外,如果您告诉我们您使用的是哪种设备,那将会很有用。是树莓派吗?比格骨黑?还是完整的台式电脑?您使用的是什么发行版和版本的 linux?

    这可能不是您正在寻找的,但不久前,我使用了一个不错的库发布here on github。例如,要获取名为“ethernet”的设备的地址,您可以执行以下操作。

    int err = dtree_open("/proc/device-tree");
    if(err != 0)
    {
        printf("failed to open device tree\n");
        exit(1);
    }
    
    struct dtree_dev_t *eth = dtree_byname("ethernet");
    if(eth == 0)
    {
        printf("failed to find device named \"ethernet\"\n");
        exit(1);
    }
    
    //print the base address of the ethernet hardware
    printf("base address of ethernet is %i\n", eth->base);
    
    dtree_dev_free(eth);
    
    dtree_close();
    

    我希望这个库对你和我一样有用。

    如果这没有帮助,那么在 C 中实现 dts 解析器是一项微不足道的任务。dts 的“语言”并不是非常复杂。可以在here 找到有关语法的许多详细信息。

    最好, 约翰

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2013-06-29
      • 2021-04-04
      相关资源
      最近更新 更多