Всем привет, хочу поднять вопрос про драйвера.
Давайте порассуждаем, какую цену имеют следующие способы обеспечения поддержки оборудования под гипотетической самодельной ОС:
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, меня интересует только уровень функций "отправить пакет", "принять пакет")).
|