реклама на сайте
подробности

 
 
> Android, Взаимодействие с железом
toxxin
сообщение Mar 2 2011, 07:23
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 8-07-09
Пользователь №: 51 025



Доброго времени суток!
Существует недопонимание взаимодействия верхнего(пользовательского) уровня ОС Android и уровня драйверов. Если конкретнее - есть отладочная плата на OMAP3530, на ней поднят Android 2.2. Необходимо написать тестовое приложение(пустой экран и кнопочка), которое при нажатии кнопки отправляет данные по интерфейсу SPI и соответственно вызывает прерывание при приеме. На уровне linux все понятно - пишем драйвер интерфейса SPI, загружаем драйвер и работаем с файликом устройства /dev/spi. Но вот виртуальная машина Dalvik вряд ли даст просто так записать данные в файл устройства на нижнем уровне, да и не правильно это. Отсюда вытекает предположение о существовании некоего класса который бы осуществлял бы это взаимодействие. Собственно вопрос - где можно про это почитать и какой механизм для этого используется??
Спасибо!

Сообщение отредактировал toxxin - Mar 2 2011, 07:24
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
shreck
сообщение Mar 2 2011, 07:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



А здесь почитать не пробовали. Есть подозрение, что из под Andoid вот просто так SPI доступен не будет.
Go to the top of the page
 
+Quote Post
toxxin
сообщение Mar 2 2011, 08:24
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 8-07-09
Пользователь №: 51 025



Цитата(shreck @ Mar 2 2011, 10:55) *
А здесь почитать не пробовали. Есть подозрение, что из под Andoid вот просто так SPI доступен не будет.

Пробовали... Не находиться вразумительных ссылок по этому вопросу, либо я не умею искать инфу написанную "английский по белому". Отсюда вытекает вопрос к тем кто сталкивался с этой проблемой.
Go to the top of the page
 
+Quote Post
denyslb
сообщение Mar 5 2011, 01:22
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 111
Регистрация: 5-05-10
Из: Lebanon, Beirut
Пользователь №: 57 093



В оригинальном андроиде скорее всего такого класса не существует.
Насколько я знаю они пропагандируют искоренение возможности доступа userspace приложений напрямую к железу со специфическими протоколами, и унификацию доступа к обьектам (файловым, медиа, коммуникациям и т.п.)

Можно только сделать "прокладку" под существующий API Андроида, к примеру написать демона, который откроет на localhost TCP сокет, и принятые данные отправит в SPI или будет управлять параметрами SPI, соответственно под Dalvik пишется уже просто TCP client. Но данное решение будет кастомным под эту плату, конечно.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Mar 5 2011, 03:48
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



http://developer.android.com/sdk/ndk/index.html
Go to the top of the page
 
+Quote Post
toxxin
сообщение Mar 9 2011, 20:15
Сообщение #6





Группа: Участник
Сообщений: 10
Регистрация: 8-07-09
Пользователь №: 51 025



Цитата
В оригинальном андроиде скорее всего такого класса не существует.

Наткнулся на интересную вещь. В исходниках андроида, которые приложены к отладочной плате имеется папка с драйверами, в которой в свою очередь есть папка SPI. Отсюда вывод драйвер есть, и даже наверное его можно как-то поднять.

Если пересобарть ядро с драйвером и запустить драйвер под линуксом(а отладочная консоль у меня именно линуксовая; НЕ Далвик) - где мне его найти под андроидом? Может быть появится устройство - /proc/device ?

Сообщение отредактировал toxxin - Mar 9 2011, 20:16
Go to the top of the page
 
+Quote Post
Lampus
сообщение May 30 2011, 12:56
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 27-05-11
Пользователь №: 65 310



Есть такая штука как spidev. Как правило инициализируется в файле борды, для него указывается номер шины SPI и номер CS. После чего после загрузки образуются файлы вида /dev/spidevB.C, где B - номер шины, C - номер ChipSelect'а. А дальше открываешь его как файл и что надо читаешь/пишешь.
Если же речь идёт о драйвере для какой-то определённой железяки висящей на SPI-шине, то надо смотреть в сторону /sys/class/spi*/...
Рекомендую изучить документацию идущую с ядром в папке Documentation/spi
Go to the top of the page
 
+Quote Post
ukpyr
сообщение May 30 2011, 17:05
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Если пересобарть ядро с драйвером и запустить драйвер под линуксом(а отладочная консоль у меня именно линуксовая; НЕ Далвик) - где мне его найти под андроидом? Может быть появится устройство - /proc/device ?
ищите в исходниках, спросите у производителя отладочной платы. Для простейшей работы с портами может хватить ioperm/outp
Цитата
Но вот виртуальная машина Dalvik вряд ли даст просто так записать данные в файл устройства на нижнем уровне, да и не правильно это.
уже была ссылка - для прямого взаимодействия с железом/системой есть NDK, пишите свои классы-обертки для взаимодействия с нижним уровнем

Сообщение отредактировал ukpyr - May 30 2011, 17:06
Go to the top of the page
 
+Quote Post
cat_drugs
сообщение Aug 8 2012, 07:19
Сообщение #9





Группа: Новичок
Сообщений: 1
Регистрация: 8-08-12
Пользователь №: 73 059



Извиняюсь, за поднятие столь старой темы, просто столкнулся с аналогичной проблемой.
Есть устройство, работающее на Андроид и есть у этого устройства чип с драйверами под Linux. С самими драйверами, я думаю, проблем возникнуь не должно никаких - кросс-компиляция под нужную архитектуру и все. Вопрос в другом - как мне теперь работать с этим драйвером из уровня приложения? Я так нигде и не нашел информации по теме sad.gif Можно ли это делать с помощью NDK? Если да, то где можно про это прочесть подробнее?


--------------------


Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Aug 19 2012, 06:51
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(cat_drugs @ Aug 8 2012, 11:19) *
Извиняюсь, за поднятие столь старой темы, просто столкнулся с аналогичной проблемой.
Есть устройство, работающее на Андроид и есть у этого устройства чип с драйверами под Linux. С самими драйверами, я думаю, проблем возникнуь не должно никаких - кросс-компиляция под нужную архитектуру и все. Вопрос в другом - как мне теперь работать с этим драйвером из уровня приложения? Я так нигде и не нашел информации по теме sad.gif Можно ли это делать с помощью NDK? Если да, то где можно про это прочесть подробнее?


Заботу о взаимодействии драйвера и прикладного приложения берет на себя ядро, ос. Если брать за основу, что всё в Linux файлы, то при загрузке некоторых драйверов создается интерфейс в виде файла в папке /dev. Этим интерфейсом вы можете пользоваться вызывая библиотечные функции типа read(), write(). Хотя я точно не знаю, библиотечные ли это функции или прямые системные вызовы. Read, write из user space ядро транслирует в вызовы драйвера. В коде драйверов есть структура типа такой :

struct file_operations fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
};

В коде драйвера все эти функции должны быть определены. То есть открывая файл в приложении, вы выбираете устройсво, вызывая read, write, вы работаете с устройством. Весь путь трансляции этих вызовов в вызовы драйвера берет на себя ядро. Почему не возникают вопросы по поводу работы прикладного софта с обычным текстовым файлом? Ведь читая из текстового файла вы ведь тоже работаете с железом в виде контроллера жесткого диска, к примеру.

NDK для Андроида, это набор скомпилированных библиотек, необходимых для компиляции вашего софта на С/С++ у себя на машине(не Android). Такие же библиотеки лежат уже на Android машине в соответсвии с весрией Andtoid и NDK. Native это у них вроде язык С/С++, не Native - Java(SDK). Там есть еще GDB, и система сборки их. Все это уже скомпилировано под ARM.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 10:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.05067 секунд с 7
ELECTRONIX ©2004-2016