Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
драйвера "из коробки"
Dub
Добавлено 24.05.2012 13:03
0
Сообщение: 1
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Нужна инструкция для установки ЛЮБОГО драйвера из коробки.
Например если, я добавил какое-либо устройство через menuconfig, то какие телодвижения делать дальше чтобы увидеть устройство в файловой системе, и иметь возможность общаться с ним через пространство пользователя.
Какие файлы, относящиеся к конткетной платформе нужно править?
Интересует вопрос "в общем", так как видя большое изобилие драйверов в новых версиях ядра, думаю, что в будущем понадобится что-то, но понимаю, что просто выбрать в конфиге ядра устройство - мягко говоря недостаточно.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 24.05.2012 16:39 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Нужна инструкция для установки ЛЮБОГО драйвера из коробки.
Какие файлы, относящиеся к конткетной платформе нужно править?

возьмите число драйверов и возведите в степень от числа платформ - КТО напишет терабайты инструкций, которые стухнут после выхода нового ядра или нового драйвера?

правила достаточно простые - включаете драйвер в ядре и смотрите, что ему требуется для запуска - структуры данных правятся под конкретную платформу.. более того, если платформа не поддерживает, например, прерывание по уровню, то приходится модифицировать драйвер для учета такой особенности..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 24.05.2012 17:44 Сообщение: 3
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Цитата
Цитата
Нужна инструкция для установки ЛЮБОГО драйвера из коробки.
Какие файлы, относящиеся к конткетной платформе нужно править?

возьмите число драйверов и возведите в степень от числа платформ - КТО напишет терабайты инструкций, которые стухнут после выхода нового ядра или нового драйвера?

правила достаточно простые - включаете драйвер в ядре и смотрите, что ему требуется для запуска - структуры данных правятся под конкретную платформу.. более того, если платформа не поддерживает, например, прерывание по уровню, то приходится модифицировать драйвер для учета такой особенности..


Хорошо, для примера возьмём драйвер АЦП, работающего по SPI (AD7887). Он как раз работает у меня в standalone приложении под SAMXE512.
Хочу теперь на одноимённой плате запустить преобразование на Linux. Не сочтите за труд помогите адаптировать пример с сайта:
http://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7887

для моей платы и Linux.

Не понятно в какие файлы, относящиеся к конкретной аппаратной платформе, нужно править.

Например куда вставить:
[codebox]
static struct spi_board_info board_spi_board_info[] __initdata = {
#if defined(CONFIG_AD7887) || \
defined(CONFIG_AD7887_MODULE)
{
/* the modalias must be the same as spi device driver name */
.modalias = "ad7887", /* Name of spi_driver for this device */
.max_speed_hz = 1000000, /* max spi clock (SCK) speed in HZ */
.bus_num = 0, /* Framework bus number */
.chip_select = 3, /* Framework chip select */
.platform_data = &ad7887_pdata,
.controller_data = &ad7887_chip_info, /* Blackfin only */
.mode = SPI_MODE_3,
},
#endif
};
[/codebox]
понятно, что нужно исправить настройки в соответствии с аппаратным подключением, но куда \то включить не могу разобратсья...
Я так понимаю что это как элемент массива SPI-устройств и вставляется в массив где указаны DataFlash card и MMC/SPI???

это касательно АЦП.
Так же непонятно как добавить в систему триггер для клока АЦП.

Я делал так же как показано у аналога на сайте. Ещё должно было помочь руководство от sasmy(он подключал тачскрин по GPIO-SPI).
Я так же создал структуру

static struct platform_device *devices[] __initdata = {
&iio_trig_gpio,
};

создал структуру описания устройства, затем добавил функцию инициализации нового устройства:

platform_add_devices(devices, ARRAY_SIZE(devices));

но пока что не смог включить новые устройства в файловую систему.
где может быть затык(кроме головы моей)
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 24.05.2012 18:40 Сообщение: 4
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
хм.. запустите поиск в исходниках ядра по всем платформам по "ad78" - в блекфиновской ветке используют ad7877 и там можно подсмотреть что и куда прописывается..

Цитата
Я так понимаю что это как элемент массива SPI-устройств и вставляется в массив где указаны DataFlash card и MMC/SPI???

да, именно туда, не забудьте поставить разделяющую запятую между структурами..

в драйвере АЦП находите функцию со словом
Код
probe

это функция выполняется при ините драйвера
и в начале вписываете отладочный printk(запуск драйвера ацп)
а перед return 0 отладочный printk(успешно запустился)

для начала добиваетесь хотя бы просто запуска драйвера
ну а потом смотрите, что ему надо для успешного старта..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 25.05.2012 22:09 Редактировалось 25.05.2012 23:11 Сообщение: 5
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Спасибо за совет!
вот ято получил в консоли при попытке запустить драйвер
ad7887: probe of spi1.0 failed with error -22
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.05.2012 23:42 Сообщение: 6
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Спасибо за совет!
вот ято получил в консоли при попытке запустить драйвер
ad7887: probe of spi1.0 failed with error -22

это уже некий результат - значит драйвер пробует проинициализироваться и выпадает с ошибкой..
я в таких случаях в теле драйвера нахожу функцию _probe
и ставлю отладочные printk
- сразу после инита переменных - индикация, что драйвер запустился
- перед return 0 - успешное завершение инициализации
- после каждого return ret (в разумном месте)
так можно проследить, где вылет. конечно можно дешифровать из хидера код ошибки (вроде Invalid argument), но мне так проще..
т.о.
Код
probe start
step1
step2
step3
probe fine

драйвер запустился
и
Код
probe start
step1
step2

говорит, что между 2 и 3 не хватает данных или иная причина

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 26.05.2012 09:55 Редактировалось 26.05.2012 10:26 Сообщение: 7
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
пересобирать каждый раз ядро конечно утомительно.... но деваться некуда. буду пробовать.

дешифовал код ошибки. Вы правы, это ошибка "Invalid argument". Теперь бы понять что это значит)
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 26.05.2012 11:26 Сообщение: 8
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
пересобирать каждый раз ядро конечно утомительно.... но деваться некуда. буду пробовать.

драйвер можно собрать и отдельным модулем, но стартовые данные и настройки лежат в файле борды, т.ч. проще ядро пересобрать (у меня это ~15 сек)

Цитата
дешифовал код ошибки. Вы правы, это ошибка "Invalid argument". Теперь бы понять что это значит)

так выясните, в каком месте п/п probe происходит вылет, отсюда и будете искать - чего не хватает или что неправильно..

кстати, вы бы давно выложили то, что прописали для АЦП и кратенько о самом железе - глядишь, кто-нить и подсказал бы где неправильно..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 27.05.2012 13:10 Редактировалось 27.05.2012 15:30 Сообщение: 9
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Пока единственное чего смог добится в консоли

AD7887 driver starting...
setting trigger mode 2 for irq 54 failed (gpio_irq_type+0x0/0x2c)
ad7887: probe of spi1.0 failed with error -22

при этом в папке "/sys/bus/spi/drivers/" появилось устройство "ad7887"
а в папке "/sys/devices/platform" по прежнему пусто

Я сог выяснить что возвращаемая ошибка связаня с error_free_gpios. Хотя в структура АЦП все пины заданы.

P.S. За основу взята плата XE512, драйвер http://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7887 и подключеный к SPI1 СS0 АЦП
сигнал прерывания заведён на PA22
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux