Jump to content

    

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

Всем привет! Для того чтобы править миром не хватает малой части :)

Может кто на пальцах, схематично объяснить как устроены драйверы под юниксом?

 

Вот допустим у меня есть какой-нибудь ARM, на нем операционная система юникс. У ARM есть USB, и у меня есть Ethernet <-> USB типа LAN9730.

 

Что надо сделать чтобы можно было создать ТСР сокет который сможет подружиться с миром вокруг через этот езернет?

Я так понимаю что где-то в юниксе должен крутиться ТСР стэк и мне надо как-то умудриться входные данные с этого LAN подать в него, а выходные в LAN. А также настроить этот LAN на работу.

 

Или допустим я хочу пошевелить ногами или послать данные через UART. Как это делается? Не обращаться же напрямую в регистры проца из юникса, да это и не возможно как я понимаю.

 

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

 

Заранее спасибо!

 

Share this post


Link to post
Share on other sites

что-то я не настолько просветлен... можно чуть более подробно?

Share this post


Link to post
Share on other sites
Касательно драйверов могу посоветовать почитать книгу "Linux device drivers".

 

В целом бестолковая книга.

Более практичная - "Essential Linux Device Drivers"

 

Но даже в ней нет упоминания RNDIS который нужен для USB-Ethernet адаптеров

 

Так что правы те у кого такие вопросы вызывают приступы немотивированного сарказма.

 

Share this post


Link to post
Share on other sites

Незнание другого человека вызывает приступы сарказма только у недалеких людей. Я рано или поздно узнаю, а они такими и останутся;)

 

По сути вопроса. Очевидно что за 1 тему на форуме невозможно научиться писать драйвера, а главное что сейчас это и не требуется. Ближайшей моей задачей является понимание их работы, понимание того как идут данные.

 

AlexandrY - судя по соседним темам вы искушенный в потрохах операционок человек, и хотелось бы рассчитывать на вашу помощь в этом вопросе.

 

Вопрос же не в конкретном переходнике USB-Ethernet. В это же USB может быть воткнут GPS приемник или еще что-то. А на юниксе сверху может стоять андроид с его классами работы с GPS или чем-то еще. И мне хочется понять как так делают что все срастается... Ведь не могли же люди писавшие яву машину предусмотреть все варианты устройств подключаемых к портам и так далее, а тем не менее оно все как-то работает...

 

Так что если можно без немотивированного сарказма, максимально упрощенно как все работает?

 

 

А правильно я понимаю что если RNDIS поддержан в операционке (говорим про юникс), то достаточно сделать USB устройство с правильным протоколом, и данные с него пойдут в ТСР? То есть USB-WiFi может работать по тому же принципу, и в целом может быть даже какой то USB-RS485, на котором так же можно будет поднять ТСР сеть?

Share this post


Link to post
Share on other sites
Так что если можно без немотивированного сарказма, максимально упрощенно как все работает?

 

Слишком общие вопросы задаете, сложно отвечать :)

Попробуем конкретизировать:

1. может все-таки не unix, а linux? :)

2. у вас уже имется какое-то устройство (или отладочная плата) на ARM9 с установленным linux или вы пока просто фантазируете на тему?

3. сразу стремитесь познать драйвера, а есть ли опыт разработки по linux? простой опыт работы с linux?

4. наверняка у вас есть конкретная аппаратно/программная задача, может обрисуете?

 

По сути вопроса. Ближайшей моей задачей является понимание их работы, понимание того как идут данные.

 

Боюсь, что на пальцах вам здесь не расскажут.

 

По встраиваемому линуксу можно почитать например здесь или здесь.

По драйверам здесь.

Share this post


Link to post
Share on other sites

1 - да наверное. Я их путаю, наверное линукс

2 - скорее фантазирую, вероятнее всего будет что-то типа odroid-u3

3 - Работа на настольных компутерах, очень базовое представление. И я даже не столько стремлюсь познать драйвер. Я прекрасно знаю как пошевелить ножками ARM вообще и в целом, то есть как работает проц, периферия, но я хочу понять принципы работы с железом из линукса, именно с начинкой проца.

4 - Та задача которая есть это скорее самообразование, хочется продвинутся в вопросах "взрослых-распространенных-пользовательских" операционок под железо. Хочу попробовать подтянуть железо под андроид, который в базе ядро юникса-линукса не знаю кого там...

 

 

Боюсь, что на пальцах вам здесь не расскажут.

Жаль. Мне надо в общих чертах чтобы хотя бы понимать какие вопросы надо задавать. За ссылочки спасибо, поизучаю.

 

 

Share this post


Link to post
Share on other sites

Ок, я понял.

Если "это скорее самообразование", то сслылочки должны немного расширить познания.

Правда про андроид там ни слова, но, ИМХО, андроид нужен только в девайсах с графикой и тачскрином. Обычно можно обойтись линуксом.

 

Share this post


Link to post
Share on other sites
Так что если можно без немотивированного сарказма, максимально упрощенно как все работает?

 

 

А правильно я понимаю что если RNDIS поддержан в операционке (говорим про юникс), то достаточно сделать USB устройство с правильным протоколом, и данные с него пойдут в ТСР? То есть USB-WiFi может работать по тому же принципу, и в целом может быть даже какой то USB-RS485, на котором так же можно будет поднять ТСР сеть?

 

Я же говорю внятной документации на реализацию RNDIS в линуксе нет. Там все архаично и безсистемно.

 

В трех же словах описать принцип построения и взаимодействия драйверов нереально.

А я уже кучу слов написал. :biggrin:

 

Это по тому, что драйвера для разных физических интерфейсов различаются на столько, что почти бессмысленно искать в них что-то общее.

Общие там только самые абстрактные вещи типа стековой структуры, блочной или поточной передачи и т.п.

 

Т.е. написав драйвер для UART-а вы все равно мало что будете понимать в драйверах для Ethernet-а.

Потому что это не драйверы, а целые стековые архитектуры с совершенно неповторимыми API между слоями стеков.

Share this post


Link to post
Share on other sites
Жаль. Мне надо в общих чертах чтобы хотя бы понимать какие вопросы надо задавать. За ссылочки спасибо, поизучаю.

Посмотрите еще:

Написание драйвера для LCD дисплея под embedded linux

Разработка драйвера ведомого SPI устройства для embedded Linux

Share this post


Link to post
Share on other sites
Т.е. написав драйвер для UART-а вы все равно мало что будете понимать в драйверах для Ethernet-а.

Потому что это не драйверы, а целые стековые архитектуры с совершенно неповторимыми API между слоями стеков.

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

 

Ок, я понял.

Если "это скорее самообразование", то сслылочки должны немного расширить познания.

Да я читаю, скорее всего это как раз то что мне нужно, правда думал что объемчик будет поменьше:)

 

Правда про андроид там ни слова, но, ИМХО, андроид нужен только в девайсах с графикой и тачскрином.

андроид - это надстройка, ява машина над юниксом, хороша тем что под нее меньше людей боятся писать, так что иногда и без экрана он имеет смысл, но все же редко...

 

 

 

Написание драйвера для LCD дисплея под embedded linux

Разработка драйвера ведомого SPI устройства для embedded Linux

 

ага спасибо, добавлю в список на прочтение:)...

книжками затарился на год вперед чувствую...

Share this post


Link to post
Share on other sites

если совсем на пальцах, то USB kernel API с одной стороны и NETLINK kernel API с другой.

а как вы этот драйвер писать будете - зависит от возможностей, заложенных непосредственно в чип, алгоритм строится под конкретную железку.

т.е. без детальной документации на него не обойтись. И, если в документации на чип алгоритм не описан, - то ещё плюс немного смекалки и фантазии.

Share this post


Link to post
Share on other sites

понятно дело что как работает железка - это известно. А сам драйвер - это фактически процесс который крутиться и пихает данные при помощи этих API? А как получать запросы от ТСР стэека которые надо в USB передать? Обработка колбэков или можно как-то событие зарегистрировать или как это в линуксе называется? А ведь еще надо как то сказать что Сокету что они именно через ваш драйвер наружу должны стучаться, то есть как-то сделать этот EthX через который полезут данные...

 

Я так понимаю RNDIS примерно этим и занимается?

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