Нужна инструкция для установки ЛЮБОГО драйвера из коробки.
Например если, я добавил какое-либо устройство через menuconfig, то какие телодвижения делать дальше чтобы увидеть устройство в файловой системе, и иметь возможность общаться с ним через пространство пользователя.
Какие файлы, относящиеся к конткетной платформе нужно править?
Интересует вопрос "в общем", так как видя большое изобилие драйверов в новых версиях ядра, думаю, что в будущем понадобится что-то, но понимаю, что просто выбрать в конфиге ядра устройство - мягко говоря недостаточно.
возьмите число драйверов и возведите в степень от числа платформ - КТО напишет терабайты инструкций, которые стухнут после выхода нового ядра или нового драйвера?
правила достаточно простые - включаете драйвер в ядре и смотрите, что ему требуется для запуска - структуры данных правятся под конкретную платформу.. более того, если платформа не поддерживает, например, прерывание по уровню, то приходится модифицировать драйвер для учета такой особенности..
Хорошо, для примера возьмём драйвер АЦП, работающего по 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).
Я так же создал структуру
хм.. запустите поиск в исходниках ядра по всем платформам по "ad78" - в блекфиновской ветке используют ad7877 и там можно подсмотреть что и куда прописывается..
Я так понимаю что это как элемент массива SPI-устройств и вставляется в массив где указаны DataFlash card и MMC/SPI???
да, именно туда, не забудьте поставить разделяющую запятую между структурами..
в драйвере АЦП находите функцию со словом
probe
это функция выполняется при ините драйвера
и в начале вписываете отладочный printk(запуск драйвера ацп)
а перед return 0 отладочный printk(успешно запустился)
для начала добиваетесь хотя бы просто запуска драйвера
ну а потом смотрите, что ему надо для успешного старта..
Спасибо за совет!
вот ято получил в консоли при попытке запустить драйвер
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 не хватает данных или иная причина