Jump to content

    

О драйверах для юникс на пальцах

у меня 2 варианта

либо через usb в ethernet, и надежда на то что в ядре уже есть драйвер аля RNDIS, и все произойдет само собой

либо что немного более правильно через SPI, I2S и так далее, но к ним точно драйверов не будет. И особенно доступа из андроида, и тут надо будет написать драйвер, и причем не трогая ядра, а то поговаривают в гугл маркет пускать перестанут...

 

Но в познавательных целях хочется все варианты и чуть ли не RNDIS повторить...

Share this post


Link to post
Share on other sites
у меня 2 варианта

либо через usb в ethernet, ...

В проекте http://virt2real.ru/ используется ethernet через USB. Исходники ядра доступны. Можете посмотреть, как там сделано.

 

Share this post


Link to post
Share on other sites
либо что немного более правильно через SPI, I2S и так далее, но к ним точно драйверов не будет.

 

Через I2C можно тоже работать из юзер моды. Через SPI, вроде, тоже. I2S (не ошиблись??) это уже прерогатива аудио-подсистемы.

Написать драйвер SPI или I2C-устройства - это элементарщина (см. для примера драйвера в input разных клавиатурных микрух.) Но, повторюсь, через эти интерфейсы можно работать и из юзер-моды через драйвера SPI или I2C мастеров.

Share this post


Link to post
Share on other sites

I2S там какой-то аудио выход что ли...

А SPI чуть ли не ногодрыгом сделан, не понятно по схеме

 

то есть получается что все уже написано до нас, бери и работай? А где место подвигу?

Share this post


Link to post
Share on other sites
то есть получается что все уже написано до нас, бери и работай? А где место подвигу?

Вот когда после загрузки вашего драйвера в систему что-то пойдёт не так - вот тогда и будет место подвигу.

А оно обязательно будет! :rolleyes:

Share this post


Link to post
Share on other sites
А где место подвигу?

 

В общем, да, для решения простых задач через USB, I2C и SPI все сделано до нас. Бери и пользуйся сразу из юзер спейса. С I2S - вот там место подвигу вполне найдется :)

 

PS

И еще место подвигу будет, когда оно с пол-оборота не заработает, или kernel panic получится где-то вдалеке от драйвера... Я вот доходил до патченья глюков в недрах инициализации клоков, резетов и доменов питания одного процессора... Который вылез с совсем неожиданной стороны, после написания, кажется, драйвера видеозахвата, работающего через видеопорт... ну вот как-то так... Типа дернул за веревочку, а взорвалось в соседней области :)

Share this post


Link to post
Share on other sites
Понятно, спасибо за разъяснения, я глупо надеялся что есть какая-то логика... А как вы с этим живете? Не лезете на уровень драйверов или уже поднатарели и спокойно в этом ковыряетесь?

 

Я, имея солидный опыт в электронике и программировании микропроцессоров, "лез" на уровень драйверов Линукса несколько лет. Не скажу, что все время этим занимался, но изучал в свободное время. Там надо понимать что такое ядро. Уметь его компилировать, знать как его конфигурировать. Знать как устроена структура исходников ядра. Где расположены файлы платы и мого многое другое, что явно не относится к написанию драйвера. Если на пальцах, то ответ получится точный, но бессмысленный.

Драйвер в Линух (Юних) это код, который бежит в пространстве ядра и имеет интерфейс доступа файла. Написав соответствующим образом функции read/write, вы, читая этот файл или записывая в него будете обмениваться данными с вашим устройством.

 

Вот эти книжки (их можно скачать из сети) помогут вам разобраться в дополнительных знаниях вокруг драйверов Линукса.

http://www.amazon.ca/Embedded-Linux-Primer...d/dp/0131679848

http://www.kroah.com/lkn/

 

А на этом сайте можно найти много интересной информации.

http://free-electrons.com/

 

Через I2C можно тоже работать из юзер моды. Через SPI, вроде, тоже. I2S (не ошиблись??) это уже прерогатива аудио-подсистемы.

Написать драйвер SPI или I2C-устройства - это элементарщина (см. для примера драйвера в input разных клавиатурных микрух.) Но, повторюсь, через эти интерфейсы можно работать и из юзер-моды через драйвера SPI или I2C мастеров.

 

Уточнение. В Линукс системе как правило уже есть драйвры SPI и I2C, которыми можно воспользоваться без написания специального драйвера, но также можно и написать драйвер для доступа к определенному устройству на указанных шинах. В документации ядра есть пример доступа к таким устройствам без написания драйвера:

https://www.kernel.org/doc/Documentation/i2c/dev-interface

 

Документация на I2C

https://www.kernel.org/doc/Documentation/i2c/

Документация на SPI

https://www.kernel.org/doc/Documentation/spi/

 

Документация на все ядро

https://www.kernel.org/doc/Documentation

 

Вот когда после загрузки вашего драйвера в систему что-то пойдёт не так - вот тогда и будет место подвигу.

А оно обязательно будет! rolleyes.gif

100%

Edited by Tarbal

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now