TigerSHARC 0 12 января, 2012 Опубликовано 12 января, 2012 (изменено) · Жалоба Хочу прикрутить драйвер АЦП AD7606 к Linux на AT91SAM9260. На сайте AD нашёл драйвер, интсрукцию по применению =ad7606]http://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7606?s[]=ad7606 вопросы: 1) нужно использовать файлы *.c и *.h (файлы драйвера по ссылке выше) как подключаемый модуль ядра (как по книге "Linux Device Driver")? 2) По ссылке выше сказано, что нужно добавить в конфигурацию ядра "Industrial I/O support", но у меня в меню конфигурации такой графы просто нет У меня ядро 2.6.24. Старое для таких целей? или что-то нужно добавить предварительно? 3) встречаю пример применения драйвера: static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; правильно ли я понимаю что дефайны ног процессора (вроде GPIO_PF9) нужно искать в библиотеке компилятора (arm-none-eabi в моём случае) как для обычного ногодрыга. Изменено 12 января, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Нет. Если вы хотите написать драйверы, то все "стандартные" дефайны следует искать в исходниках ядра. В случае с МК AT91SAM9260 пины задефайнены в файле arch/arm/mach-at91/include/mach/gpio.h. Линк Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alesha 0 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Судя по Linux Kernel Driver DataBase поддержка industrial i/o появилась в 2.6.32. Файлы драйвера АЦП судя по той же статье поставляются с ядром, который поддерживается analogом, так как есть опция в ядре которая позволяет собрать его как модуль, в этом случае с исходниками драйвера вам ничего делать не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Спасибо ответившим. Буду копаться в ядрах постарше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Судя по http://kernelnewbies.org/Linux_2_6_39-DriversArch можно копаться в ядрах начиная с 2.6.39)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 17 января, 2012 Опубликовано 17 января, 2012 (изменено) · Жалоба Добавить драйвер можно так(http://dmilvdv.narod.ru/AT91SAM9260/index.html?linux.html): Добавление видеодрайвера с поддержкой кадрового буфера Скопировать файлы драйвера дисплея в /linux-2.6.xx/drivers/video/. Добавить в файл /linux-2.6.xx/drivers/video/Makefile компиляцию драйвера после строки # Hardware specific drivers go first: obj-$(CONFIG_FB_MYDISPLAY) += mydisplay.o Отредактировать файл /linux-2.6.xx/drivers/video/Kconfig, добавив свой драйвер, например, после config FB_ATMEL: config FB_MYDISPLAY tristate "my display Framebuffer support" depends on FB && ARCH_AT91SAM9260 select FB_SYS_FILLRECT select FB_SYS_COPYAREA select FB_SYS_IMAGEBLIT default y help This is a framebuffer device for my display. Вместо FB_SYS_XXX могут быть выбраны FB_CFB_XXX, в зависимости от функций, используемых кодом драйвера. Патч для добавления драйвера mydisplay в Makefile и Kconfig. Или можно добавить как подключаемый компонент ядра (как по книге Linux Device Driver) Если делать как в первом случае, то послесоотвествующих манипуляций я смогу увидеть драйвер AD7606 через menuconfig? Изменено 17 января, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 18 января, 2012 Опубликовано 18 января, 2012 · Жалоба Да, после добавления (правки) файлов Kconfig и Makefile, Вы уведите свой драйвер во вкладке DeviceDrivers->Video->Имя_драйвер (судя по приведенному Вами примеру) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 19 января, 2012 Опубликовано 19 января, 2012 · Жалоба Да, после добавления (правки) файлов Kconfig и Makefile, Вы уведите свой драйвер во вкладке DeviceDrivers->Video->Имя_драйвер (судя по приведенному Вами примеру) Отлично, значит такой же подход справедлив и для АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 22 января, 2012 Опубликовано 22 января, 2012 (изменено) · Жалоба Добавить драйвер можно так(http://dmilvdv.narod.ru/AT91SAM9260/index.html?linux.html): Добавление видеодрайвера с поддержкой кадрового буфера Скопировать файлы драйвера дисплея в /linux-2.6.xx/drivers/video/. Добавить в файл /linux-2.6.xx/drivers/video/Makefile компиляцию драйвера после строки # Hardware specific drivers go first: obj-$(CONFIG_FB_MYDISPLAY) += mydisplay.o Отредактировать файл /linux-2.6.xx/drivers/video/Kconfig, добавив свой драйвер, например, после config FB_ATMEL: config FB_MYDISPLAY tristate "my display Framebuffer support" depends on FB && ARCH_AT91SAM9260 select FB_SYS_FILLRECT select FB_SYS_COPYAREA select FB_SYS_IMAGEBLIT default y help This is a framebuffer device for my display. Вместо FB_SYS_XXX могут быть выбраны FB_CFB_XXX, в зависимости от функций, используемых кодом драйвера. Патч для добавления драйвера mydisplay в Makefile и Kconfig. Или можно добавить как подключаемый компонент ядра (как по книге Linux Device Driver) Если делать как в первом случае, то послесоотвествующих манипуляций я смогу увидеть драйвер AD7606 через menuconfig? Оказалось что AD7606 уже включён в стандартную поставку ядра. Пришлось включить поддержку GPIO для его активации. Но я заметил что в драйверах нигде не встречается конструкция, служащая для "инициализации" управляющих ног для АЦП, типа static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; эта контсрукция описана на сайте: http://wiki.analog.com/resources/tools-sof...io-adc/ad7606?s[ НО! непоянтно куда её применить где долнжа присутствовать эта конструкция и вообще где должна происходить инициализация АЦП, что нужно добавить кроме самого драйвера, который уже есть в ядре ? или пристарте системы должен запускаться некий скрипт, который и производит инициализацию.... Вобщем тут путаюсь и несовсем понятно((( Изменено 22 января, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 23 января, 2012 Опубликовано 23 января, 2012 · Жалоба Попытаюсь вкратце ответить на Ваш вопрос. В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего. К примеру Вы включи в ядре поддержку GPIO и кнопок которые висят на "этом самом" GPIO, только есть не задача, ядро "сходу" не знает на каких конкретно пинах находятся кнопки. Сообщить ему об этом можно в так называемом файле платформ (platform). Файл платформ - это файл, в котором описана периферия которая подключена к Вашему процессору. Для процессора AT91SAM9260 это файл arch/arm/mach-at91/board-sam9260ek.c . Вот пример как описано подключение в нем кнопок к пинам AT91_PIN_PA30 и AT91_PIN_PA31: #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) static struct gpio_keys_button ek_buttons[] = { { .gpio = AT91_PIN_PA30, .code = BTN_3, .desc = "Button 3", .active_low = 1, .wakeup = 1, }, { .gpio = AT91_PIN_PA31, .code = BTN_4, .desc = "Button 4", .active_low = 1, .wakeup = 1, } }; Опции CONFIG_KEYBOARD_GPIO и CONFIG_KEYBOARD_GPIO_MODULE выставляются в меню конфигураторе. Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK). Точно также, по аналогии с кнопками необходимо поступить и с Вашим АЦП. По приведенной Вами ссылке на сайт аналоговцев уже все описано и Вам остается только скопировать и правильно указать желаемые ножки. Не забудьте, там же, в функции ek_board_init вставить добавление АЦП platform_add_devices(board_devices, ARRAY_SIZE(board_devices)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 23 января, 2012 Опубликовано 23 января, 2012 (изменено) · Жалоба Попытаюсь вкратце ответить на Ваш вопрос. В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего. К примеру Вы включи в ядре поддержку GPIO и кнопок которые висят на "этом самом" GPIO, только есть не задача, ядро "сходу" не знает на каких конкретно пинах находятся кнопки. Сообщить ему об этом можно в так называемом файле платформ (platform). Файл платформ - это файл, в котором описана периферия которая подключена к Вашему процессору. Для процессора AT91SAM9260 это файл arch/arm/mach-at91/board-sam9260ek.c . Вот пример как описано подключение в нем кнопок к пинам AT91_PIN_PA30 и AT91_PIN_PA31: #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) static struct gpio_keys_button ek_buttons[] = { { .gpio = AT91_PIN_PA30, .code = BTN_3, .desc = "Button 3", .active_low = 1, .wakeup = 1, }, { .gpio = AT91_PIN_PA31, .code = BTN_4, .desc = "Button 4", .active_low = 1, .wakeup = 1, } }; Опции CONFIG_KEYBOARD_GPIO и CONFIG_KEYBOARD_GPIO_MODULE выставляются в меню конфигураторе. Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK). Точно также, по аналогии с кнопками необходимо поступить и с Вашим АЦП. По приведенной Вами ссылке на сайт аналоговцев уже все описано и Вам остается только скопировать и правильно указать желаемые ножки. Не забудьте, там же, в функции ek_board_init вставить добавление АЦП platform_add_devices(board_devices, ARRAY_SIZE(board_devices)); Спасибо огромное! В том то и дело что на сайте аналоговцев показано: file: trunk/drivers/staging/iio/adc/ad7606.h struct ad7606_platform_data { unsigned default_os; unsigned default_range; unsigned gpio_convst; unsigned gpio_reset; unsigned gpio_range; unsigned gpio_os0; unsigned gpio_os1; unsigned gpio_os2; unsigned gpio_frstdata; unsigned gpio_stby; }; static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; и можо подумать что пины задаются в ad7606.h Попытаюсь вкратце ответить на Ваш вопрос. В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего. Это простите где? Я делаю по этой инструкции и ничего такого делать не надо (но предлагается скачать конфигурационный файл) http://dmilvdv.narod.ru/AT91SAM9260/index.html Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK). "SystemType" - это вкладка в menuconfig? нету такой( Непонятно стало как конфигурирвать вообще (порылся в конфиге в качестве процессора Intel указан, а на ARM нигде даже намёка нет) и вообще судя по: http://belgorod.lug.ru/wiki/index.php/%D0%...0%BB%D1%8F_ARM9 Надо только частоту кварца руками в исходнике сменить... Опыта тут нет. Подскажите, возможо где-то расписано как конфиг править ? Изменено 23 января, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 24 января, 2012 Опубликовано 24 января, 2012 (изменено) · Жалоба В том то и дело что на сайте аналоговцев показано: Вам нужно добавить в платформ: #if defined(CONFIG_AD7606) || defined(CONFIG_AD7606_MODULE) static struct resource ad7606_resources[] = { [0] = { .start = 0x20100000, /* SDP: AMS1 / CS_B */ .end = 0x20100000, .flags = IORESOURCE_MEM, }, [1] = { /* general IRQ */ .start = IRQ_PH6, /* SDP: GPIO6 */ .end = IRQ_PH6, .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, }, }; static struct platform_device ad7606_device = { .name = "ad7606-8", .dev = { .platform_data = &ad7606_pdata, }, .num_resources = ARRAY_SIZE(ad7606_resources), .resource = ad7606_resources, }; #endif static struct platform_device *board_devices[] __initdata = { #if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) &ad7606_device, #endif }; А в файле в котором описано static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; необходимо переназначить пины. Только пины в для arm'ов от атмела именуются немного по другому, например AT91_PIN_PA5 Я делаю по этой инструкции и ничего такого делать не надо (но предлагается скачать конфигурационный файл) По умолчанию когда Вы делаете make menuconfig, то вызывается меню опций для архитектуры x86, именно поэтому Вы и видите только список интеловских процессоров. Полный список поддерживаемых архитектур можно посмотреть в каталоге arch/ Для того что бы конфигурировать ядро для arm выполните: make ARCH=arm menuconfig После этого Вы сможете увидеть тот список меню что я приводил выше. Опыта тут нет. Базовые понятие по Embedded Linux для семейства AT91SAM9 можно подчерпнуть тут Если есть неделька лишнего времени, то советую для понимая вручную самостоятельно пройти все этапы: 1. Toolchain 2. Bootstrap 3. Das U-Boot 4. Kernel 5. RootFS Изменено 24 января, 2012 пользователем xor.kruger Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 24 января, 2012 Опубликовано 24 января, 2012 (изменено) · Жалоба На аналоге не указано в каком файле описано static struct ad7606_platform_data ad7606_pdata = { .default_os = 0, .default_range = 10000, .gpio_convst = GPIO_PF9, .gpio_reset = GPIO_PF10, .gpio_range = GPIO_PH0, .gpio_os0 = GPIO_PH1, .gpio_os1 = GPIO_PH2, .gpio_os2 = GPIO_PH3, .gpio_frstdata = -1, .gpio_stby = GPIO_PF12, }; и можно понять что это файл ad7606.h , но это не так. Поэтому затрудняюсь с пониманием. если я вас правильно понял, то после конфигурации дефайны для AD7606 пределяются автоматически, а вот структуры, описывающие параметры АЦП нужно писать самому... спасибо большое за наставления. Изменено 24 января, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 25 января, 2012 Опубликовано 25 января, 2012 · Жалоба Структура (платформ дата) должна быть описана в файле соответствующей борды. ./arch/arm/mach-at91/board-<ваша борда>.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TigerSHARC 0 4 марта, 2012 Опубликовано 4 марта, 2012 (изменено) · Жалоба Непонятно, как задать требуемую частоту дискретизации( частота дискретизации устанавливается частотой на ноге CONVST (.gpio_convst = pin_num). Но как программно задаётся эта частота - ума не приложу( И ещё хотелось бы сделать что-то вроде этого http://wiki.analog.com/software/linux/docs/iio/iio_netscope , но на ARM9(АЦП подключен к нему). Что для этого нужно? Изменено 4 марта, 2012 пользователем TigerSHARC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться