LINUX.ORG.RU

SPI на CM-FX6 Computer-on-Module под Ubuntu 14.04.1 LTS cmimx6q ttymxc3

 ,


0

1

Добрый день.Так случилось что досталась плата CM-FX6 Computer-on-Module. Нужно поднять SPI на ней.В интернете нашел статьи, примеры работы с spidev. Все основывается на том что этот модуль уже подключен и отображается в папке /dev. У меня к сожалению его не видно.Подскажите куда копать. P.S c Линуксом начал знакомство только вчера(совсем новичок)

Ответ на: комментарий от zudwa

я так понимаю, нужно сейчас скачать исходники ядра и что-то где то поправить?)дальше это дело скомпилировать и отдать плате?

NikishinRoman
() автор топика
Ответ на: комментарий от Dark_SavanT

root@cmimx6q:/home/development/cm-fx6/kernel# modprobe spidev modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file '/lib/modules/3.0.35-cm-fx6-6.3/modules.dep.bin'

Такое пишит

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Тогда стоит пересобрать образ вообще и ядро в частности. Хотя бы чтобы разобраться что к чему, без этого будет тяжко.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Пытаюсь повторить сборку ядра с этого сайта http://www.compulab.co.il/workspace/mediawiki/index.php5/CM-FX6:_Linux:_Kernel Скачал Linux, пропатчил. В каталоге linux-cm-fx6\arch\arm\ появился порт под мою плату, вроде, mach-mx6. Дальше по шагам делаю export ARCH=arm export CROSS_COMPILE=arm-none-linux-eabi- make cm_fx6_defconfig Тут вроде ничего страшного не писало, а вот после этого make menuconfig

написало

root@cmimx6q:/home/development/cm-fx6/kernel/linux-cm-fx6# make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1 make: *** [menuconfig] Error 2

Установил sudo apt-get install libncurses-dev Потом снова запустил make menuconfig, вроде дела пошли на поправку,но дальше по инстукции мне нужно делать make && make uImage && \ INSTALL_MOD_PATH=/home/development/cm-fx6/rootfs make modules_install

Вышел с меню конфигурации.Выполняю команду make и пишит такую каку....

make: arm-none-linux-eabi-gcc: Command not found scripts/kconfig/conf --silentoldconfig Kconfig make: arm-none-linux-eabi-gcc: Command not found CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: `include/generated/mach-types.h' is up to date. CC kernel/bounds.s /bin/sh: arm-none-linux-eabi-gcc: command not found make[1]: *** [kernel/bounds.s] Error 127 make: *** [prepare0] Error 2 root@cmimx6q:/home/development/cm-fx6/kernel/linux-cm-fx6# make uImage make: arm-none-linux-eabi-gcc: Command not found CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: `include/generated/mach-types.h' is up to date. CC kernel/bounds.s /bin/sh: arm-none-linux-eabi-gcc: command not found make[1]: *** [kernel/bounds.s] Error 127 make: *** [prepare0] Error 2

У меня есть подозрение что не установлен Cross компилятор...

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

На каком компьютере ты пытаешься это делать? Какая ОС на нем установлена, версия дистрибутива какая?

Попробуй

sudo apt-get install gcc-arm-linux-gnueabihf gcc-4.7-arm-linux-gnueabi gcc-4.7-arm-linux-gnueabi-base gcc-4.7-arm-linux-gnueabihf gcc-4.7-arm-linux-gnueabihf-base gcc-4.7-multilib-arm-linux-gnueabi gcc-4.7-multilib-arm-linux-gnueabihf gcc-arm-linux-gnueabi

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от NikishinRoman

Всё ясно, тогда подойдут стандартные руководства, значит всё уже давно установлено.

Смотри, ты пытаешься следовать руководству http://www.compulab.co.il/workspace/mediawiki/index.php5/CM-FX6:_Linux:_Kerne... при этом не учитываешь что там руководство для сборки ядра на x86, а у тебя ведь уже сам ARM.

Вот это убери

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-eabi-
и попробуй собрать. Просто тебе не нужен кросскомпилятор, ARM уже соберет для себя. А вот этот шаг «make cm_fx6_defconfig» очень важен - у Linux ядра туча настроек, под разное железо разные, так вот это действие положит в корень исходников правильный конфиг и назовет его .config (скрытый как бы файл в линуксе, видится через ls -la).

А дальше make -j 2 и оно соберет тебе ядро через много времени :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Вообщем сделал сразу без: ARCH=arm export CROSS_COMPILE=arm-none-linux-eabi- Начал с этого: make cm_fx6_defconfig make menuconfig make

Вроде побежало что-то.Думаю надо на декстоп садиться.Долго очень.

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Долго очень.

Потому и советуют кросскомпилятор на десктопе. Но не волнуйся, более двух часов это не займет, наберись терпения :)

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от NikishinRoman

Думаю надо на декстоп садиться

Если эта работа всерьез и надолго, то ты можешь поставить Ubuntu Linux в виртуальную машину (с виртуальным диском гигов на 50 не меньше). Только включи 3D ускорение и обязательно гостевые дополнения чтобы не тормозило и чтобы удобно работать было. Кто знает, может полюбишь Ubuntu Linux и поставишь второй системой (установить легко, тупо в винде делаешь пустое неразмеченое неформатированное место и оно туда с установочного диска Ubuntu встанет мягко с возможностью выбора ОС).

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Уже пересел на ПК. Сейчас буду, тут магию делать.Тут попробую именно по инструкции.

NikishinRoman
() автор топика
Ответ на: комментарий от I-Love-Microsoft

А можно ли написать драйвер SPI под такую плату в обход линукса, что бы ОС про него и не знала?А использовать функции инициализации и пользовательские в своей программе?

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Да, это возможно, но осторожно. Важно чтобы функции блока SPI не использовались другими драйверами. А если SPI слит с другим каким-то периферийным блоком то это уже может не сработать. К тому же ты все равно должен будешь написать именно драйвер чтобы достучаться до своего самопала из userspace, всё во многом аналогично как в windows. Не рекомендую.

Лучше всё же использовать существующий драйвер. Проще собрать ядро чем пытаться писать свой драйвер. А наградой будет портабельность - вместо CM-FX6 можешь взять другой и код будет на 99% такой же.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Поправил файл board-cm-fx6.c (добавил в массив структур spi_board_info) свою структурку: { /* spidev */ .modalias = «spidev», .chip_select = 2, .max_speed_hz = 2 * 1000000, .mode = SPI_MODE_0, .bus_num = 1, },

Сохранил. В menuconfig активировал пункт User mode SPI device driver support Собрал ядро. Сделал образ. Вот только не помню после чего(образа или сборки ядра) выскочило Warning: you may need to install module-init-tools

spidev в устройствах так и не появился. Может я нет тот board* редактировал?

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

А может там уже перешли на FDT (flat device tree)? Я дальше помочь не могу, просто вместо захардкоденого специфичного для платы описания железа могли перейти на FDT-описание. Стоит это проверить. Но раньше конечно и я так редактировал специфику под железо.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Там еще на плате используется 2 SPI.Это я в массиве структур подсмотрел.Драйвера только другие на них.Может я тут с добавление что-то натупил... static struct spi_board_info cm_fx6_spi0_board_info[] __initdata = { #if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE) { .modalias = «m25p80», .max_speed_hz = 20000000, .bus_num = 0, .chip_select = 0, .platform_data = &cm_fx6_spi_flash_data, }, #endif /* CONFIG_MTD_M25P80 */ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) { .modalias = «ads7846», .max_speed_hz = 1500000, .bus_num = 0, .chip_select = 1, .irq = gpio_to_irq(CM_FX6_ADS7846_PENDOWN), .platform_data = &ads7846_config, }, #endif /* CONFIG_TOUCHSCREEN_ADS7846 */ { /* spidev */ .modalias = «spidev», .chip_select = 2, .max_speed_hz = 2 * 1000000, .mode = SPI_MODE_0, .bus_num = 1, }, };

Ссылка на этот боард, если что. https://dropmefiles.com/q9QH6

NikishinRoman
() автор топика
Ответ на: комментарий от I-Love-Microsoft

ПО SPI Пока тихо.Можно спросить.Есть желание работать под QT и отлаживать же программу в нем.Для отладки как я понял нужен gdbser.Собственно поставил его.Запустил на плате и получилось через SSH произвести в терминале пошаговую отладку с компа.Подскажи пожалуйста, а то я уже запутался ...могу ли я установить QT на ПК и заливать ПО именно в плату и отлаживать его на компе. Как я понял это называется кросс компиляция.Проблема в том я запутался - нужен ли какой-то особый QT (Embedded) или можно скачать для линукса, выставить армовские компиляторы и настроить отладку в нем?

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

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

Я вообще отлаживаюсь обильным принтингом (qDebug), привычка такая. А это само собой работает одинаково на любой платформе...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Нужен обычный Qt для ARM чтобы собирать и отлаживать программы на ARM.

А можно например, обычный QT для ПК. Мне бы хотелось писать ПО на компе,компилировать под АРМ и прошивать или как то заливать прошивку с компа в плату и отлаживать её на компе.

NikishinRoman
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Успех! Вообщем замучался соберать ядро на плате.Собрал на пк.Добавил в массив структур, структурку для SPI 1 c CS1.Собрал ядро.В /dev появился модуль spidev1.1 Обрадовался)(наверное где-то тупил при конфигурации).Но возникла такая проблема. Мне нужен SPI 2 и CS0.Изменяю .bus_num и .chip_select с 1 и 1 на 2 и 0. Собераю ядро и не фига в /dev у меня не появился spidev2.0. Может ли spidev работать только с определенными модулями SPI?

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Ох, я так давно работал с SPI в Linux что уже забыл, точнее как давно - давно это руками прописывал, сейчас нынче всё по дефолту работает (типа raspberry pi)...

Может 2-й SPI порт задействован для какой-то внутренней периферией и оно не дает ему появиться как доступное пользователю? Просто предположение...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от NikishinRoman

Наверняка у модуля есть производитель и даже форум пользователей этих модулей. Исключений я не видел. Я такую спец информацию спрашиваю тупо у разработчиков или тех поддержки ;)

Как работать с SPI в Linux на каждом заборе написано, а что касается CM-FX6 это уже может быть только на сайте производителя...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Обратился в поддержку.А сейчас пока что в массив структур добавил структуры для spidev1,2,3 c CS 0,1,2. И в dev все ранво только spidev1.1 отобразился...

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Тему не читал, но найди даташит на свой soc и ознакомься с ним.

Deleted
()
Ответ на: комментарий от NikishinRoman

Вообщем, проблема с добавлением spidev решена(добавлением отдельного массива структур для своего spidev и последующей регистрации его).Были грабли, что не вижу сигнал на пинах. По умолчанию использовались одни пины, мне нужны были другие(поменял ноги в файле board-cm-fx6-q.h).Сигнал на clk и Mosi пошел, но вот не задача - не работает chep select.В даташите написано что если используется модуль wi/fi то он не доступен.Физически - этот модуль не подключен. Я вот думаю может надо как то драйвер отключить этого wi-fi что бы отпустил ногу...а где сделать это - не знаю!

NikishinRoman
() автор топика
Ответ на: комментарий от NikishinRoman

Все получилось.Сигнала CS не было потому что это нога используется камерой.Как отключить использование не разобрался.Единственное закомментировал разрешение использования ноги для камеры в файле board-cm-fx6-q.h и сигнал пошел.

NikishinRoman
() автор топика

SPI на CM-FX6 Computer-on-Module под Ubuntu 14.04.1 LTS cmimx6q ttymxc3

а мог бы взять пхп и нипарится

Pooping
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.