Получение адреса устройства по файлу дерева устройств на C

Я работаю на Linux; когда Linux запускает DTS (дерево устройств), файл загружается ядром Linux.

У меня вопрос: есть ли способ получить адрес устройства по файлу DTS с помощью языка C.

Например:

Некоторая часть файла DTS выглядит так:

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

Я хочу получить устройство name(soc,i2c) , и _3 _...


person CK vir    schedule 01.06.2015    source источник


Ответы (1)



Привет CK vir,

Ваш вопрос не очень ясен. Я предполагаю, что вы ищете какую-то функцию, которая принимает в качестве аргумента содержимое файла dts и возвращает кучу пар (устройство, адрес). Это правильно?

Также было бы полезно, если бы вы сообщили нам, какое устройство вы используете. Это малиновый пи? Черный усик? или полноценный настольный компьютер? Какой дистрибутив и версию Linux вы используете?

Возможно, это не совсем то, что вы ищете, но некоторое время назад я использовал красивую библиотеку, размещенную здесь, на 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();

Надеюсь, эта библиотека окажется для вас такой же полезной, как и для меня.

Если это не помогает, то реализовать парсер dts на C. «язык» для dts не так уж и сложен. Подробную информацию о синтаксисе можно найти здесь.

Бест, Джон

person John M    schedule 01.06.2015