OSDev

для всех
Текущее время: 20 апр 2024, 12:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 01:36 

Зарегистрирован: 13 фев 2018, 17:38
Сообщения: 11
Например сетевой драйвер, драйвер видеокарты, и драйвер клавиатуры.
Где искать информацию?
По каким ключевым словам?
хотелось бы почитать вводную статью на русском по написанию драйвера для видеокарты самого простейшего для 32 битного режима.
и хотелось бы иметь таблицу с функциями видеокарты или описание ее архитектуры
(есть ли в ней регистры, есть ли функции типа int 10h, какие адреса за что отвечают)
наиболее полную информацию.
поделитесь пожалуйста, можно исходники с комментами даже.
гугл меня огорчает, не могу подобрать ключевые слова для поиска.
разбирать ядро линукса даже первой версии - слишком сложно..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 06:06 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
В двух словах не расскажешь.
Бах Морис-Архитектура операционной системы UNIX-Prentice-Hall (1996)
http://minix3.ru/docs.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 06:10 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Современные видюхи -- крайне сложные устройства (сложней их просто нет) и вдобавок плохо документированные (nVidia -- вообще никак). Начинать с них точно не следует. Ну а для вывода инфы без оси просто писать её в буфер кадра, который был заранее установлен вызовом функции БИОС, и не заморачиваться :)

Подсистема ввода-вывода -- самая сложная часть ОС. Линух (как и Унихи вообще) тут изучать можно разве что для того, чтобы увидеть, как НЕ надо делать ввод-вывод. Из широко распространённых сегодня систем нормальная архитектура подсистема ввода-вывода только в Винде (там тоже свои тараканы, но основа там здравая). Кроме того, виндузовый ввод-вывод весьма хорошо расписан самой МС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 07:21 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Я не согласен с SII по повуду того, что winAPI проще чем POSIX. Функционал у них один и тот-же. А значит простота всего лишь иллюзия. А достигается это путём грамотного разделения и сокрытия информации.

Я бы ещё присмотрелся к unix 1.0
http://www.bitsavers.org/pdf/bellLabs/u ... _Jun72.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 10:50 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
pavia писал(а):
Я не согласен с SII по повуду того, что winAPI проще чем POSIX. Функционал у них один и тот-же. А значит простота всего лишь иллюзия. А достигается это путём грамотного разделения и сокрытия информации.

Я бы ещё присмотрелся к unix 1.0
http://www.bitsavers.org/pdf/bellLabs/u ... _Jun72.pdf


WinAPI не проще, чем POSIX -- это раз. Два -- я нигде этого и не утверждал. Три -- POSIX является стандартом, а не ОС, но этот стандарт мало где реализован (а Linux вообще к посиху никак не относится), а, кроме того, совершенно никак не регламентирует, как именно он должен быть реализован (он говорит, что должно быть сделано, а не как оно должно быть сделано). Четыре -- речь шла о создании драйверов, а не о том, что пользователь видит снаружи, т.е. не об API ОС (что как раз и регламентирует POSIX), а о её внутреннем устройстве. И, кстати, в Винде с самого или почти самого начала есть подсистема POSIX, но уних-подобной системой винда от этого не становится (а в 10-ке вроде как обеспечили возможность выполнения линуховых программ, и что, винда стала линухом?).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 12:09 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
SII писал(а):
Подсистема ввода-вывода -- самая сложная часть ОС. Линух (как и Унихи вообще) тут изучать можно разве что для того, чтобы увидеть, как НЕ надо делать ввод-вывод. Из широко распространённых сегодня систем нормальная архитектура подсистема ввода-вывода только в Винде (там тоже свои тараканы, но основа там здравая). Кроме того, виндузовый ввод-вывод весьма хорошо расписан самой МС.

SII писал(а):
WinAPI не проще, чем POSIX -- это раз. Два -- я нигде этого и не утверждал. Три -- POSIX является стандартом, а не ОС, но этот стандарт мало где реализован (а Linux вообще к посиху никак не относится), а, кроме того, совершенно никак не регламентирует, как именно он должен быть реализован (он говорит, что должно быть сделано, а не как оно должно быть сделано). Четыре -- речь шла о создании драйверов, а не о том, что пользователь видит снаружи, т.е. не об API ОС (что как раз и регламентирует POSIX), а о её внутреннем устройстве. И, кстати, в Винде с самого или почти самого начала есть подсистема POSIX, но уних-подобной системой винда от этого не становится (а в 10-ке вроде как обеспечили возможность выполнения линуховых программ, и что, винда стала линухом?).

Извените, но я вас не понимаю от слов совсем.
Если вы говорите про драйвера в виндоусе, то их архитектура расписана крайне плохо. Они даже человеческий пример драйвера умудрились выпустить только в 2017 году!
https://github.com/Microsoft/Windows-dr ... ial/serial
(я смотрел этот пример во всех SDK и там есть с чем сравнивать)
И то в примере отсутствует работа с объектами процесса (PDO). Блага такое есть в соседнем примере.

Устройство архитектуры в/в там вообще не расписано и относится к legacy-коду.
А если взять Unix 1 или MINIX 3 там это всё прозрачно.

Да в виндоусе многое придумано качественно. PDO - для аварийного завершения приложений. WMI - для повышения отзывчивости. Сообщения - для поддержки параллельного программирования. Объектная модель
- для виртуализации устройств. PnP - для автоматического конфигурирования(правда нормально сделано только для USB).

Но в одиночку такое качество кода не потянуть. Поэтому все упрощают и упрощают. Вместо драйверов в ОСРВ принято пользоваться библиотеками: uip, FatFs, AGG, итд.

Цитата:
в Винде с самого или почти самого начала есть подсистема POSIX
Её там нет это маркетинговый ход!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 14:12 

Зарегистрирован: 13 фев 2018, 17:38
Сообщения: 11
Я так понимаю что драйвера для видеокарт пишут сами разработчики видеокарт для разных операционок свои.
Или все таки есть какие то руководства по программированию видеокарт?
для 32 битного режима для собственного ядра?

и еще такой вопрос opengl же без драйвера не будет работать?
opengl не является же драйвером?

какие есть самые простые операционки с исходниками которые поддерживают nvidia geforce gt 330m?
(https://en.wikipedia.org/wiki/List_of_operating_systems нашел список.. осталось выбрать те которые поддерживают нвидиа)

где найти список всех операцонок у которых есть исходники?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 15:01 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
kvonosan писал(а):
Я так понимаю что драйвера для видеокарт пишут сами разработчики видеокарт для разных операционок свои.


Полноценные драйверы -- да. На АМД вроде как всю документацию открыли, так что теоретически можно и самому, но это задача архисложная, если речь именно о полноценном драйвере. Переключалку буферов кадров, по идее, сделать несложно -- но всё равно прилично документации придётся перелопатить сначала.

Цитата:
Или все таки есть какие то руководства по программированию видеокарт? для 32 битного режима для собственного ядра?


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

Цитата:
и еще такой вопрос opengl же без драйвера не будет работать? opengl не является же драйвером?


И OGL, и ДиректХ, и Вулкан -- вещи, располагающиеся над драйвером и решающие более высокоуровневые задачи. С железом они не работают.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 16 фев 2018, 15:48 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Что такое драйвер? Прежде чем ответить на этот вопрос ответим что такое API?
API - application programming interface
application - приложение или по просу программа.
programming - прилагательное "программный"
interface - интерфейс

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

Так вот драйвер это реализация некоторого API.
Операционная система состоит из программ и API для них. Для того что-бы написать драйвер нужно знать API.
У каждый ОС свой API. Прежде чем приступать к написанию драйвера надо придумать этот самый API.

Заметьте в определение драйвера я ни слова ни сказал про железо.
Так вот драйвер не обязан взаимодействовать с железом он может использовать и другое API.

У МС даже есть деление драйверы режима ядра и драйверы прикладного уровня. Последние как правило вызывают первые. А те в свою очередь вызывают функции из библиотек и ядра.

МС вообще насчитывае 6 уровней абстракции над железом. А я даже больше
Графический интерфейс пользователя (игра)
Фреймворк - Ogry3D
бибилотека - с API такая как OpenGL.dll
драйвер пользовательского уровня - nvoglv64.dll
драйвер ядра - Monitor.sys
минидрайвер - nvlddmkm.sys
бибилотека - HAL.C
регистры железа -


Цитата:
и еще такой вопрос opengl же без драйвера не будет работать? opengl не является же драйвером?

В далёкие годы драйвер видео карты заменял OpenGL.dll что-бы добавить свои расширения. Потом производители договорились о своем интерфейсе Installable Client Driver.

В исходниках Mesa есть opengl который чисто программный.


Цитата:
Или все таки есть какие то руководства по программированию видеокарт?

Есть для видеокарт 80-тых годов
http://www.codenet.ru/progr/video/egavga/
http://www.frolov-lib.ru/books/bsp/v03/index.html
Для видео карт с 90-тых годов используют VESA. В ПЗУ видеокарты зашыт код для Int 10h
https://www.osp.ru/pcworld/1998/07/159374/
Но беда что его надо вызывать из 16-битного режима поэтому
Два пути либо эмулятор 16-битного кода как в линуксе.
Либо выставить нужное разрешение в загрузчике и больше не менять его. Так поступают все хобийные ОС.
GRUB можно указать нужное разрешение, и MultyBoot вернёт указатель на буфер и разрешение.


Цитата:
какие есть самые простые операционки с исходниками которые поддерживают nvidia geforce gt 330m?

Из ОС с драйверами GPU только Linux, KolibyOS, ReactOS и Haiku OS и возможно BeOS.
А сложность написания видео драйвера сопоставима с написанием ОС.

Цитата:
где найти список всех операцонок у которых есть исходники?

https://wiki.osdev.org/Projects


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишутся драйвера?
СообщениеДобавлено: 13 май 2018, 09:38 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
kvonosan писал(а):
Например сетевой драйвер, драйвер видеокарты, и драйвер клавиатуры.

это всё разные вещи и пишется оно всё поразному.
kvonosan писал(а):
Где искать информацию?
По каким ключевым словам?

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

kvonosan писал(а):
хотелось бы почитать вводную статью на русском по написанию драйвера для видеокарты самого простейшего для 32 битного режима.
и хотелось бы иметь таблицу с функциями видеокарты или описание ее архитектуры
(есть ли в ней регистры, есть ли функции типа int 10h, какие адреса за что отвечают)
наиболее полную информацию.

такого к сожалению нет, сам искал весь жёсткий диск заполнился документациями и толку от очень мало.

если говорить о прерываниях биос int 10h тут на форуме уже поднималась такая тема, это совсем не драйвер а прерывание биоса программный код этого прерывания у разных видео карт разный.
по сути устанавливая режим работы видео карты в оперативной памяти появляется место(фрейм) который отображается в конечном итоге на экране.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB