通过C中的设备树文件获取设备地址

时间:2015-06-01 05:59:48

标签: c linux kernel device-tree

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

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

例如:

DTS文件的某些部分如:

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

我想获得设备name(soc,i2c)address(ffe00000,112000) ...

1 个答案:

答案 0 :(得分:0)

你好CK vir,

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

此外,如果您告诉我们您使用的设备类型将会很有用。它是覆盆子pi吗?一个beaglebone黑色?还是一台完整的台式电脑?您使用的是什么发行版和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找到。

最佳, 约翰