LINUX.ORG.RU
ФорумTalks

Зачем видеодрайвера в Линуксе засунули в ядро?

 , , ,


0

3

Вначале же было хорошо сделано с DDX драйверами и установкой видеорежима в X.Org, что более портабельно, безопасно и надёжно (падение видеодрайвера не приводит к kernel panic и его можно перезапустить). Потом зачем-то выдумали DRM-KMS с миллионами строк кода видеодрайверов в ядре прибитые гвоздями к внутренностям Линукса, так что в *BSD/Solaris и др. приходится проводить много работы чтобы портировать этот код на своё ядро. Зачем так надо было делать и вставлять палки в колёса другим ОС?

В Haiku например основная часть видеодрайвера – это динамически загружаемый модуль в пользовательском пространстве. Ядерный драйвер небольшой и отвечает за определение видеокарты, управление видеопамяти и предоставление доступа к видеокарте из пространства пользователя. Ядро не умеет устанавливать видеорежим и начальный видеорежим устанавливается загрузчиком через VESA/EFI GOP.

В Windows значительная часть видеодрайверов работает в пользовательском режиме и может быть прозрачно перезапущена с сохранением открытых окон. Из новых открытых систем в Fushia видеоподсистема работает в пространстве пользователя и реализовано аппаратное ускорение для некоторых видеокарт. В Линуксе самый устаревший и монолитный подход.

★★★★★
Ответ на: комментарий от moonmadness

А я думал что свободный софт это когда одним кодом могут пользоваться разные люди в разных проектах. А гнутые оказывается vendor lock практикуют.

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

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

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

Ты неправильно думал, ну как обычно.

Программы пользовательского режима вполне успешно собираются и работают на широком наборе ОС. Проблема с кодом режима ядра.

Да и во фряхе вполне себе успешно тащат видеодрайверы из линукса

Там для этого сделали целый слой совместимости с пространством ядра и драйверами Линукса.

X512 ★★★★★
() автор топика

Ну там было много причин. Основная - не запускать X.Org от рута. Потому что регулярно уязвимости находили. Вторая - получить нативную фреймбуфферную консоль.

начальный видеорежим устанавливается загрузчиком через VESA/EFI GOP

Как там с широкоформатными мониторами?

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

Основная - не запускать X.Org от рута.

Можно отдельный сервис для драйверов сделать, который будет запускаться от рута. Или починить уязвимости X.Org.

Неужели не нашли уязвимости в ядерном коде DRM?

Вторая - получить нативную фреймбуфферную консоль.

Зачем оно нужно? Для ядра VESA/GOP предостаточно.

Как там с широкоформатными мониторами?

Зависит от железа. На новом железе обычно работает.

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

Странный аргумент. А я много раз наблюдал BSOD'ы из-за графического драйвера.

Какой вывод должен быть, кроме того, что ТС неграмотный дебил?

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

Тебе дампы памяти нужны, или чего?

Или ты 3 ключевых слова не можешь в гугл вбить, и тебе надо с этим помочь?

zgen ★★★★★
()

В Windows значительная часть видеодрайверов работает в пользовательском режиме и может быть прозрачно перезапущена с сохранением открытых окон.

Ну, собственно, как и в Linux. Часть X.Org/Mesa - то, что работает в пространстве пользователя.

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

Или починить уязвимости X.Org.

Слабо взять какую-нибудь большую программу и починить в ней все уязвимости?

Неужели не нашли уязвимости в ядерном коде DRM?

Не помню, но там основная фишка, что этот код намного меньше по размеру, а значит и ошибок в нём меньше. В X.Org, насколько помню, главный набор уязвимостей был связан с тем, что он читает/пишет файлы, а значит от рута её порой удавалось заставить перезаписать что не надо. KMS вроде таким в принципе не занимается.

Зачем оно нужно? Для ядра VESA/GOP предостаточно.

А вот об этом был вопрос ниже. :)

Зависит от железа. На новом железе обычно работает.

Но, чёрт возьми, Холмс, как?! (C) VESA в принципе не предполагает широкоформатных режимов и если вы не хотите, чтобы в момент загрузки или до запуска X.Org у вас экран не был растянут - единственный выход работать с видеокартой напрямую, через её порты, а не через древний BIOS API.

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

Зачем видеодрайвера в Линуксе засунули в ядро?

Для атомарности изменения состояния, борьбы с тирингом, унификации костылей из видеодрайверов в единый набор универсальных костылей для видеодрайверов. И ещё для разграничения прав для различных операций.

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

код намного меньше по размеру

Что-то не заметно. Кода там много.

VESA в принципе не предполагает широкоформатных режимов

4.2 УМВР

X512 ★★★★★
() автор топика

Зачем видеодрайвера в Линуксе засунули в ядро?

Для ядерной консоли же!

saahriktu ★★★★★
()
Ответ на: комментарий от i-rinat

Для атомарности изменения состояния

Это без проблем можно было сделать в пользовательском процессе и не давать открыть устройство другим процессам. В Haiku такая защита сделана для некоторых драйверов.

В nVidia всё работает без DRM судя по предыдущим коментариям.

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

Что-то не заметно. Кода там много.

А как оценка производилась? Весь код против остатка X.Org? Весь код + один из драйверов, ведь одновременно загружается лишь один? Учитывалось ли, что в одном драйвере может быть зашита поддержка кучи видеокарт одного производителя каждый со своей спецификой?

4.2 УМВР

Это как бы не ответ. Как через VESA установить режим 1920x1080? А если ещё менее стандартный? Вот у меня 1920x1200. Как мне этот режим включить?

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

Это как бы не ответ. Как через VESA установить режим 1920x1080?

У меня 1920x1080 работает с VESA без проблем. С родным драйвером тоже работает.

Как мне этот режим включить?

Купить нормальное железо.

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

Это без проблем можно было сделать в пользовательском процессе и не давать открыть устройство другим процессам.

Жаль, что тебя не было, когда всё в ядро тащили. Посоветовал бы, как правильно сделать. А то никто почему-то не придумал.

В Haiku такая защита сделана для некоторых драйверов.

И поэтому в Haiku нет аппаратного ускорения, так?

В nVidia всё работает без DRM

По моему опыту без модуля ядра, который почему-то с «drm» в названии, на NVIDIA только текстовый режим работает.

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

Жаль, что тебя не было, когда всё в ядро тащили.

С авторами *BSD к сожалению тоже не посоветовались. Сомневаюсь что им нравится делать слои совместимости с Линуксом и большие патчи драйверов чтобы собиралось и работало.

И поэтому в Haiku нет аппаратного ускорения, так?

Защита от одновременного неуправляемого доступа к железу не имеет прямого отношения к аппаратному ускорению. У драйверов с 2D ускорением она кстати работает, второй GUI сервер не запустится.

По моему опыту без модуля ядра, который почему-то с «drm» в названии, на NVIDIA только текстовый режим работает.

Не установлены драйвера X.Org DDX для nVidia?

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

У меня сейчас минт виснет чащп, чем когдато семерочка.

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

С авторами *BSD к сожалению тоже не посоветовались.

Зачем? xBSD системы — отдельные ОС. Ты бы ещё посетовал, что с Haiku не посоветовались.

Сомневаюсь что им нравится делать слои совместимости с Линуксом и большие патчи драйверов чтобы собиралось и работало.

Они там взрослые дяденьки. Что хотят, то и делают.

Не установлены драйвера X.Org DDX для nVidia?

Почему бы тебе не сходить в магазин за какой-нибудь GeForce GT 1030 и не убедиться во всём самому?

i-rinat ★★★★★
()
Ответ на: комментарий от Sunderland93

В остальных он просто пересобирался через dkms, но если поддержки нового ядра нет - ниче не поделаешь.

В Ubuntu вполне бывает, но нечасто.

Особенно на фоне латания секурных уязвимостей, ибо надо скорее-быстрее.

fornlr ★★★★★
()
Ответ на: комментарий от i-rinat

Почему бы тебе не сходить в магазин за какой-нибудь GeForce GT 1030 и не убедиться во всём самому?

Дорогое развлечение

fornlr ★★★★★
()
Ответ на: комментарий от i-rinat

А чем Kepler Geforce GT 710/GDDR5) хуже Pascal (GT 1030)? У 1030 нету блока видеокодирования, а у 710 он есть, но только для кодека h264/2k; 1030 поддерживает аппаратно декодинг видео h265/8k. Вот и вся разница. Ах, да, ещё интерфейс - PCI-E 3.0 x4 у 1030 и PCI-E 2.0 x8 у 710.

Версия драйвера Nvidia одна и та же (лучше 390). Для GT 710 можно взять более старый драйвер.

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

Разве что на вафлю realtek-а. Но один раз споймал на драйвер nvidia(win xp), для этого понадобилось взорвать машины на парковке в fallout 3

elfmaid
()

В Haiku например основная часть видеодрайвера

ну так, где хайку и фуксия, а где линукс. С DDX по-мойму opengl еле ползал.

mrdeath ★★★★★
()

У тебя есть подробности по тому, как код делится код между ядром и юзерспейсом в linux и Windows? Когда я этим немного интересовался, у меня сложилось впечатление что особой разницы нет. Управление памятью (буферами) что там, что там в ядре. Часть драйвероспецифичного функционала DirectX тоже ядре.

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

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

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

Ну и замечательно. Значит весь этот DRM-KMS был не нужен.

Ошибаешься, ещё как нужен, ибо даже в BSD нвидия блоб требует загрузки drm-модуля:

kldload_nvidia="nvidia-modeset nvidia

Sunderland93 ★★★★★
()

Скорей всего банально потому, что так будет быстрей работать. Ещё возможно это позволяет реализовать софтовый DRM. Не совсем представляю, как сделать безопасный DRM без ядерной части.

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

Основная - не запускать X.Org от рута

Интересно, а в чём была проблема разрешить серверу только то, что нужно? Есть же всякие capabilities.

ls-h ★★★★★
()
Ответ на: комментарий от X512

В винде это стало возможным с введением новой версии WDDM. Т.е. протокола между системой и драйвером. И вендорам пришлось переписать драйвера попутно выкинув поддержку старого железа. Так ли нужно это в Linux?

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

Ага, так отсыхают что Интел готовит презентацию дискретных видеокарт

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

главный набор уязвимостей был связан с тем, что он читает/пишет файлы,

Пространства имён, AppArmor? Запускать в контейнере, где только сам сервер и его конфиг.

ls-h ★★★★★
()

Ну как зачем. Чтобы выпилить из BIOS`а.

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

Ну а так ли нужно это старое железо, если при перезагрузке драйвера у тебя при этом сохранятся окошки и все данные?

Exmor_RS ★★★
()

Потому что X.Org является не единственным пользователем видеокарты, а Linux - не микроядро. Есть по крайней мере ещё Wayland-композиторы и Qt Embedded.

Если X-сервер упадёт (например по причине, не связанной с видеодрайвером), то в случае DRM+KMS у ядра есть возможность переключить видеорежим и показать текстовую консоль, а не оставить пользователя без картинки и с видеоадаптером в неизвестном состоянии.

kmeaw ★★★
()

Драйвера – это фигня. Ты вот спроси, зачем в ядре JIT компилятор, в котором стабильно пять раз в год находят CVE.

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

Если X-сервер упадёт (например по причине, не связанной с видеодрайвером), то в случае DRM+KMS у ядра есть возможность переключить видеорежим и показать текстовую консоль, а не оставить пользователя без картинки и с видеоадаптером в неизвестном состоянии.

Ты сам-то в это веришь? Потому что чаще всего бывает ровно наоборот: повисший драйвер видеокарты вешает всю систему напрочь.

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

Ты вот спроси, зачем в ядре JIT компилятор

А я думал что весь JIT в драйверах пользовательского режима (который через LLVM работает). Какой ужас получается. Где конкретно этот JIT в исходниках ядра?

X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.