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.
最好的,
约翰
我正在研究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.
最好的, 约翰