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

Getting the device address by device tree file in C

我正在研究Linux; Linux 启动时 DTS(设备树),文件将由 Linux 内核加载。

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

例如:

DTS 文件的某些部分如下:

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

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


嗨 CK vir,

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

此外,如果您告诉我们您使用的是哪种设备,那将很有用。是 raspberry pi 吗?比格骨黑?还是一台完整的台式电脑?您使用的 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 的 "language" 并不是非常复杂。可以找到有关语法的许多详细信息 here.

最好的, 约翰