Для чистоты переписал на сях, добавил парочку нужных функций, переименовал некоторые конфликтные, сделал ещё какие-то изменения (не помню, много воды утекло) и получил конфетку.
Я надеюсь все дружат с паяльником, а те кто не дружат настало время начать дружить, я кратко расскажу, что и как делалось.
Настольная книга разработчика драйверов под Linux это Linux Device Drivers.
H Делаем нормальные задержки в секунду (вместо usleep(100000, пишем sleep(1 и делаем последовательно три вывода в порт: outb(0, baseport sleep(1 outb(0xAA, baseport sleep(1 outb(0xFF, baseport sleep(1 Дефайн #define baseport меняем на порт 0xc030.
Собранный тестер порта, и набросаем небольшую программку для проверки.
Собранный тестер порта, и набросаем небольшую программку для проверки.
Для вывода на экран используется функция-обёртка print_to_string void print_to_string (unsigned char col, unsigned char row, unsigned char c, unsigned char len Первый параметр номер столбца (от нуля до 19 второй номер строки (от нуля до трёх третий указатель на символьную.
Для написания драйвера необходимы базовые знания языка си, представление о работе ОС линукс (базовые понимание того, что мы хотим получить, желание чтения документации и исходных кодов, ну и усидчивость.
Есть хитрый вариант, просто до него никак не доходят руки это пустить питание USB прямо в проводе LPT, отпаяв один из многочисленных земляных проводов.
Плюс, если вы не знаете что делаете (пишете в порт, обращаетесь к областям памяти и т.п.
Потратив всего 10 минут, чтобы код адаптировать уже под новую платформу.
Примеры таких устройств: клавиатура, последовательные порты. Блочные. В первых версиях Linux драйвера устройств были зашиты в ядро.
Не знаю, как обстоят дела с написанием драйверов под другие операционные системы, в т.ч.
А для создания драйвера вам нужен только любимый дистрибутив и исходники ядра, ну и компилятор под нужную вам архитектуру.
Не знаю, как обстоят дела с написанием драйверов под другие операционные системы, в т.ч.
Многие мои друзья и знакомые крутят пальцем у виска или задаются вопросом: не жмёт ли мне череп, когда узнают, что я пишу драйвера под Linux.
I/O ports at c020 size8, kernel driver in use: serial, как видим линух нашёл что-то на шине PCI, и даже попытался дать ему какой-то левый, явно неправильный драйвер.
Работа с портом осуществляется в одной единственной функции это непереносимый узел, и в зависимости от платформы способ вывода следует менять.
Я тоже не люблю эту платформу, но код годный для дисплеев, подключаемых по I2C.
Приступаем злобным опытам с экраном в программе В качестве готовой либы для работы с дисплеем использовал код от Arduino взятый отсюда.
Вы хотите посмотреть как написать драйвер для своего устройства?
Мы будем писать драйвер для дисплея семейства.
Для работы с портом я взял пример отсюда ml#s9.
Компилируем, запускаем из под рута: светодиоды не горят.
Это строки: I/O ports, а именно цифры c030h и c020h.
Sep 12, 2013. LDT - Linux Driver Template - sample template of Linux device driver for learning and starting source for a custom driver. Implements uart.
Слово драйвер окутано каким-то почти мистическим смыслом, и постичь Дао его написания способны лишь избранные гуру.
H #define LCD_strings 4 /строк #define LCD_columns 20 /столбцов int main LCD_init(0, LCD_columns, LCD_strings инициализация экрана print_to_string (0, 0, xxxxxxxxxxxxxxxxxxxx , 20 print_to_string (0, 1, yyyyyyyyyyyyyyyyyyyy , 20 print_to_string (0, 2, zzzzzzzzzzzzzzzzzzzz , 20 print_to_string (0, 3, mmmmmmmmmmmmmmmmm).
Я тоже не люблю эту платформу, но код годный для дисплеев, подключаемых по I2C.
А вообще всякий кто работает с железом должен легко в уме переводить двоичное, десятичное, шестнадцатеричное туда-сюда-обратно.
Хотя при тяжёлых случаях иногда система может сама себя перезагрузить.
Комментариев нет:
Отправить комментарий