LINUX.ORG.RU

Что нужно новичку для того, чтобы начать писать дрова?

 , ,


1

6

Здравствуйте! Решил начать познавать написание драйверов, помочь одному опен соурс проекту, ну и вообще программирование в kernel space. Гуглил и пришел к выводу, что мастхэв это книга Linux Device Driver, 3rd edition. Она вышла в 2005 году и описывает программирование для ядра 2.6. И у меня возник вопрос, стоит ли начинать вкладывать свои силы в понимание этой книги, актуальна ли там информация ? Может есть какие-то еще альтернативы, более современные, о которых мне следовало бы знать?

Дополнительный вопрос ) Я вооружился книгами в дополнение к ldd - Adison Wesley | Linux Kernel Development, 3rd Edition (Jun.2010) и Understanding the linux kernel, 3rd edition. Какие еще книги/онлайн ресурсы можете посоветовать ?

Буду благодарен любой помощи!

P.S. LDD, пока первые 70 страниц прочитал, отличная книга.



Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от chocobo

Хватит и 3.15. В основном изменения между версиями косметические/подготовительные для последующих крупных изменений, но всё делается пошагово. Но в целом, основные структуры остаются неизменными, разве что изменяется название переменных в контексте общего вектора изменений.

nickleiten ★★★
()

я п те посоветовал для начала взять какую нибуть железку типа там STM32, msp430 или какуюнить атмегу 16ти битную и повозиться со стандартными тасками типа поморгать диодиком,прочитать с СДкарточки что-то, написать прогу работы с символьным дисплейчиком типа 16х2, а затем и с графическим, запырить две таких платки по юарту, по кану, по и2ц. Выяснить что такое адресация, регистры, пар. шины, ДМА и т.д.

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

Jetty ★★★★★
()
Ответ на: комментарий от nickleiten

Хватит и 3.15

Отлично, как раз не дожидаясь ответа начал конфигурировать ядро 3.15 )

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

Спасибо за совет. Просто я думаю начать с виртуального девайса. На нем потренироваться.

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

Звучит прям как смонтированный webdav, к которому подключен encfs.

Ну разве когда-то было так, что написание велосипедов вредит обучению?

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

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

frozenix ★★★
()

Форум - Development

Что нужно новичку для того, чтобы начать писать дрова?

Поднять жопу и начать, очевидно.

anonymous
()
Ответ на: комментарий от Jetty

да вряд ли. программирование firmware - это ваще другая степь. там девайс изнутри виден. а в драйвере - снаружи. обычно эти области практически не пересекаются. прошивка проецирует наружу какие-то регистры и прерывания, и через них общается с драйвером. внутреннее устройство может быть скрыто от писателя драйвера как раз за счёт работы прошивки. да и по типам девайсов методы обмена с железкой все практически стандартные, мало зависящие от конкретной реализации.
конечно, необходимо разбираться в электронике, чтобы понимать принципы работы устройства. иногда и тестером ткнуть надобно, чтобы понять, выполнил девайс команду или нет. но исследование архитектуры чипа изнутри мало этому поможет. разве что для общего понимания принципов обмена по шинам, адресации и т.д.
программирование железяк сложнее чисто технически: нужен сам девайс, нужно питание к нему, нужен программатор, возможно, ещё и тестер/осцилл. нужны специфические компиляторы, утилиты для прошивки и т.д. для студента это было бы довольно сложно и затратно.

а для написания драйвера можно вообще ничего не иметь. упражняться сначала с виртуальными девайсами. потом взять какой-нибудь простенький дешёвый USB-свисток или COM-порт и на нём тренироваться. дёшево и сердито.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Я пока еще ньюбай конечно. А покупка малинки и ардуино как-то может мне помочь в ботрабатывании скиллов?

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

Купи лучше боадр с плисом от ксилинкса например, прокачаешься. На малине только кросс компилять учиться. А авр8 это вообще из другой оперы, там линуксом и не пахнет.

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Большое спасибо за совет, возьму на заметку. Только я не совсем понял, что означает «боадр с плисом от ксилинкса», можете разъяснить ?

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

Причем тут фирмваре. Человеку надо на простых примерах понять что такое прерывание, и как с ним работать. Что такое шина, какие бывают и как с ними работать. Как засетапить простенький юарт, и как работать с и2ц. Вот так вот нахрапом сразу все это делать в контексте кернела, без понимания что именно делать - это угарище.

Jetty ★★★★★
()
Ответ на: комментарий от frozenix

Если «блочный девайс» звучит как «файловая система», нужно чистить уши.

kike
()

если еще не посоветовали:

eudyptula-challenge.org

еще на русском есть цикл статей на ibm:

http://www.ibm.com/developerworks/ru/library/l-linux_kernel_01/

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

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

eudyptula-challenge.org

Очень интересно, спасибо!

А статьи IBM, уже читал понемногу )

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

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Есть-то есть. Но как-то уж слишком мало. Поэтому лучше сначала с МК начать. Берем МК пожирней (ног на 100-144) и балуемся. На него навешать можно что угодно! А с кубибордой какой-нибудь по USB связываться.

Кстати, по компоновке кубиборда лучше. По цене — не сильно-то дороже. Так что, кубиборду советую, а не "малинку".

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Iron_Bug

для студента это было бы довольно сложно и затратно

Можно рублей за 300 купить devboard на STM32F1xx. Программатор не нужен (есть bootloader). А рублей за 700 — уже "discovery" с st-link на борту.

А можно за те же 300-400 рублей купить простую ардуринку. Но я бы ТСу с такого начинать не советовал.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Я не она - даже если она фейк, имей совесть разговаривать по-человечески с людьми.

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

Он не линукс начинает изучать, он дрова хочет под него писать. А для того что бы писать дрова надо понимать КАК ЭТО РАБОТАЕТ. Так вот всякие ардуины стмы и мспшки дают возможно понять основы написания драйверов для различной переферии. А вот когда есть понимание как это работает и что такое вообще драйвер, тогда уж можно взяться за изучения линуксячьих фреймворков, структур данных и методов работы с ними.

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

А для того что бы писать дрова надо понимать КАК ЭТО РАБОТАЕТ

чтобы понять как это работает микроконтроллеры вообще мимо кассы, там совершенно другие подходы к программированию и назначение абсолютно иное чем у взрослых процессоров с MMU, скорей больше вреда будет чем пользы. Брать сразу взрослый хорошо документированный процессор с ARM - там те же интерфейсы как на микроконтроллере будут. Если денег жалко - тренироваться на эмуляторе, но он не даст такого драйва как реальное железо :)

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