LINUX.ORG.RU

Возможно перенести драйвер из Linux на свою ОСь?

 ,


1

2

Скажем запилил свою ОСь и хочу добавить поддержку ethernet карты на 200 Гбит/с. Если я обнаружил драйвер для линукса, то могу его перенести в свою ОСь? Или там (с 95% вероятностью) будет блоб завязанный на внутреннее API ядра? Ну, а MESA возможно перенести? Я просто нуб в драйверах, хотел вот прояснить ситуацию.

★★★★

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

SZT ★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от anonymous

Где то кто то сбойнул?

Я понимаю как работает драйвер клавиатуры и прочих мышек. Но мне не совсем понятно как запилены драйверы более сложных устройств как GPU или передовые Ethernet-ы с аппаратным шифрованием пакетов и прочими крутыми фишками типа скорости в 200 Гбит/с.

Понятно, что нужно порыться в коде ядра, но пока нет на это времени, поэтому чисто теоретически интересуюсь, если кто знает.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Чисто теоретически, драйвер работает с аппаратурой не напрямую, а через некоторое API, которое есть в ядре ОС. Если у тебя это API совпадает с линуксовым - проблем быть не должно. Если у тебя есть способ конвертировать как-нибудь код драйвера из Linux в своё API - проблем быть не должно. Если ты делаешь прослойку типа NDISwrapper - могут быть проблемы с производительностью, из-за дополнительного слоя абстракции. И возможны баги в самой этой прослойке. NDISwrapper вообще работает с бинарными виндовыми дровами для wifi, позволяя их использовать на Linux, так что там даже исходники самих дров не нужны.

SZT ★★★★ ()

Если я обнаружил драйвер для линукса, то могу его перенести в свою ОСь?

Очевидно, ответ зависит от того, насколько интерфейсы твоей ОСи похожи на линукс.

Судя по проблемам других ОС, это не такая простая задача.

Ну в общем, подробный ответ уже написал @SZT.

(Интересно, что ж за ОС у тебя такая.)

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Интересно, что ж за ОС у тебя такая

Пока никакая, но чисто теоретически думаю об unikernel системе на новом ЯП. А там может замахнусь и на UI.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

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

В следующий раз, когда будет чесаться, начну со сборки LFS. :)

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

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

К сожалению мою не реализовали ) Я хочу ОС на ЯП, которого еще нет ) Но возможно всё встанет на ЯП, если я не увижу преимуществ перед джавой или ржавым.

В следующий раз, когда будет чесаться, начну со сборки LFS. :)

Я это всё обязательно изучу и попробую, параллельно или перед тем как ринусь в бой ) Сейчас пока собираю ссылки и занимаюсь вообще другим делом в области механики )

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от Fast_Sloth

А примитивы синхронизации, списки, управление памятью т. д в самом модуле реализованы?

Без понятия, я незнаком с ядром линукса, чтобы по названиям функций определять их принадлежность к ядру или блобу.

foror ★★★★ ()
Ответ на: комментарий от SZT

драйвер работает с аппаратурой не напрямую, а через некоторое API, которое есть в ядре ОС

Вроде наоборот должно быть!? Драйвер должен работать с аппаратурой напрямую, а для ядра предоставлять некоторое API.

anonymous ()
Ответ на: комментарий от anonymous

Зависит от архитектуры. В микроядерной драйвера крутятся в пространстве пользователя, и для них есть специальные системные вызовы, чтобы через них работать с железом. Ядро проверяет выход за границы пространства адресов как памяти, так и портов. Вроде бы в третьем Миниксе так сделано, но я лично не проверял.

luke ★★★★ ()
Ответ на: комментарий от SZT

Проблемы в отсутствии сорцов этого крутого драйвера начнутся гораздо раньше — ТС-у надо будет о бинарной совместимости с Linux-ом позаботиться. Хотя бы для тех компонентов, которые связаны с драйвером...

peregrine ★★★★★ ()
Ответ на: комментарий от Fast_Sloth

Я тут аж проснулся от такого. У меня башка квадратная от простых СУБД + обмазывания JS-ом, который я не трогал с шараги. А этот и ЯП и ОС запилить хочет. ЯП то фиг запилишь, а вместе с ОС, это вообще тю.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от foror

Чувак, я тут посмотрел по хабре, ты старше меня, круче как разраб с кучей практики, если не врёшь в профиле (хотя может ты с веба только смотришь на мир, а я с ассемблера начинал и C, чтобы сейчас в веб сунуться легонько), но блин, с моей колокольни мне очевидно, что даже разработка ЯП + компилятор в одно рыло это большая боль (даже если обёртку вокруг clang-а llvm писать) и по сути пет-проект который съест всё время, а в случае успеха и полноценно может заменить работу. А тут боль в квадрате. Ты неужели такой производительный и опытный, что сможешь? Или просто времени у тебя очень-очень много?

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

В одно рыло то ты даже на вебе попробуй слепить аналог Jira, а это всяко легче чем реальную ОС

А что там ОС-ях сложного? Все технологии давно отработаны, масса документации, статей и открытого кода. Вы просто мыслите неверными категориями. Зачем мне реализовать полный аналог Jira/Linux, когда мне просто нужно unikernel ядро, на моём ЯП под конкретное железо. Я не собираюсь удовлетворить 100500 пользователей и их 100500 нонейм железок.

foror ★★★★ ()
Ответ на: комментарий от peregrine

ЯП то фиг запилишь

Классический ЯП для меня не сложно запилить, на реддите каждую неделю какой-нибудь студент очередной ЯП выкладывает.

Опять же вы мыслите не теми категориями, вы думаете я вам сразу проект уровень OpenJDK выдам? Нет, такие вещи начинаются с небольшой концепции. Я хочу попробовать сделать ЯП без GC, но с гибридным режимом управления памятью. Фактически этот ЯП будет также завязан на IDE, которая будет следить за памятью и другими ресурсами.

Но, что касается ЯП, думаю для начала выложить спецификацию в паблик и с заинтересованными лицами доработать её, чтобы ничего не упустить. Здесь да, я один не справлюсь, могу что-то и упустить.

foror ★★★★ ()
Ответ на: комментарий от peregrine

ты с веба только смотришь на мир

Я интересуюсь и низкоуровневым программированием, но чисто теоретически.

  • компилятор

Я не собираюсь разрабатывать компилятор и отранслирую в си код, чтобы проверить концепцию.

Или просто времени у тебя очень-очень много?

Да, есть время, я не обременён ипотеками, женами и детьми.

foror ★★★★ ()
Ответ на: комментарий от peregrine

Зависит от того, какая ОС и ЯП. Вот учебный клон UNIX 6:
https://github.com/mit-pdos/xv6-riscv/tree/riscv/kernel

Меня рассмешило, что его ОС не реализовали, хотя сейчас на любом языке можно найти ядро, поэтому он решил выпендриться и написать свой язык. Лучше бы изучил API ядра и помог какому-нибудь проекту, чем писать очередную TempleOS. Работы в разных проектах полно: https://github.com/tempesta-tech/tempesta/issues. Но тут уже работать надо, а не маниловщиной заниматься.

Fast_Sloth ()
Ответ на: комментарий от Fast_Sloth

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

Понятно, я могу переоценивать себя, но я сравниваю, анализирую и думаю смогу сделать лучше.

anonymous ()
Ответ на: комментарий от Fast_Sloth

поэтому он решил выпендриться и написать свой язык

Мне нахрен не упало пилить ЯП, у меня масса других идей. Но я 15 лет впахивал в ИТ, а воз и ныне там - задроты наперевес с си/крестами. Я последние годы ждал чуда, что создадут ЯП 21 века, но увидел только жалкие высеры копрэкономики.

Так что вынужден пилить сам.

anonymous ()
Ответ на: комментарий от anonymous

Так думай, анализируй и делай лучше, а не болтай на форумах, спрашивая полную ересь.

Если человек делает, то не заморачивается на бесполезные мечты и непонятной абстракции вопросы. Как возникнет проблема, тогда и надо ее решать.

Тут же ни проектирования, ни прототипа, а дурацкий вопрос по принципу «garbage in, garbage out».

anonymous ()

Mesa

Архитектура gallium3d способствует переносимости и переиспользованию. Нижний уровень придется адаптировать или переписать, но верхний готов. Посмотри, например, как переносят в freebsd и reactos.

boowai ★★★ ()
Ответ на: комментарий от anonymous

Вроде наоборот должно быть!? Драйвер должен работать с аппаратурой напрямую, а для ядра предоставлять некоторое API.

Это «напрямую» может отличаться. И не всегда оно «напрямую». В каком-нибудь STM32 ARM у тебя вот такими-то функциями можно пользоваться, вот таким-то образом настроить DMA и прочее, записывая какие-то байты в MMIO-регистры, типа вот http://easyelectronics.ru/kontroller-pryamogo-dostupa-k-pamyati-dma-kontrolle...

В каком-нибудь линукс-ядре под это всё будет свое API общее, типа вот тебе такие-то функции-обертки чтобы настраивать DMA, которые могут и на x86, и на ARM, и на каком-нибудь MIPS работать. https://www.kernel.org/doc/html/latest/driver-api/dmaengine/client.html

SZT ★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)