我在Linux上工作;当Linux启动时 在DTS(设备树)中,该文件将由Linux内核加载。
我的问题是,有没有办法使用C语言通过DTS文件获取设备地址?
例如:
DTS文件的某些部分如:
soc@ffe00000{
.......
i2c@112000{
.......
}
}
我想获得设备name(soc,i2c)
和address(ffe00000,112000)
...
答案 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找到。
最佳, 约翰