OSDev

для всех
Текущее время: 28 апр 2024, 21:43

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 03 мар 2014, 22:38 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Всем привет, хочу поднять вопрос про драйвера.

Давайте порассуждаем, какую цену имеют следующие способы обеспечения поддержки оборудования под гипотетической самодельной ОС:

1. Заимствование драйверов из Win32

(бинарных версий; тут надо реализовывать достаточно массивный каркас функций ядра винды из ntoskrnl, ntdll, ndis; преимущество этого варианта в том, что специалистов по ядру винды должно быть больше чем по линуксу например, поправьте если я ошибаюсь)

2. Заимствование драйверов из Linux / Android

(на уровне исходного кода; по идее, заимствовать должно быть проще, чем Win32 драйвера, поправьте если я ошибаюсь; андроидовские дрова - для планшетников)

3. Реализация драйверов железа своими силами

(этот вариант неприемлем, разве что только на первых этапах и только для широко распространённых и хорошо стандартизированных железок)

4. Как то делегировать разработку драйверов сторонним людям

(тут нужно иметь рычаги влияния; в принципи можно пойти и таким путём, вопрос в том, как достичь достаточного влияния?)

5. Заимствование драйвров из KolibriOS / MenuetOS

(на уровне бинарников; подсистема драйверов должна быть ещё проще чем в linux; сама колибри уже подросла, чтобы оттуда можно было чего нибудь надёргать полезного)

6. Забить на всё и ничего не предпринимать

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

--

В первую очередь хотелось бы иметь возможность работы с USB, IDE и Ethernet. В целом для USB и IDE возможна разработка своими силами, а вот с Ethernet неясно, т.к. карточек много, и врядли они все совместимы с NE2000.

Так вот, вопросы у меня следующие. Насколько сложно устроена подсистема драйверов Win32, linux, kolibri? Кто в этом разбирался, можете дать краткие аннотации? Какую подсистему драйверов лучше всего реализовать в своей ОС? Или же имеет ли смысл изобретать нечто своё, и затем (при необходимости) делать переходники для дров Win32 | linux | kolibri?

Вобщем, обсуждаем архитектуру подсистемы драйверов и способы заимствования драйверов из существующих ОС. Приветствуются примеры (в кратком изложении, основные моменты) реализации драйверов нетривиального уровня для любой из них (как по мне: тривиальный - это поставить обработчик прерывания и поморгать светодиодом на LPT-порту, а нетривиальный - это формирование очереди USB-пакетов, Ethernet-пакетов (я не говорю тут про реализацию TCP/IP, меня интересует только уровень функций "отправить пакет", "принять пакет")).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 мар 2014, 23:49 

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

Конечно, Винда сложна -- но сравнивать её с функционалом той же КОС как-то даже смешно. Да и Линух вчистую сливает по этому самому функционалу, если "смотреть в корень", а не на библиотеку какого-нибудь языка высокого уровня.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 мар 2014, 01:15 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Вообще заимствование планируется как временная мера, и только в случае, если профит от заимствования окупит затраты на реализацию драйверной подсистемы. Поэтому неважно, насколько велик хаос в той или иной системе, главное чтобы по факту реализации работали конкретные драйвера (конкретного класса устройств например).

С точки зрения драйверов, как я их понимаю, неважно, поддерживается ли многопоточность и 64-битность. В конечном счёте драйвера только пишут в порты и память. Их можно выполнять исключительно на одном ядре, и в 32-битном режиме. Гораздо сложнее в этом вопросе работа на ARM-ах (хотелось бы сразу учитывать это направление развития, а x86 только как временную площадку для отладки), поэтому предпочтительно линуксовые дрова в исходных кодах, а им вообще параллельно, поддерживает ли ОС указанные фичи.

По поводу винды. Если в пользовательском пространстве для меня всё прозрачно, то в ядро я не лазил ещё, может быть и не было бы таких вопросов. Но судя по функциям, в ядре много дублирующего кода. Но должен быть какой то базовый функционал, который юзают все дрова. Чуть шире чем ввод/вывод в порты, но обозримый (не сильно широкий). Вот хотелось бы обозначить этот функционал. Т.е. такой, который драйверы ожидают от ядра. В этом смысле в линухе разобраться может быть проще, поскольку есть исходный код, а код драйверов не особо сложный должен быть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 мар 2014, 10:36 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
dragon писал(а):
Вообще заимствование планируется как временная мера...

Всё равно, что "временно" подвинуть гору, чтобы поставить дачный домик. Драйвер в виндоус надо рассматривать не как изолированный модуль, имеющий чётко очерченный интерфейс и обращающийся только к портам, а как чёрный ящик, вовсю пользующийся многочисленными вызовами ядра ОС, и чтобы этот ящик заработал, надо повторить ядро виндоус.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 мар 2014, 12:29 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Yoda писал(а):
чтобы этот ящик заработал, надо повторить ядро виндоус

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 мар 2014, 13:37 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Ни один из вариантов не является сверхзадачей, всё упирается во время и энтузиазм. Я думаю, в React OS уже реализована поддержка драйверов Windows.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 мар 2014, 16:59 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
SII писал(а):
Yoda писал(а):
чтобы этот ящик заработал, надо повторить ядро виндоус

Ну, не целиком всё ядро, хотя приличную его часть (половину, грубо говоря).

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 мар 2014, 09:02 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
В полуоси был довольно успешный проект - genmac... Потом автор его бросил, а исходники не отдал (возможно там с ReactOS или самой винды и наворовано :D)
Сравнительно небольшой модуль, эмулирующий для NDIS win32 драйверов заметную часть R0 API... Запускаются не все драйвера, но то, что запускается - бегает и резвится без потерь скорости (wifi в том числе).
Т.е. вопрос подсистемы... сетевые - вот, вполне реально... а для видео - придется, очевидно, всю винду дописывать ;)

Cамый больной вопрос для всего не-мейнстрима... ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 мар 2014, 15:42 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Ну а чтоб работали современные видеодрайверы, надо переписать не только ядро Винды, но и всю подсистему Win32 и DirectX, потому что они теснейшим образом связаны. 90% того, что можно назвать видеодрайвером, сейчас работает в режиме пользователя.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 мар 2014, 19:13 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
1. Очень много надо написать React OS только в конце 2013 года смогли заставить собираться "ntoskrnl". Это значит что у них только 30-50% ntoskrnl. А надо ещё с десяток других модулей.

2. У линукса никто не зимствует тоже по тойже причине. А про андроид забудьте, андроит ОС открытая но вот драйвера к железкам как раз таки закрытые. А то бы у моей вейва давно бы была нормальная ОС.

3. По этому этапу идут все ОС. Каждая пишут свою подсистему и свои драйвера.
QNX, FreeRTOS, и тд.

4. Утром деньге вечером стулья.
5. У минуэта и колибри драйверов нет. Лучше уж с линукса копировать. У линукса хоть маломальская систематизация есть.

Я бы драйвера с QNX бы брал. Ядро там маленькое. Дрйверная под система простая.


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

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


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

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


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

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