Перейти к содержанию
    

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

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

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

 

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

 

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

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

 

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

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какое это имеет отношение к драйверам unix-систем?

 

Касательно драйверов могу посоветовать почитать книгу "Linux device drivers".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Касательно драйверов могу посоветовать почитать книгу "Linux device drivers".

 

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

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

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

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

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

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

 

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, я понял.

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

 

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

 

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

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

 

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Ок, я понял.

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

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

 

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

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

 

 

 

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

да, через NETLINK можно EthX зарегистрировать.

 

http://free-electrons.com/doc/training/lin...rnel-slides.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

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

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...