Linux Device Drivers 3Rd Edition На Русском

Linux Device Drivers 3Rd Edition На Русском

Linux Device Drivers 3Rd Edition На Русском 4,0/5 4682votes

Русский вариант Linux Device Driver 2nd edition. Введение в драйвера устройств. Экспортирование символов в Linux 2. Например, задача реализация русского меню с этим экраном без русского. Настольная книга Linux Device Drivers, Third Edition. Причины собирать ядро Linux из исходников, в общем то, те же. Создание собственных драйверов под Linux Хабрахабр. Многие мои друзья и знакомые крутят пальцем у виска или задаются вопросом не жмт ли мне череп, когда узнают, что я пишу драйвера под Linux. Слово драйвер окутано каким то почти мистическим смыслом, и постичь Дао его написания способны лишь избранные гуру. К счастью это не так. Не знаю, как обстоят дела с написанием драйверов под другие операционные системы, в т. Linux Device Drivers 3Rd Edition На Русском' title='Linux Device Drivers 3Rd Edition На Русском' />Для написания драйвера необходимы базовые знания языка си, представление о работе ОС линукс базовые, понимание того, что мы хотим получить, желание чтения документации и исходных кодов, ну и усидчивость. Вы хотите посмотреть как написать драйвер для своего устройства Тогда ныряйте под кат Лгкость написания драйверов объясняется тем, что исходный код linux великолепно задокументирован и доступен в исходниках, в сети множество примеров и куча литературы. А для создания драйвера вам нужен только любимый дистрибутив и исходники ядра, ну и компилятор под нужную вам архитектуру. Свой первый, не учебный, драйвер я писал для процессора Power. PC 8. 36. 0, он взаимодействовал с микросхемой ПЛИС и осуществлял сброс настроек по умолчанию. Как это ни странно звучит, я его сделал, немного переписав драйвер SPI для этой архитектуры. Я это говорю к тому, что единая стандартизация написания программ в ядре Linux позволяет проводить такие штуки. Настольная книга разработчика драйверов под Linux это Linux Device Drivers. Книжка является исчерпывающим руководством по разработке и если что то не хватает в книге, то это точно можно найти самостоятельно в исходниках ядра. Разумеется, данный пост не претендует на то, чтобы заменить эту замечательную книгу. Более того, написан он по мотивам прочтения оных трудов, но вс же не является кратким пересказом данной книги. Автор этих строк ставит собой цель заинтересовать читателя простотой и изяществом ОС Linux, и понизить порог вхождения людей в разработку драйверов. Поверьте это очень просто То, для чего будем писать драйвер. Поскольку основная цель данной статьи написание драйверов, железу мы уделим минимум внимания. Я надеюсь все дружат с паяльником, а те кто не дружат настало время начать дружить, я кратко расскажу, что и как делалось. Ксения Драгунская Рыжая Пьеса тут. Мы будем писать драйвер для дисплея семейства HD4. LPT порт к компьютеру. Знаю, что порт древний, а типу дисплеев лет не меньше, чем мне, но вс же это красивый и простой пример написания драйверов под linux, не углубляясь в аппаратные подробности. И тем более, что переделать этот драйвер для этого экрана для других архитектур будет делом замены одной строчки Итак, нам понадобится LPT порт шнурок для старого принтера и опционально разъм CENTRONICS на 3. HD4. 47. 80, самое лучшее это минимум 4х. Ом, для регулировки контраста. Поскольку LPT порта у меня нет уже давным давно, я прикупил первую попавшуюся плату на PCI можно и PCI E. Причм плата попалась на столько китайская, что я даже не смог найти никакой документации по напаянному чипу на ней. Ничего, будем ещ и реверсить е. Аппаратные исходники. Будем считать, что достать эти компоненты не составило труда, и ваши руки горят от нетерпения вс сделать. ПредупреждениеВнимательно прочитать Хочу обозначить, что мы работаем в самых тяжлых условиях, с железом, да ещ и будем работать на уровне ядра. Живм, так сказать, внутри пациента. Любая ошибка в программе и ядро падает. При чм оно может даже не успеть помахать вам kernel. Обратите внимание, что вы запустили драйвер, выгрузили его, и вдруг начались неявные глюки вс, ваш путь перезагрузка. Если система жива, то командой reboot. Если уже нет, то аппаратный reset. Хотя при тяжлых случаях иногда система может сама себя перезагрузить. Плюс, если вы не знаете что делаете пишете в порт, обращаетесь к областям памяти и т. Ибо вс это в лучшем случае может сбить настройки записанное неверное значение в порт 7. BIOS в х. 86 или даже попортить оборудование например посадив ножку GPIO на землю. Поэтому чтко понимайте что вы делаете, как на аппаратном, так на программном уровне Приступаем. Для счастливых обладателей встроенного lpt порта в свом компьютере скажу, что в вашем случае порт живт по стандартному адресу 3. Меня можно среди ночи разбудить и я скажу эту цифру, столько с ней связанно. Но ныне нам дали вражескую плату, и нам предстоит е победитьВставляем плату в слот PCI или PCI E, загружаемся и смотрим что у нас происходит на шине PCI следующей командой lspci v. Но нас более всего интересует адреса, на которых сидит данный порт. Это строки IO ports, а именно цифры c. Нам теперь нужно найти какие же адреса за что отвечают. Для этого к порту вывода подключим светодиоды с резисторами примерно по такой схеме резисторы примерно 3. Ом, или больше или меньше, не важноСхема проверки. Поскольку у меня уже есть заготовка светодиодов для теста такого рода, то я вставлял провода прямо в разъем CENTRONICS и у меня не влезло все 8 штук проводов, поэтому вставил только 6 первые 4 и последние два. Собранный тестер порта. И набросаем небольшую программку для проверки. Для работы с портом я взял пример отсюда www. Linux miniIO Port Programming. Единственное, что надо исправить строку include lt asmio. Делаем нормальные задержки в секунду вместо usleep1. BASEPORT. outb0x. AA, BASEPORT. outb0x. FF, BASEPORT. Дефайн define BASEPORT меняем на порт 0xc. Компилируем, запускаем из под рута светодиоды не горят. Меняем на другую цифру 0xc. Нуль. На выводах AAh. И, разумеется через секунду FFh. Результат налицо. LPT порт данной платы живт по адресу. Xc. 02. 0 Хочу обратить внимание программистов жестянщиков на магическое число 0x. AA это последовательность единиц и нулей. Вот так 1. 01. 01. Это очень удобно для всяких отладок. А вообще всякий кто работает с железом должен легко в уме переводить двоичное, десятичное, шестнадцатеричное туда сюда обратно. Таки дисплей. Барабанная дробь, настало время собрать железку воедино Для этого нам осталось вс спаять вместе. Вс собираем по следующей схеме. Знаю, что схема не по ГОСТу, но это и не журнал РадиоДля питания экрана я распатронил провод USB, и сейчас у меня к экрану идут два провода. Есть хитрый вариант, просто до него никак не доходят руки это пустить питание USB прямо в проводе LPT, отпаяв один из многочисленных земляных проводов. Как дойдут руки обязательно сделаю. Допишу только эту статью. В результате, после подачи питания, мы должны получить что то вроде этого. Подрегулируйте яркость резистором, чтобы появились две полоски. Они свидетельствуют нам о том, что дисплей не проинициализирован. Девайс в сборе. Фух, с аппаратной частью мы закончили, пришла пора переходить к программе. Приступаем злобным опытам с экраном в программе. В качестве готовой либы для работы с дисплеем использовал код от Arduino взятый отсюда. Я тоже не люблю эту платформу, но код годный для дисплеев, подключаемых по I2. C. Если последнее слово вам ни о чм не говорит, не пугайтесь. Суть такова, что тот же самый дисплей подключн по двум проводам как следует из названия шины, а далее там стоит регистр, который снова преобразует переданный байт в параллельную шину, прям как у нашего LPT порта. В результате выкинув часть работы с I2. C, получим годную либу. Для чистоты переписал на сях, добавил парочку нужных функций, переименовал некоторые конфликтные, сделал ещ какие то изменения не помню, много воды утекло и получил конфетку. К слову сказать код использовался на STM3. I2. C. А теперь мы его портируем уже на х. Вот она великая сила переносимости кода Потратив всего 1.

Linux Device Drivers 3Rd Edition На Русском
© 2017