To'g'ridan-to'g'ri ko'rsatish bo'yicha menejer - Direct Rendering Manager - Wikipedia

To'g'ridan-to'g'ri ko'rsatish bo'yicha menejer
Asl muallif (lar)kernel.org & freedesktop.org
Tuzuvchi (lar)kernel.org & freedesktop.org
YozilganC
Turi
Litsenziya
Veb-saytquruq.freedesktop.org/ wiki/ DRM

The To'g'ridan-to'g'ri ko'rsatish bo'yicha menejer (DRM) ning pastki tizimidir Linux yadrosi bilan aloqa qilish uchun javobgardir Grafik protsessorlar zamonaviy video kartalar. DRM an API bu foydalanuvchi maydoni dasturlar GPU-ga buyruqlar va ma'lumotlarni yuborish va konfiguratsiya kabi operatsiyalarni bajarish uchun foydalanishi mumkin rejimni sozlash displeyning DRM birinchi sifatida ishlab chiqilgan yadro-bo'shliq ning tarkibiy qismi X-server To'g'ridan-to'g'ri ko'rsatish infratuzilmasi,[1] ammo o'shandan beri u boshqa grafik stack alternativalari tomonidan ishlatilgan Wayland.

GPU-ga buyruq berish uchun foydalanuvchi bo'sh joy dasturlari DRM API-dan foydalanishi mumkin apparat tezlashtirilgan 3D ko'rsatish va video dekodlash, shu qatorda; shu bilan birga GPGPU hisoblash.

Umumiy nuqtai

The Linux yadrosi allaqachon bor edi API deb nomlangan fbdev, boshqarish uchun ishlatiladi ramka buferi a grafik adapter,[2] ammo zamonaviy 3D tezlashtirilgan ehtiyojlarini qondirish uchun foydalanib bo'lmadi GPU - asosli video uskunalar. Ushbu qurilmalar odatda buyruqlar navbatini sozlash va boshqarishni talab qiladi ularning xotirasi buyruqlarni GPU-ga jo'natish, shuningdek, xotirada buferlar va bo'sh joyni boshqarish kerak.[3] Dastlab, foydalanuvchi uchun mo'ljallangan dasturlar (masalan X-server ) ushbu resurslarni to'g'ridan-to'g'ri boshqargan, ammo ular odatda xuddi ularga kirish huquqiga ega bo'lganlar kabi harakat qilishgan. Ikki yoki undan ortiq dastur bir vaqtning o'zida bir xil apparatni boshqarishga urinib ko'rganida va uning resurslarini har birini o'ziga xos tarzda o'rnatganida, aksariyat hollarda ular halokatli tugadi.[3]

DRM holda video kartaga kirish
DRM holda
DRM bilan video kartaga kirish
DRM bilan
DRM to'qnashuvlardan qochib, bir vaqtning o'zida bir nechta dasturlarga 3D videokartaga kirish huquqini beradi

To'g'ridan-to'g'ri ko'rsatish menejeri bir nechta dasturlarga videomateriallar resurslaridan birgalikda foydalanish imkoniyatini berish uchun yaratilgan.[4] DRM GPU-ga eksklyuziv kirish huquqini oladi va buyruqlar navbatini, xotirani va boshqa har qanday qo'shimcha resurslarni ishga tushirish va saqlash uchun javobgardir. GPU-dan foydalanishni istagan dasturlar DRM-ga so'rov yuboradi, ular hakamlik vazifasini bajaradi va yuzaga kelishi mumkin bo'lgan to'qnashuvlarning oldini olishga harakat qiladi.

DRM ko'lami yillar davomida kengaytirilgan bo'lib, ilgari foydalanuvchi uchun mo'ljallangan kosmik dasturlar, masalan, ramka buferini boshqarish va boshqa funktsiyalarni qamrab oldi. rejimni sozlash, xotira almashish moslamalari va xotirani sinxronlashtirish.[5][6] Ushbu kengayishlarning ba'zilariga aniq ismlar berilgan, masalan Grafika ijro etuvchi menejeri (GEM) yoki yadro rejimini sozlash (KMS) va ular taqdim etadigan funksionallik xususan keltirilganida terminologiya ustunlik qiladi. Ammo ular haqiqatan ham butun DRM quyi tizimining bir qismidir.

Kompyuterga ikkita GPUni kiritish tendentsiyasi - alohida GPU va ajralmas GPU kabi yangi muammolarni keltirib chiqardi. GPU-ni almashtirish bu ham DRM qatlamida hal qilinishi kerak edi. Ga mos kelish uchun Nvidia Optimus texnologiyasi, DRM ga PRIME deb nomlangan GPU tushirish qobiliyatlari taqdim etildi.[7]

Dastur arxitekturasi

3D tezlashtirilgan grafik kartasiga kirish uchun Linux yadrosining Direct Rendering Manager-dan foydalanish jarayoni

To'g'ridan-to'g'ri ko'rsatish bo'yicha menejer yashaydi yadro maydoni, shuning uchun foydalanuvchi bo'sh joy dasturlari yadrodan foydalanishi kerak tizim qo'ng'iroqlari uning xizmatlarini so'rash. Biroq, DRM o'zining moslashtirilgan tizim qo'ng'iroqlarini aniqlamaydi. Buning o'rniga, quyidagilarga amal qiladi Unix "tamoyilihamma narsa fayl "fosh qilish uchun Grafik protsessorlar yordamida fayl tizimi nomi maydoni orqali qurilma fayllari ostida / dev ierarxiya. DRM tomonidan aniqlangan har bir GPU a deb nomlanadi DRM qurilmasiva qurilma fayli / dev / dri / cardX (qayerda X ketma-ket raqam) u bilan interfeys qilish uchun yaratilgan.[8][9] Grafik protsessor bilan gaplashmoqchi bo'lgan foydalanuvchi-kosmik dasturlari shart ochiq ushbu fayl va undan foydalaning ioctl DRM bilan aloqa qilish uchun qo'ng'iroqlar. DRMning turli funktsiyalariga har xil ioktllar mos keladi API.

A kutubxona deb nomlangan libdrm DRM quyi tizimi bilan foydalanuvchi kosmik dasturlarining interfeysini engillashtirish uchun yaratilgan. Ushbu kutubxona shunchaki a doka beradi a funktsiya yozilgan C har bir ioctl uchun DRM API, shuningdek doimiylar, tuzilmalar va boshqa yordamchi elementlar uchun.[10] Libdrm dan foydalanish nafaqat yadro interfeysini to'g'ridan-to'g'ri dasturlarga ta'sir qilishdan saqlaydi, balki odatdagi afzalliklarini taqdim etadi. qayta ishlatish va dasturlar o'rtasida kodni bo'lishish.

Direct Rendering Manager arxitekturasi tafsilotlari: DRM yadrosi va DRM drayveri (shu jumladan GEM va KMS) libdrm tomonidan interfeyslangan

DRM ikki qismdan iborat: qo'llab-quvvatlanadigan qo'shimcha qurilmalarning har bir turi uchun umumiy "DRM yadrosi" va o'ziga xos qismi ("DRM drayveri").[11] DRM yadrosi turli xil DRM drayverlari ro'yxatdan o'tishlari mumkin bo'lgan asosiy tizimni taqdim etadi va shuningdek, foydalanuvchiga umumiy, apparatdan mustaqil ishlaydigan minimal miqdordagi ioctls to'plamini taqdim etadi.[8] DRM drayveri, aksincha, API-ning qo'llab-quvvatlaydigan GPU turiga xos bo'lgan, uning apparatga bog'liq qismini amalga oshiradi; u DRM yadrosi bilan qoplanmagan qolgan ioctllarni amalga oshirishni ta'minlashi kerak, lekin API-ni kengaytirishi mumkin, faqat qo'shimcha qurilmalarda mavjud bo'lgan qo'shimcha funktsiyalarga ega qo'shimcha ioctllarni taklif qilishi mumkin.[8] Muayyan DRM drayveri kengaytirilgan API taqdim etganda, libdrm foydalanuvchi maydoni qo'shimcha libdrm kutubxonasi tomonidan kengaytiriladi.haydovchi qo'shimcha ioctls bilan interfeys qilish uchun foydalanuvchi maydoni tomonidan ishlatilishi mumkin.

API

DRM yadrosi foydalanuvchi uchun mo'ljallangan dasturlarga bir nechta interfeyslarni eksport qiladi, odatda mos ravishda ishlatilishi kerak libdrm o'rash funktsiyalari. Bundan tashqari, drayvlar foydalanuvchi maydoni drayverlari va qurilmadan xabardor dasturlar tomonidan foydalanish uchun qurilmaga xos interfeyslarni eksport qiladi ioktllar va sysfs fayllar. Tashqi interfeyslarga quyidagilar kiradi: xotirani xaritalash, kontekstni boshqarish, DMA operatsiyalar, AGP boshqaruv, vblank boshqaruv, to'siqlarni boshqarish, xotirani boshqarish va chiqishni boshqarish.

DRM-Master va DRM-Auth

xavfsizlik maqsadlari uchun yoki concurrency masalalari ham qurilma boshiga bitta foydalanuvchi kosmik jarayonida tomonidan foydalanish uchun cheklangan bo'lishi kerak, deb DRM API bir necha operatsiyalar (ioctls) bor.[8] Ushbu cheklovni amalga oshirish uchun DRM bunday ioktllarni faqat DRM qurilmasining "ustasi" hisoblangan jarayon tomonidan chaqirilishini cheklaydi, odatda DRM-Master. Qurilma tuguniga ega bo'lgan barcha jarayonlardan faqat bittasi / dev / dri / cardX ochilgan bo'ladi fayl ushlagichi usta sifatida belgilangan, xususan birinchi qo'ng'iroq SET_MASTER ioctl. Ushbu cheklangan ioctllardan birini DRM-Master bo'lmasdan foydalanishga qilingan har qanday urinish xatolikni keltirib chiqaradi. Jarayon shuningdek, o'zining asosiy rolidan voz kechishi mumkin va boshqa jarayon uni qo'lga kiritishga imkon berishi mumkin DROP_MASTER ioctl.

The X-server - yoki boshqasi ko'rsatish serveri - bu odatda har bir DRM qurilmasida DRM-Master maqomini oladigan jarayon, odatda u ishga tushganda mos keladigan moslama tugunini ochganda va ushbu imtiyozlarni butun grafik sessiya davomida u tugaguniga yoki o'limigacha saqlaydi.

Qolgan foydalanuvchi maydoni jarayonlari uchun DRM qurilmasida ba'zi cheklangan operatsiyalarni bajarish uchun imtiyozga ega bo'lishning yana bir usuli mavjud. DRM-tasdiqlash. Bu jarayon kabi imtiyozlar olish uchun DRM-master ma'qul bor, deb unga isbotlash uchun, asosan DRM qurilma qarshi autentifikatsiya usuli hisoblanadi. Jarayon quyidagilardan iborat:[12]:13

  • Mijoz DRM qurilmasidan noyob belgini - 32-bitli butunlikni oladi GET_MAGIC ioctl va uni DRM-Master jarayoniga har qanday usul bilan uzatadi (odatda qandaydir tarzda) IPC; masalan, ichida DRI2 bor DRI2Asdiqlash har qanday X mijozi X Serverga yuborishi mumkin bo'lgan so'rov.[13])
  • DRM-Master jarayoni, o'z navbatida, belgini DRM qurilmasiga chaqirish orqali qaytarib yuboradi AUTH_MAGIC ioctl.
  • Qurilma avtoulov belgisi DRM-Master-dan olingan belgiga mos keladigan protsessor fayllari dastagiga maxsus huquqlar beradi.

Grafika ijro etuvchi menejeri

Borayotgan kattaligi tufayli video xotira kabi grafik API-larning tobora murakkablashib borishi OpenGL, har birida grafik karta holatini qayta boshlash strategiyasi kontekstni almashtirish juda qimmat, ishlashga yaroqli edi. Shuningdek, zamonaviy Linux ish stollari bilan buferlarni almashishning optimal usuli kerak edi kompozitsion menejer. Ushbu talablar grafikani boshqarish uchun yangi usullarning rivojlanishiga olib keldi tamponlar yadro ichida. The Grafika ijro etuvchi menejeri (GEM) ushbu usullardan biri sifatida paydo bo'ldi.[6]

GEM aniq API bilan ta'minlaydi xotirani boshqarish ibtidoiy narsalar.[6] GEM orqali foydalanuvchi-kosmik dasturi GPU video xotirasida yashovchi xotira moslamalarini yaratishi, ishlashi va yo'q qilishi mumkin. "GEM moslamalari" deb nomlangan ushbu ob'ektlar,[14] Foydalanuvchi-kosmik dastur nuqtai nazaridan doimiy va dastur qaytarib GPU nazorat har doim qayta yuklash kerak emas. Agar foydalanuvchi bo'sh joy dasturiga video xotiraning bir qismi kerak bo'lganda (a saqlash uchun ramka buferi, to'qima yoki GPU tomonidan talab qilinadigan boshqa ma'lumotlar[15]), GEM API yordamida DRM drayveriga ajratishni talab qiladi. DRM drayveri ishlatilgan video xotirani kuzatib boradi va bo'sh xotira mavjud bo'lsa, so'rovni bajara oladi va foydalanuvchi maydoniga "tutqich" ni qaytarib, kelgusi operatsiyalarda ajratilgan xotirani yo'naltiradi.[6][14] GEM API shuningdek, buferni to'ldirish va endi kerak bo'lmaganda uni chiqarish uchun operatsiyalarni amalga oshiradi. Ishlab chiqarilmaydigan GEM dastaklaridagi xotira foydalanuvchi makoni jarayoni DRM qurilmasini yopganda qayta tiklanadi fayl tavsiflovchi - ataylab yoki tugatilishi sababli.[16]

GEM shuningdek, ikki yoki undan ortiq foydalanuvchi maydonini yaratishga imkon beradi jarayonlar GEM ob'ektini bo'lishish uchun bir xil DRM qurilmasidan foydalanish (shu sababli bir xil DRM drayveri).[16] GEM tutqichlari - bu jarayonga xos bo'lgan, ammo boshqa jarayonlarda takrorlanadigan mahalliy 32-bitli tamsayılar, shuning uchun almashish uchun mos emas. Buning uchun global nom maydoni kerak va GEM uni global tutqichlardan foydalanish orqali ta'minlaydi GEM nomlari. GEM nomi bitta DRM qurilmasi ichida bitta DRM drayveri tomonidan noyob 32-bit yordamida yaratilgan bitta va faqat bitta GEM ob'ektini anglatadi. tamsayı. GEM operatsiyani ta'minlaydi miltillamoq GEM dastagidan GEM nomini olish uchun.[16][12]:16 Jarayon keyinchalik ushbu GEM nomini (32-bitli tamsayı) istalganidan foydalanib boshqa jarayonga o'tkazishi mumkin IPC mavjud mexanizm.[12]:15 GEM nomi asl GEM ob'ektiga ishora qiluvchi mahalliy GEM dastagini olish uchun qabul qiluvchi jarayoni tomonidan ishlatilishi mumkin.

Afsuski, buferlarni almashish uchun GEM nomlaridan foydalanish xavfsiz emas.[12]:16[17][18] Shu DRM qurilmani kirishini A zararli uchinchi tomon jarayoni shunchaki 32-bitli tamsayılar problama orqali, boshqa ikki jarayonlar bilan birgalikda bir bufer GEM nomini taxmin qilishga harakat mumkin.[19][18] GEM nomi topilgandan so'ng, uning tarkibiga kirish va o'zgartirish mumkin, buzilgan maxfiylik va yaxlitlik bufer ma'lumotlari. Ushbu kamchilik keyinchalik kiritilishi bilan bartaraf etildi DMA-BUF DRM-ga qo'llab-quvvatlash.

video-xotira oraliq boshqarish o'zga video-xotira boshqaruv tizimi uchun yana bir muhim vazifa GPU va CPU o'rtasidagi xotira sinxronlashtirish ishlash etiladi. Joriy xotira me'morchiligi juda murakkab va odatda turli darajalarni o'z ichiga oladi keshlar tizim xotirasi uchun va ba'zan video xotira uchun ham. Shuning uchun video-xotira menejerlari ham keshning muvofiqligi CPU va GPU o'rtasida birgalikda foydalaniladigan ma'lumotlarning izchil bo'lishini ta'minlash.[20] Bu shuni anglatadiki, ko'pincha video-xotirani boshqarish ichki qurilmalari GPU va xotira arxitekturasining apparat detallariga juda bog'liq va shu bilan haydovchiga xosdir.[21]

GEM dastlab tomonidan ishlab chiqilgan Intel i915 drayveri uchun video-xotira menejerini taqdim etish uchun muhandislar.[20] The Intel GMA 9xx oila o'rnatilgan grafik protsessorlar GPU va protsessor jismoniy xotirani birgalikda ishlatadigan va maxsus VRAM mavjud bo'lmagan yagona xotira arxitekturasi (UMA) bilan.[22] GEM xotirani sinxronlashtirish uchun "xotira domenlari" ni belgilaydi va ushbu xotira domenlari GPU-dan mustaqil bo'lsa,[6] ular UMA xotirasi arxitekturasini hisobga olgan holda ishlab chiqilgan bo'lib, ularni alohida VRAMga ega bo'lganlar kabi boshqa xotira arxitekturalariga unchalik mos kelmaydi. Shu sababli, boshqa DRM drayverlari GEM API-ni foydalanuvchi uchun mo'ljallangan dasturlarga jalb qilishga qaror qilishdi, ammo ular ichki qurilmalar va xotira arxitekturalariga mos keladigan boshqa xotira menejerlarini amalga oshirdilar.[23]

GEM API-da ijro oqimini boshqarish uchun ioctls (buyruq buferlari) taqdim etiladi, ammo ular Intelga xos bo'lib, Intel i915 va undan keyingi GPU-larda ishlatilishi kerak.[6] Hech qanday DRM drayveri GEM API-ning biron bir qismini xotirani boshqarish uchun maxsus ioctls-dan tashqari amalga oshirishga urinmagan.

Tarjima jadvali xaritalari

Tarjima jadvali xaritalari (TTM) - GEM dan oldin ishlab chiqilgan GPU uchun umumiy xotira menejerining nomi.[5][14] U GPU kirishi mumkin bo'lgan, shu jumladan, bag'ishlangan har xil turdagi xotiralarni boshqarish uchun maxsus ishlab chiqilgan Video RAM (odatda video kartada o'rnatilgan) va tizim xotirasi an orqali kirish mumkin Kiritish-chiqarish xotirasini boshqarish bo'limi deb nomlangan Grafika manzillarini qayta tuzish jadvali (GART).[5] TTM shuningdek, video RAMning CPU tomonidan to'g'ridan-to'g'ri murojaat qilinmaydigan qismlarini boshqarishi va foydalanuvchi uchun mo'ljallangan grafik dasturlar odatda katta miqdordagi video ma'lumotlar bilan ishlashini hisobga olgan holda uni eng yaxshi ishlashi bilan bajarishi kerak. Yana bir muhim masala - turli xil xotiralar va tegishli keshlar o'rtasidagi izchillikni saqlash edi.

TTM ning asosiy kontseptsiyasi "buferli ob'ektlar", video xotira mintaqalari bo'lib, ular biron bir vaqtda GPU tomonidan murojaat qilinishi kerak.[5] Agar foydalanuvchi kosmik grafik dastur ma'lum bir bufer ob'ektga kirish istaydi, TTM protsessor tomonidan xotira manzilini bir turi uni Ko'chib talab qilishi mumkin (odatda mazmun bilan to'ldirish uchun). GPU bir bufer ob'ektga kirish kerak, lekin u hali GPU ning manzili kosmosda emas yanada Manzili o'zgarganlar-yoki GART xaritalash operatsiyalar-mumkin bo'ladi. Ushbu ko'chirish operatsiyalarining har biri tegishli ma'lumotlar va kesh-muvofiqlik muammolarini hal qilishi kerak.[5]

Yana bir muhim TTM kontseptsiyasi to'siqlar. To'siqlar asosan CPU va GPU o'rtasidagi o'zaro bog'liqlikni boshqarish mexanizmidir.[24] Agar bufer ob'ekt GPU tomonidan endi ishlatiladi qachon bir to'siq izlar, odatda unga kirish bilan har qanday foydalanuvchi kosmik jarayonini xabardor qilish.[5]

TTM har qanday turdagi arxitekturalarni, shu jumladan maxsus VRAM bilan va bo'lmagan qurilmalarni mos ravishda boshqarishga va har qanday turdagi apparat bilan ishlash uchun xotira menejerida har qanday tasavvurga ega xususiyatlarni taqdim etishga harakat qilganligi o'ta murakkablikka olib keldi. talab qilinganidan ancha kattaroq API bilan echim.[24][14] Ba'zi DRM ishlab chiquvchilari bu biron bir aniq haydovchiga, ayniqsa API bilan yaxshi mos kelmaydi deb o'ylashdi. GEM oddiyroq xotira menejeri sifatida paydo bo'lganida, uning API-si TTM-dan afzalroq edi. Ammo ba'zi haydovchilar ishlab chiqaruvchilari TTM tomonidan olib borilgan yondashuv ajratilgan video xotirasi va IOMMU diskret videokartalar uchun ko'proq mos keladi, deb hisoblashdi, shuning uchun ular o'zlarining bufer ob'ektlarini GEM moslamalari sifatida namoyish qilishda va shu bilan GEM API-ni qo'llab-quvvatlashda TTMni ichki ishlatishga qaror qilishdi.[23] TTM-dan ichki xotira menejeri sifatida foydalanadigan, ammo GEM API-ni ta'minlaydigan joriy drayverlarga misollar AMD video kartalari uchun radeon drayveri va nouveau NVIDIA video kartalari uchun haydovchi.

DMA buferini almashish va PRIME

The DMA Buffer Sharing API (ko'pincha DMA-BUF sifatida qisqartiriladi) a Linux yadrosi ichki API almashish uchun umumiy mexanizmni ta'minlash uchun mo'ljallangan DMA bir nechta qurilmalardagi buferlar, ehtimol har xil turdagi qurilmalar drayverlari tomonidan boshqariladi.[25][26] Masalan, a Video4Linux qurilma va grafik adapter qurilmasi buferlarni DMA-BUF orqali almashishi mumkin edi nol nusxa birinchisi tomonidan ishlab chiqarilgan va ikkinchisi tomonidan iste'mol qilingan video oqim ma'lumotlari. Har qanday Linux qurilma drayveri ushbu APIni foydalanuvchi (iste'molchi) yoki ikkalasi sifatida eksportchi sifatida amalga oshirishi mumkin.

Ushbu funktsiya DRM-da birinchi marta PRIME-ni amalga oshirish uchun foydalanildi GPU zaryadsizlantirish diskret va o'rnatilgan GPU DRM drayverlari o'rtasida olingan freym buferlarini almashish uchun DMA-BUF dan foydalanadi.[27]:13 DMA-BUF-ning muhim xususiyati shundaki, umumiy bufer foydalanuvchi makoniga a sifatida taqdim etiladi fayl tavsiflovchi.[14][12]:17 PRIME-ni ishlab chiqish uchun DRM API-ga ikkita yangi ioktl qo'shildi, ulardan biri mahalliy GEM dastagini DMA-BUF fayl deskriptoriga aylantirish uchun, ikkinchisi esa aynan teskari operatsiya uchun.

Ushbu ikkita yangi ioktl keyinchalik GEM tampon almashinuvining xavfsizligini tuzatish usuli sifatida qayta ishlatilgan.[12]:17 GEM nomlaridan farqli o'laroq, fayl tavsiflovchilarini taxmin qilish mumkin emas (ular global nom maydoni emas) va Unix operatsion tizimlari ularni xavfsiz o'tish usulini taqdim etadi. Unix domen rozetkasi SCM_RIGHTS semantikasidan foydalangan holda.[14][28]:11 GEM moslamasini boshqa jarayon bilan bo'lishishni istagan jarayon o'zining mahalliy GEM dastagini DMA-BUF fayllar tavsiflovchisiga aylantirishi va uni qabul qiluvchiga o'tkazishi mumkin, bu esa o'z navbatida qabul qilingan fayllar tavsiflovchisidan o'z GEM tutqichini olishi mumkin.[12]:16 Ushbu usul tomonidan ishlatiladi DRI3 mijoz va X Server o'rtasida buferlarni almashish uchun[29] va shuningdek Wayland.

Kernel rejimini sozlash

Foydalanuvchi makonida "DRM master" bo'lishi kerak, ushbu dastur KMS-ga eksklyuziv kirish huquqiga ega.

To'g'ri ishlash uchun video karta yoki grafik adapter a ni o'rnatishi kerak rejimi - birikmasi ekran o'lchamlari, rang chuqurligi va yangilanish tezligi - bu o'zi tomonidan qo'llab-quvvatlanadigan va biriktirilgan qiymatlar doirasidadir displey ekrani. Ushbu operatsiya chaqiriladi rejimni sozlash,[30] va u odatda grafik apparatga xom kirish huquqini talab qiladi, ya'ni. video kartaning ba'zi registrlariga yozish qobiliyati.[31][32] Dan foydalanishni boshlashdan oldin rejimni sozlash operatsiyasini bajarish kerak ramka buferi, shuningdek, dastur yoki foydalanuvchi tomonidan rejimni o'zgartirish zarur bo'lganda.

Dastlabki kunlarda, grafik ramka buferidan foydalanishni istagan foydalanuvchi kosmik dasturlari ham rejimni sozlash operatsiyalarini bajarish uchun javobgardilar,[3] va shuning uchun ular video apparatga imtiyozli kirish huquqi bilan ishlashlari kerak edi. Unix tipidagi operatsion tizimlarda X-server eng ko'zga ko'ringan misol edi va uning rejimini belgilash amalga oshirildi DDX drayveri har bir aniq video karta turi uchun.[33] Keyinchalik ushbu yondashuv Foydalanuvchilar uchun bo'sh joy Tartibni sozlash yoki UMS,[34][35] bir nechta muammolarni keltirib chiqaradi.[36][30] Bu nafaqat operatsion tizimlarning dasturlar va qo'shimcha qurilmalar o'rtasida ta'minlanishi kerak bo'lgan izolyatsiyani buzadi, bu barqarorlik va xavfsizlik muammolarini ko'taradi, shuningdek, agar ikkita yoki undan ortiq foydalanuvchi kosmik dasturlari rejim sozlamalarini bajarishga harakat qilsalar, grafik apparatni nomuvofiq holatda qoldirishi mumkin. bir vaqtda. Ushbu to'qnashuvlarning oldini olish uchun X Server amalda rejimni sozlash operatsiyalarini bajaradigan yagona foydalanuvchi kosmik dasturi bo'ldi; Qolgan foydalanuvchi kosmik dasturlari X rejimiga mos rejimni o'rnatish va rejim sozlamalari bilan bog'liq har qanday boshqa operatsiyalarni bajarish uchun tayangan. Dastlab rejimi-sozlama X Server ishga tushirilganda jarayonida faqat ijro etildi, lekin keyinchalik X Server ishlayotgan paytda buni qobiliyatini qozongan.[37] XFree86-VidModeExtension kengaytmasi joriy etildi XFree86 3.1.2 har qanday X mijoz so'roviga ruxsat berish modelin (piksellar sonini) X Serverga o'zgartiradi.[38][39] Keyinchalik VidMode kengaytmasi umumiyroq tomonidan almashtirildi XRandR kengaytma.

Biroq, bu a-da rejimni sozlashni amalga oshiradigan yagona kod emas edi Linux tizim. Tizimni yuklash jarayonida Linux yadrosi minimal qiymatni o'rnatishi kerak matn rejimi uchun virtual konsol (tomonidan belgilangan standart rejimlar asosida VESA BIOS kengaytmalar).[40] Shuningdek Linux yadrosi freymbuffer drayveri freymbuffer qurilmalarini sozlash uchun rejimni sozlash kodi mavjud.[2] Tartibni ziddiyatlarni oldini olish uchun XFree86 Server - va keyinroq X.Org serveri - foydalanuvchi grafik muhitdan matnga o'tganda ish bilan shug'ullangan virtual konsol rejimini belgilash holatini saqlash va foydalanuvchi X ga qaytganda uni tiklash orqali.[41] Ushbu jarayon o'tish paytida bezovta qiluvchi miltillashga olib keldi va ishlamay qolishi mumkin, natijada buzilgan yoki foydalanishga yaroqsiz displey paydo bo'ladi.[42]

Foydalanuvchi uchun bo'sh joy rejimini sozlash yondashuvi boshqa muammolarni ham keltirib chiqardi:[43][42]

  • The jarayonni to'xtatib turish / davom ettirish oldingi rejimni tiklash uchun foydalanuvchi bo'sh joy vositalariga ishonishi kerak. Ushbu dasturlardan birining bitta ishlamay qolishi yoki ishdan chiqishi tizimni noto'g'ri sozlanishi tufayli ishlamaydigan displeysiz qoldirishi mumkin va shuning uchun yaroqsiz.
  • Ekran yadro grafik rejimida bo'lganida, masalan, X ishlayotganda yadroda xato yoki disk raskadrovka xabarlarini ko'rsatish imkonsiz edi, chunki yadro bilgan yagona rejim VESA BIOS standart matn rejimlari edi.
  • X-serverni chetlab o'tadigan grafik dasturlarning ko'payishi va X-ga boshqa grafik stek alternativalarining paydo bo'lishi, tizimdagi rejimni sozlash kodining takrorlanishini yanada kengaytirish dolzarb muammo bo'ldi.

Ushbu muammolarni hal qilish uchun rejimni sozlash kodi yadro ichidagi bitta joyga, xususan mavjud DRM moduliga ko'chirildi.[36][37][44][42][43] Keyinchalik, har qanday jarayon, shu jumladan X Server ham yadroga rejimni sozlash operatsiyalarini bajarishga buyruq berishi kerak va yadro bir vaqtda olib boriladigan operatsiyalar ziddiyatli holatga olib kelmasligini ta'minlaydi. Ushbu rejimni sozlash operatsiyalarini bajarish uchun DRM moduliga qo'shilgan yangi yadro API va kod chaqirildi Kernel rejimini sozlash (KMS).[30]

Kernel rejimini sozlash bir nechta afzalliklarni beradi. Eng zudlik, albatta, ikkala yadrodan (Linux konsol, fbdev) va foydalanuvchi makonidan (X Server DDX drayverlari) takrorlanadigan rejimni sozlash kodini olib tashlashdir. KMS shuningdek, muqobil grafik tizimlarni yozishni osonlashtiradi, endi ular o'zlarining rejimlarini belgilash kodlarini amalga oshirishga hojat yo'q.[42][43] Markazlashtirilgan rejimni boshqarish orqali KMS miltillovchi muammolarni konsol va X o'rtasida, shuningdek X ning turli xil nusxalari (foydalanuvchini tezkor almashtirish) o'rtasida o'zgarishda hal qiladi.[41][44] Bu yadro mavjud ekan, u ham tufayli bu erta bosqichlarida rejimi o'zgarishlarga titraguvchi tejash, yuklash jarayonning boshida foydalanish mumkin.

KMS yadroning bir qismi ekanligi, unga faqat yadro maydonida mavjud bo'lgan manbalardan foydalanishga imkon beradi uzilishlar.[45] Masalan, to'xtatib turish / davom ettirish jarayonidan so'ng rejimni tiklash yadroning o'zi tomonidan boshqarilishi bilan juda ko'p narsani soddalashtiradi va tasodifan xavfsizlikni yaxshilaydi (root ruxsatnomalarini talab qiladigan foydalanuvchi uchun bo'sh joy vositalari yo'q). Yadro shuningdek vilka uzoq vaqtdan beri hal qilinadigan muammoni hal qiladigan yangi displey qurilmalarini osonlikcha.[45] Tartibni sozlash, shuningdek, xotira boshqaruvi bilan chambarchas bog'liq, chunki ramka buferlari asosan xotira buferlari hisoblanadi, shuning uchun grafik xotira menejeri bilan qattiq integratsiya qilish tavsiya etiladi. Bu yadro rejimini belgilash kodining alohida quyi tizim sifatida emas, balki DRM-ga qo'shilishining asosiy sababi.[44]

DRM API-ning orqaga qarab muvofiqligini buzmaslik uchun Kernel Mode-Setting qo'shimcha sifatida taqdim etiladi haydovchi xususiyati ba'zi DRM drayverlari.[46] Har qanday DRM drayveri taqdim etishni tanlashi mumkin DRIVER_MODESET KMS API-ni qo'llab-quvvatlashini ko'rsatish uchun DRM yadrosi bilan ro'yxatdan o'tganida bayroq.[8] Kernel Mode-Setting-ni amalga oshiradigan haydovchilar tez-tez chaqiriladi KMS drayverlari ularni merosdan farqlash usuli sifatida - KMSsiz - DRM drayverlari.

KMS shunday darajada qabul qilinganki, 3D tezlashuvga ega bo'lmagan ba'zi bir drayverlar (yoki apparat sotuvchisi uni oshkor qilishni yoki amalga oshirishni xohlamaydi), shunga qaramay KMS API-ni DRM API-ning qolgan qismisiz amalga oshiradi.

KMS qurilmasi modeli

KMS modellari va chiqish moslamalarini displeyda chiqadigan quvur liniyasida keng tarqalgan abstrakt apparat bloklari qatori sifatida boshqaradi displey tekshiruvi. Ushbu bloklar:[47]

  • CRTClar: har bir CRTC (dan CRT Nazoratchi[48][33]) displey tekshirgichining skanerlash dvigatelini ifodalaydi, a ga ishora qiladi skanerlash buferi (ramka buferi ).[47] CRTC-ning maqsadi - skanerlash buferidagi piksel ma'lumotlarini o'qish va undan yaratish video rejimini belgilash vaqti signali yordamida a PLL davri.[49] Mavjud CRTClar soni bir vaqtning o'zida qancha mustaqil chiqish moslamalarini boshqarishi mumkinligini aniqlaydi, shuning uchun foydalanish uchun ko'p boshli har bir displey qurilmasi uchun kamida bitta CRTC konfiguratsiyasi talab qilinadi.[47] Ikkita yoki undan ortiq CRTClar ham ishlashi mumkin klon rejimi agar ular bir xil tasvirni bir nechta chiqish qurilmalariga yuborish uchun bir xil freymbuferidan skaner qilsalar.[49][48]
  • Ulagichlar: ulagich displey tekshirgichi skanerlash jarayonida ko'rsatiladigan video signalni yuboradigan joyni bildiradi. Odatda, ulagichning KMS tushunchasi jismoniy ulagichga mos keladi (VGA, DVI, FPD-bog'lanish, HDMI, DisplayPort, S-Video ...) chiqadigan qurilmada (monitor, noutbuk panel, ...) doimiy ravishda yoki vaqtincha biriktirilishi mumkin. Hozirgi jismoniy biriktirilgan chiqish moslamasi bilan bog'liq ma'lumotlar, masalan, ulanish holati, EDID ma'lumotlar, DPMS holati yoki qo'llab-quvvatlanadigan video rejimlari - shuningdek, ulagich ichida saqlanadi.[47]
  • Enkoderlar: displey boshqaruvchisi mo'ljallangan ulagichga mos format yordamida CRTC-dan video rejimining vaqt signalini kodlashi kerak.[47] Kodlovchi ushbu kodlashlardan birini bajarishga qodir bo'lgan apparat blokini anglatadi. Raqamli chiqishlar uchun kodlash misollari TMDS va LVDS; kabi analog chiqishlar uchun VGA va Televizor chiqdi, aniq DAC bloklar odatda ishlatiladi. Ulagich signalni bir vaqtning o'zida faqat bitta kodlovchidan qabul qilishi mumkin,[47] va har bir ulagich turi faqat ba'zi kodlashni qo'llab-quvvatlaydi. Shuningdek, CRTC-kodlayıcı-ulagichining mumkin bo'lgan kombinasyonları cheklash emas, har CRTC har mavjud kodlayıcı bog'liq bo'lgan qo'shimcha jismoniy cheklashlar mavjud bo'lishi mumkin.
  • Samolyotlar: tekislik - bu apparat bloki emas, balki skanerlash dvigateli (CRTC) oziqlanadigan buferni o'z ichiga olgan xotira ob'ekti. Ushlagan tekislik ramka buferi deyiladi asosiy tekislikva har bir CRTC bittadan bog'liq bo'lishi kerak,[47] CRTC uchun video rejimini aniqlash uchun manba bo'lgani uchun - displey o'lchamlari (kengligi va balandligi), piksel o'lchami, piksel formati, yangilanish tezligi va hk. CRTC ham bo'lishi mumkin kursor samolyotlari displey tekshiruvi apparat kursorining ustki qatlamini qo'llab-quvvatlasa yoki unga bog'liq bo'lsa ikkilamchi samolyotlar agar qo'shimcha narsadan skanerlash imkoniga ega bo'lsa qo'shimcha qoplamalar va chiqish moslamasiga yuborilgan yakuniy tasvirni "tezda" tuzing yoki aralashtiring.[33]

Atom displeyi

So'nggi yillarda olib kelish uchun doimiy harakatlar qilindi atomlik KMS API-ga tegishli ba'zi muntazam operatsiyalarga, xususan rejimni sozlash va sahifani varaqlash operatsiyalar.[33][50] Ushbu kengaytirilgan KMS API nima deyiladi Atom displeyi (ilgari nomi bilan tanilgan atom rejimini sozlash va atom yoki yadro sahifasi).

Maqsadi atom rejimini sozlash mos kelmaydigan yoki yaroqsiz video holatiga olib kelishi mumkin bo'lgan oraliq qadamlardan qochib, bir nechta cheklovlarga ega bo'lgan murakkab konfiguratsiyalarda rejimning to'g'ri o'zgarishini ta'minlash;[50] shuningdek, rejimni o'rnatishda muvaffaqiyatsiz tugallangan jarayonni bekor qilish kerak bo'lganda ("orqaga qaytarish") xavfli video holatlarini oldini oladi.[51]:9 Atom rejimini sozlash, rejimni sinash imkoniyatlarini taqdim etish orqali ma'lum bir aniq rejim konfiguratsiyasi mosligini oldindan bilish imkonini beradi.[50] Atom rejimi sinovdan o'tkazilganda va uning haqiqiyligi tasdiqlanganda, uni bitta bo'linmaydigan (atomik) bilan qo'llash mumkin. qilmoq operatsiya. Har ikkala sinov va majburiy operatsiyalar bir xil yangi tomonidan ta'minlanadi ioctl turli xil bayroqlar bilan.

Atom sahifasini almashtirish boshqa tomondan, bir xil samolyotda bir nechta samolyotlarni yangilashga imkon beradi (masalan, asosiy tekislik, kursor tekisligi va ehtimol ba'zi bir qatlamlar yoki ikkilamchi tekisliklar) VBLANK interval, yirtilmasdan to'g'ri ekranni ta'minlash.[51]:9,14[50] Ushbu talab, ayniqsa, quvvatni tejash uchun bir nechta samolyot / qatlamlardan foydalanishga moyil bo'lgan mobil va ko'milgan displey tekshirgichlariga tegishli.

Yangi atom API eski KMS API asosida qurilgan. Bu ayni modelini foydalanadi va ob'ektlar (CRTCs, kodlayıcılar, ulagichlar, samolyotlar, ...), lekin o'zgartirish mumkin ob'ekt xususiyatlari ortib borayotgan raqami bilan.[50] Atom protsedurasi biz sinab ko'rmoqchi yoki yaratmoqchi bo'lgan holatni yaratish uchun tegishli xususiyatlarni o'zgartirishga asoslangan. O'zgartirishni istagan xususiyatlarimiz rejimni sozlashni (asosan CRTC, kodlovchi va ulagichlarning xususiyatlarini) yoki sahifani aylantirishni (odatda tekisliklarning xususiyatlarini) bajarishni xohlashimizga bog'liq. Ikkala holat uchun ham ioctl bir xil, farq har biri bilan berilgan xususiyatlar ro'yxatidir.[52]

Tugunlarni ko'rsatish

Original DRM API-da, DRM qurilmasi / dev / dri / cardX imtiyozli (rejimlarni sozlash, displeyni boshqa boshqarish) va imtiyozsiz (ko'rsatish, GPGPU hisoblash) operatsiyalar.[9] Xavfsizlik sababli, tegishli DRM qurilmasi faylini ochish uchun "root-huquqlariga teng" maxsus imtiyozlar kerak.[53] Bu me'morchilikka olib keladi, bu faqat ba'zi ishonchli foydalanuvchi kosmik dasturlari (X-server, grafik kompozitor, ...) DRM API-ga, shu jumladan API rejimlari kabi imtiyozli qismlarga to'liq kirish huquqiga ega. GPGPU hisob-kitoblarini amalga oshirishni yoki amalga oshirishni istagan foydalanuvchining bo'sh joy dasturlari DRM qurilmasining egasi ("DRM Master") tomonidan maxsus autentifikatsiya interfeysi yordamida berilishi kerak.[54] Shunda autentifikatsiya qilingan dasturlar DRM API-ning cheklangan versiyasidan foydalangan holda imtiyozli operatsiyalarsiz ishlashlari yoki hisoblashlari mumkin. Ushbu dizayn jiddiy cheklovlarni keltirib chiqaradi: har doim ishlaydigan foydalanuvchilar uchun bo'sh joy dasturlari foydalanishga ruxsat berilishi uchun DRM qurilmasining DRM-Master vazifasini bajaradigan ishlaydigan grafik server (X Server, Wayland kompozitor, ...) bo'lishi kerak. GPGPU hisoblashlari kabi biron bir grafik displeyga aloqador bo'lmagan holatlarda ham.[53][54]

"Render tugunlari" kontseptsiyasi ushbu stsenariylarni DRM foydalanuvchi maydoni API-ni ikkita interfeysga - bitta imtiyozli va bittadan imtiyozli bo'linishga ajratish va har biri uchun alohida qurilma fayllarini (yoki "tugunlari") ishlatib hal qilishga urinadi.[9] Har bir topilgan GPU uchun uning tegishli DRM drayveri - agar u tugunlarni ko'rsatish xususiyatini qo'llab-quvvatlasa - qurilma faylini yaratadi / dev / dri / renderDX, deb nomlangan tugunni ko'rsatish, asosiy tugunga qo'shimcha ravishda / dev / dri / cardX.[54][9] To'g'ridan-to'g'ri ko'rsatish modeli va GPU hisoblash imkoniyatlaridan foydalanishni xohlaydigan dasturlardan foydalanadigan mijozlar buni har qanday mavjud render tugunini ochish va DRM API-ning cheklangan kichik to'plamidan foydalanib GPU operatsiyalarini yuborish orqali qo'shimcha imtiyozlar talab qilmasdan amalga oshirishi mumkin. ular bor tugunlari-taqdim fayl tizimining ruxsatlari qurilma faylini ochish uchun. Displey serverlari, kompozitorlar va API-rejimini talab qiladigan boshqa dastur yoki boshqa har qanday imtiyozli operatsiya to'liq DRM API-ga kirish huquqini beradigan standart birlamchi tugunni ochishi va uni odatdagidek ishlatishi kerak. Render tugunlari GEM-ga aniq ruxsat bermaydi miltillamoq Xavfsiz GEM global nomlari yordamida bufer almashinuvining oldini olish bo'yicha operatsiya; faqat PRIME (DMA-BUF) fayl tavsiflovchilari buferlarni boshqa mijoz bilan, shu jumladan grafik server bilan bo'lishish uchun ishlatilishi mumkin.[9][54]

Uskuna yordami

DRM foydalanuvchi rejimidagi grafik qurilmalar drayveri tomonidan ishlatilishi kerak, masalan. AMD katalizatori yoki Mesa 3D. User-kosmik dasturlari foydalanish Linux tizimining qo'ng'iroq interfeysi DRM-ga kirish uchun. DRM Linux tizimidagi qo'ng'iroqlar interfeysini o'zining tizim qo'ng'iroqlari bilan kuchaytiradi.[55]

Linux DRM quyi tizimiga quyidagilar kiradi bepul va ochiq manbali ish stoli kompyuterlar (AMD, NVIDIA va Intel) uchun GPU'lar 3 asosiy ishlab chiqaruvchilari, shuningdek mobil GPU bir o'sib qator qo'llab-quvvatlash apparat uchun haydovchilar va Chipdagi tizim (SoC) integratorlari. Har bir haydovchining sifati ishlab chiqaruvchining hamkorlik darajasiga va boshqa masalalarga qarab juda farq qiladi.

DRM drayverlari
HaydovchiYadrodan beriQo'llab-quvvatlanadigan apparatSotuvchini qo'llab-quvvatlashHolati / Izohlari
Radeon2.4.1AMD (avval ATi) Radeon Arxitektura bilan GPU seriyasi TeraScale va GCN 1-chi & 2-gen. Dan modellari, shu jumladan R100 /200 /300 /400, Radeon X1000, HD 2000 /4000 /5000 /6000 /7000 /8000, R5 / R7 / R9 200 /300 ketma-ket va Kaveri APUlar.HaFaol
i9152.6.9Intel GMA 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G, G35, G41, G43, G45 chipsetlari. Intel HD va Iris Graphics HD Graphics 2000/3000/2500/4000/4200/4400/4600 / P4600 / P4700 / 5000, Iris Graphics 5100, Iris Pro Graphics 5200 integral grafik protsessorlari.HaFaol
nouveau2.6.33[56][57]NVIDIA Tesla, Fermi, Kepler, Maksvell asoslangan GeForce GPU, Tegra K1, X1 SoCQismanFaol
exynoslar3.2[58]Samsung ARM-ga asoslangan Exynos SoC
vmwgfx3.2 (sahnalashtirishdan)[59]Uchun virtual GPU VMware SVGA2virtual haydovchi
gma5003.3 (sahnalashtirishdan)[60][61]Intel GMA 500 va boshqalar Tasavvur texnologiyalari (PowerVR ) asoslangan grafik grafik protsessorlareksperimental 2D KMS haydovchisi
ast3.5[62]ASpeed ​​Technologies 2000 seriyalieksperimental
mgag2003.5[63]Matroks MGA-G200 server displeyli dvigatellariFaqat KMS uchun
shmobile3.7[64]Renesalar SH Mobile
tegra3.8[65]Nvidia Tegra 20, Tegra30 SoCHaFaol
omapdrm3.9[66]Texas Instruments OMAP 5 SoC
rcar-du3.11[67]Renesalar R-Car SoC displey birliklari
msm3.12[68][69]Qualcomm "s Adreno A2xx / A3xx / A4xx GPU oilalari (Snapdragon SOCs)[70]
armada3.13[71][72]Marvell Armada 510 SoCs
bochlar3.14[73]Virtual VGA yordamida kartalar Bochs dispi vga interfeysi (masalan QEMU stdvga)virtual haydovchi
sti3.17[74][75]STMikroelektronika SoC stiH41x seriyali
imx3.19 (sahnalashtirishdan)[76][77]Freskal i.MX SoClar
toshbo'ron3.19[76][78]Rokchip SoC-ga asoslangan grafik protsessorlarFaqat KMS uchun
amdgpu[55]4.2[79][80]AMD Radeon Arxitektura bilan GPU seriyasi GCN 3-chi & 4-avlod. Radeon modellari, shu jumladan Rx 200 /300 /400 /500[81] ketma-ket va Karrizo va Bristol va Stoni Ridj APUlar.HaFaol
virtio4.2[82]uchun virtual GPU drayveri QEMU asoslangan virtual mashinalar menejerlari (kabi) KVM yoki Xen )virtual haydovchi
vc44.4[83][84][85]Raspberry Pi "s Broadcom BCM2835 va BCM2836 SoC (VideoCore IV GPU)
etnaviv4.5[86][87][88]Vivante Kabi bir nechta SoC-larda topilgan GPU yadrolari Marvell ARMADA va Freescale i.MX6 seriyali
sun4i4.7[89][90]Allwinner SoC (ARM) Mali-400 GPU)
kirin4.7[91][90]Salom Kirin hi6220 SoC (ARM.) Mali 450-MP4 GPU)
mediatek4.7[92][90]MediaTek MT8173 SoC (tasavvur) PowerVR GX6250 GPU)
hibmc4.10[93]HiSilicon hi1710 Huawei iBMC SoC (Kremniy tasviri SM750 GPU yadrosi[94])Faqat KMS uchun
lima5.2[95]ARM Mali 4xx grafik protsessorlar
muzlatish5.2[96]ARM Mali Txxx (Midgard) va Gxx (Bifrost) GPU'lari

Tarixiy maqsadlar uchun keyingi jadvalda keltirilgan eski, eskirgan uskunalar uchun bir qator drayverlar mavjud. Ularning ba'zilari hali ham yadro kodida qolmoqda, ammo boshqalari allaqachon olib tashlangan.

Tarixiy DRM drayverlari
HaydovchiYadrodan beriQo'llab-quvvatlanadigan apparatHolati / Izohlari
gamma2.3.183D plitalar GLINT GMX 20002.6.14 beri olib tashlandi[97]
ffb2.4Creator / Creator3D (tomonidan ishlatilgan Quyosh mikrosistemalari Ultra ish stantsiyalari)2.6.21 dan olib tashlandi[98]
tdfx2.43dfx Banshi /Voodoo3 +
mga2.4Matroks G200 /G400 / G450
r1282.4ATI Rage 128
i8102.4Intel i810
sis2.4.17SiS 300 /630/540
i8302.4.20Intel 830M / 845G / 852GM / 855GM / 865G2.6.39 beri olib tashlandi[99] (i915 drayveri bilan almashtirildi)
orqali2.6.13[100]VIA Bir rangli / Unichrome Pro
vahshiy2.6.14[101]S3 grafikasi Vahshiylik 3D / MX / IX / 4 / SuperSavage / Pro / Twister

Rivojlanish

To'g'ridan-to'g'ri ko'rsatish bo'yicha menejer ichida ishlab chiqilgan Linux yadrosi va uning manba kodi da yashaydi / Drivers / gpu / drm Linux manba kodining katalogi. Kichik tizimni qo'llab-quvvatlovchi Dave Airlie bo'lib, boshqa haydovchilar ma'lum haydovchilarga g'amxo'rlik qilishadi.[102] Odatdagidek Linux yadrosi ishlab chiqishda DRM submainaynerlari va yordamchilari o'zlarini yuboradilar yamalar with new features and xato fixes to the main DRM maintainer which integrates them into its own Linux ombor. The DRM maintainer in turn submits all of these patches that are ready to be mainlined to Linus Torvalds whenever a new Linux version is going to be released. Torvalds, as top maintainer of the whole kernel, holds the last word on whether a patch is suitable or not for inclusion in the kernel.

For historical reasons, the source code of the libdrm library is maintained under the umbrella of the Mesa loyiha.[103]

Tarix

In 1999, while developing DRI uchun XFree86, Precision Insight created the first version of DRM for the 3dfx video cards, as a Linux yadrosi yamoq included within the Mesa source code.[104] Later that year, the DRM code was mainlined in Linux kernel 2.3.18 under the /drivers/char/drm/ directory for character devices.[105] During the following years the number of supported video cards grew. When Linux 2.4.0 was released in January 2001 there was already support for Creative Labs GMX 2000, Intel i810, Matrox G200/G400 and ATI Rage 128, in addition to 3dfx Voodoo3 cards,[106] and that list expanded during the 2.4.x series, with drivers for ATI Radeon cards, some SiS video cards and Intel 830M and subsequent integrated GPUs.

The split of DRM into two components, DRM core and DRM driver, called DRM core/personality split was done during the second half of 2004,[11][107] and merged into kernel version 2.6.11.[108] This split allowed multiple DRM drivers for multiple devices to work simultaneously, opening the way to multi-GPU support.

The idea of putting all the video mode setting code in one place inside the kernel had been acknowledged for years,[109][110] but the graphics card manufacturers had argued that the only way to do the mode-setting was to use the routines provided by themselves and contained in the Video BIOS of each graphics card. Such code had to be executed using x86 haqiqiy rejim, which prevented it from being invoked by a kernel running in himoyalangan rejim.[44] The situation changed when Luc Verhaegen and other developers found a way to do the mode-setting natively instead of BIOS-based,[111][44] showing that it was possible to do it using normal kernel code and laying the groundwork for what would become Kernel Mode Setting. In May 2007 Jesse Barnes (Intel ) published the first proposal for a drm-modesetting API and a working native implementation of mode-setting for Intel GPUs within the i915 DRM driver.[42] In December 2007 Jerome Glisse started to add the native mode-setting code for ATI cards to the radeon DRM driver.[112][113] Work on both the API and drivers continued during 2008, but got delayed by the necessity of a memory manager also in kernel space to handle the framebuffers.[114]

In October 2008 the Linux kernel 2.6.27 brought a major manba kodi reorganization, prior to some significant upcoming changes. The DRM source code tree was moved to its own source directory /drivers/gpu/drm/ and the different drivers were moved into their own subdirectories. Headers were also moved into a new /include/drm katalog.[115]

The increasing complexity of video memory management led to several approaches to solving this issue. The first attempt was the Translation Table Maps (TTM) memory manager, developed by Thomas Hellstrom (Tungsten Graphics ) in collaboration with Eric Anholt (Intel) and Dave Airlie (Qizil shapka ).[5] TTM was proposed for inclusion into mainline kernel 2.6.25 in November 2007,[5] and again in May 2008, but was ditched in favor of a new approach called Graphics Execution Manager (GEM).[24] GEM was first developed by Keith Packard and Eric Anholt from Intel as simpler solution for memory management for their i915 driver.[6] GEM was well received and merged into the Linux kernel version 2.6.28 released in December 2008.[116] Meanwhile, TTM had to wait until September 2009 to be finally merged into Linux 2.6.31 as a requirement of the new Radeon KMS DRM driver.[117]

With memory management in place to handle buffer objects, DRM developers could finally add to the kernel the already finished API and code to do mode setting. This expanded API is what is called Kernel Mode-setting (KMS) and the drivers which implement it are often referred to as KMS drivers. In March 2009, KMS was merged into the Linux kernel version 2.6.29,[30][118] along with KMS support for the i915 driver.[119] The KMS API have been exposed to user space programs since libdrm 2.4.3.[120] The userspace X.Org DDX driver for Intel graphics cards was also the first to use the new GEM and KMS APIs.[121] KMS support for the radeon DRM driver was added to Linux 2.6.31 release of September 2009.[122][123][124] The new radeon KMS driver used the TTM memory manager but exposed GEM-compatible interfaces and ioctls instead of TTM ones.[23]

Since 2006 the nouveau project had been developing a bepul dasturiy ta'minot DRM driver for NVIDIA GPUs outside of the official Linux kernel. In 2010 the nouveau source code was merged into Linux 2.6.33 as an experimental driver.[56][57] At the time of merging, the driver had been already converted to KMS, and behind the GEM API it used TTM as its memory manager.[125]

The new KMS API—including the GEM API—was a big milestone in the development of DRM, but it didn't stop the API for being enhanced in the following years. KMS gained support for page flips in conjunction with asyncronous VBLANK notifications in Linux 2.6.33[126][127]—only for the i915 driver, radeon and nouveau added it later during Linux 2.6.38 release.[128] The new page flip interface was added to libdrm 2.4.17.[129] In early 2011, during the Linux 2.6.39 release cycle, the so-called dumb buffers—a hardware-independent non-accelerated way to handle simple buffers suitable for use as framebuffers—were added to the KMS API.[130][131] The goal was to reduce the complexity of applications such as Plimut that don't need to use special accelerated operations provided by driver-specific ioctls.[132] The feature was exposed by libdrm from version 2.4.25 onwards.[133] Later that year it also gained a new main type of objects, called samolyotlar. Planes were developed to represent hardware overlays supported by the scanout engine.[134][135] Plane support was merged into Linux 3.3.[136] and libdrm 2.4.30. Another concept added to the API—during Linux 3.5[137] and libdrm 2.4.36[138] releases—were generic object properties, a method to add generic values to any KMS object. Properties are specially useful to set special behaviour or features to objects such as CRTCs and planes.

An early proof of concept to provide GPU offloading between DRM drivers was developed by Dave Airlie in 2010.[7][139] Since Airlie was trying to mimic the NVIDIA Optimus technology, he decided to name it "PRIME".[7] Airlie resumed his work on PRIME in late 2011, but based on the new DMA-BUF buffer sharing mechanism introduced by Linux kernel 3.3.[140] The basic DMA-BUF PRIME infrastructure was finished in March 2012[141] and merged into the Linux 3.4 release,[142][143][144] as well as into libdrm 2.4.34.[145] Later during the Linux 3.5 release, several DRM drivers implemented PRIME support, including i915 for Intel cards, radeon for AMD cards and nouveau for NVIDIA cards.[146][147]

In recent years, the DRM API has incrementally expanded with new and improved features. 2013 yilda, uning bir qismi sifatida GSoC, David Herrmann developed the multiple render nodes xususiyati.[53] His code was added to the Linux kernel version 3.12 as an experimental feature[148][149] supported by i915,[150] radeon[151] and nouveau[152] drivers, and enabled by default since Linux 3.17.[75] In 2014 Matt Roper (Intel) developed the universal planes (yoki unified planes) concept by which framebuffers (primary planes), overlays (secondary planes) and cursors (cursor planes) are all treated as a single type of object with an unified API.[153] Universal planes support provides a more consistent DRM API with fewer, more generic ioktllar.[33] In order to maintain the API backwards compatible, the feature is exposed by DRM core as an additional capability that a DRM driver can provide. Universal plane support debuted in Linux 3.15[154] and libdrm 2.4.55.[155] Several drivers, such as the Intel i915,[156] have already implemented it.

The most recent DRM API enhancement is the atomic mode-setting API, which brings atomicity to the mode-setting and page flipping operations on a DRM device. The idea of an atomic API for mode-setting was first proposed in early 2012.[157] Ville Syrjälä (Intel) took over the task of designing and implementing such atomic API.[158] Based on his work, Rob Clark (Texas Instruments ) took a similar approach aiming to implement atomic page flips.[159] Later in 2013 both proposed features were reunited in a single one using a single ioctl for both tasks.[160] Since it was a requirement, the feature had to wait for the support of universal planes to be merged in mid-2014.[156] During the second half of 2014 the atomic code was greatly enhanced by Daniel Vetter (Intel) and other DRM developers[161]:18 in order to facilitate the transition for the existing KMS drivers to the new atomic framework.[162] All of this work was finally merged into Linux 3.19[163] and Linux 4.0[164][165][166] releases, and enabled by default since Linux 4.2.[167] libdrm exposed the new atomic API since version 2.4.62.[168] Multiple drivers have already been converted to the new atomic API.[169] By 2018 ten new DRM drivers based on this new atomic model had been added to the Linux kernel.[170]

Farzandlikka olish

The Direct Rendering Manager kernel subsystem was initially developed to be used with the new To'g'ridan-to'g'ri ko'rsatish infratuzilmasi ning XFree86 4.0 display server, later inherited by its successor, the X.Org serveri. Therefore, the main users of DRM were DRI clients that link to the hardware-accelerated OpenGL implementation that lives in the Mesa 3D library, as well as the X Server itself. Nowadays DRM is also used by several Wayland compositors, shu jumladan Veston reference compositor. kmscon is a virtual console implementation that runs in user space using DRM KMS facilities.[171]

In 2015, version 358.09 (beta) of the proprietary Nvidia GeForce driver received support for the DRM mode-setting interface implemented as a new kernel blob called nvidia-modeset.ko. This new driver component works in conjunction with the nvidia.ko kernel module to program the display engine (i.e. display controller) of the GPU.[172]

Shuningdek qarang

Adabiyotlar

  1. ^ "Linux kernel/drivers/gpu/drm/README.drm". kernel.org. Arxivlandi asl nusxasi 2014-02-26 da. Olingan 2014-02-26.
  2. ^ a b Uytterhoeven, Geert. "The Frame Buffer Device". Kernel.org. Olingan 28 yanvar 2015.
  3. ^ a b v Oq, Tomas. "How DRI and DRM Work". Olingan 22 iyul 2014.
  4. ^ Faith, Rickard E. (11 May 1999). "The Direct Rendering Manager: Kernel Support for the Direct Rendering Infrastructure". Olingan 12 may 2016.
  5. ^ a b v d e f g h Corbet, Jonathan (6 November 2007). "Memory management for graphics processors". LWN.net. Olingan 23 iyul 2014.
  6. ^ a b v d e f g Packard, Keith; Anholt, Eric (13 May 2008). "GEM - the Graphics Execution Manager". dri-devel mailing list. Olingan 23 iyul 2014.
  7. ^ a b v Airlie, Dave (12 March 2010). "GPU offloading - PRIME - proof of concept". Arxivlandi asl nusxasi 2015 yil 10 fevralda. Olingan 10 fevral 2015.
  8. ^ a b v d e Kitching, Simon. "DRM and KMS kernel modules". Olingan 13 may 2016.
  9. ^ a b v d e Herrmann, David (1 September 2013). "Splitting DRM and KMS device nodes". Olingan 23 iyul 2014.
  10. ^ "README.rst - mesa/drm - Direct Rendering Manager headers and kernel modules". 2020-03-21. Arxivlandi asl nusxasi on 2020-03-21.
  11. ^ a b Airlie, Dave (4 September 2004). "New proposed DRM interface design". dri-devel (Pochta ro'yxati).
  12. ^ a b v d e f g Peres, Martin; Ravier, Timothée (2 February 2013). "DRI-next/DRM2: A walkthrough the Linux Graphics stack and its security" (PDF). Olingan 13 may 2016.
  13. ^ Høgsberg, Kristian (4 September 2008). "The DRI2 Extension - Version 2.0". X.Org. Olingan 23 may 2016.
  14. ^ a b v d e f Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Memory management". Olingan 31 avgust 2016.
  15. ^ Vetter, Daniel. "i915/GEM Crashcourse by Daniel Vetter". Intel Open Source Technology Center. Olingan 31 yanvar 2015. GEM essentially deals with graphics buffer objects (which can contain textures, renderbuffers, shaders, or all kinds of other state objects and data used by the gpu)
  16. ^ a b v Vetter, Daniel (4 May 2011). "GEM Overview". Olingan 13 fevral 2015.
  17. ^ Packard, Keith (28 September 2012). "Thoughts about DRI.Next". Olingan 26 may 2016. GEM flink has lots of issues. The flink names are global, allowing anyone with access to the device to access the flink data contents.
  18. ^ a b Herrmann, David (2 July 2013). "DRM Security". The 2013 X.Org Developer's Conference (XDC2013) Proceedings. Olingan 13 fevral 2015. gem-flink doesn't provide any private namespaces to applications and servers. Instead, only one global namespace is provided per DRM node. Malicious authenticated applications can attack other clients via brute-force "name-guessing" of gem buffers
  19. ^ Kerrisk, Michael (25 September 2012). "XDC2012: Graphics stack security". LWN.net. Olingan 25 noyabr 2015.
  20. ^ a b Packard, Keith (4 July 2008). "gem update". Olingan 25 aprel 2016.
  21. ^ "drm-memory man page". Ubuntu manuals. Olingan 29 yanvar 2015. Many modern high-end GPUs come with their own memory managers. They even include several different caches that need to be synchronized during access. [...] . Therefore, memory management on GPUs is highly driver- and hardware-dependent.
  22. ^ "Intel Graphics Media Accelerator Developer's Guide". Intel korporatsiyasi. Olingan 24-noyabr 2015.
  23. ^ a b v Larabel, Michael (26 August 2008). "A GEM-ified TTM Manager For Radeon". Froniks. Olingan 24 aprel 2016.
  24. ^ a b v Corbet, Jonathan (28 May 2008). "GEM v. TTM". LWN.net. Olingan 10 fevral 2015.
  25. ^ Corbet, Jonathan (11 January 2012). "DMA buffer sharing in 3.3". LWN.net. Olingan 14 may 2016.
  26. ^ Clark, Rob; Semwal, Sumit. "DMA Buffer Sharing Framework: An Introduction" (PDF). Olingan 14 may 2016.
  27. ^ Peres, Martin (26 September 2014). "The Linux graphics stack, Optimus and the Nouveau driver" (PDF). Olingan 14 may 2016.
  28. ^ Pinchart, Laurent (20 February 2013). "Anatomy of an Embedded KMS Driver" (PDF). Olingan 27 iyun 2016.
  29. ^ Edge, Jake (9 October 2013). "DRI3 and Present". LWN.net. Olingan 28 may 2016.
  30. ^ a b v d "Linux 2.6.29 - Kernel Modesetting". Linux Kernel Newbies. Olingan 19 noyabr 2015.
  31. ^ "VGA Hardware". OSDev.org. Olingan 23 noyabr 2015.
  32. ^ Rathmann, B. (15 February 2008). "The state of Nouveau, part I". LWN.net. Olingan 23 noyabr 2015. Graphics cards are programmed in numerous ways, but most initialization and mode setting is done via memory-mapped IO. This is just a set of registers accessible to the CPU via its standard memory address space. The registers in this address space are split up into ranges dealing with various features of the graphics card such as mode setup, output control, or clock configuration.
  33. ^ a b v d e Paalanen, Pekka (5 June 2014). "From pre-history to beyond the global thermonuclear war". Olingan 29 iyul 2014.
  34. ^ "drm-kms man page". Ubuntu manuals. Olingan 19 noyabr 2015.
  35. ^ Corbet, Jonathan (13 January 2010). "The end of user-space mode setting?". LWN.net. Olingan 20 noyabr 2015.
  36. ^ a b "Mode Setting Design Discussion". X.Org Wiki. Olingan 19 noyabr 2015.
  37. ^ a b Corbet, Jonathan (22 January 2007). "LCA: Updates on the X Window System". LWN.net. Olingan 23 noyabr 2015.
  38. ^ "XF86VIDMODE manual page". X.Org. Olingan 23 aprel 2016.
  39. ^ "X11R6.1 Release Notes". X.Org. 14 March 1996. Olingan 23 aprel 2016.
  40. ^ Corbet, Jonathan (20 July 2004). "Kernel Summit: Video Drivers". LWN.net. Olingan 23 noyabr 2015.
  41. ^ a b "Fedora - Features/KernelModeSetting". Fedora loyihasi. Olingan 20 noyabr 2015. Historically, the X server was responsible for saving output state when it started up, and then restoring it when it switched back to text mode. Fast user switching was accomplished with a VT switch, so switching away from the first user's X server would blink once to go to text mode, then immediately blink again to go to the second user's session.
  42. ^ a b v d e Barnes, Jesse (17 May 2007). "[RFC] enhancing the kernel's graphics subsystem". Linux yadrosi (Pochta ro'yxati).
  43. ^ a b v "DrmModesetting - Enhancing kernel graphics". DRI Wiki. Olingan 23 noyabr 2015.
  44. ^ a b v d e Packard, Keith (16 September 2007). "kernel-mode-drivers". Olingan 30 aprel 2016.
  45. ^ a b Packard, Keith (24 April 2000). "Sharpening the Intel Driver Focus". Olingan 23 may 2016. A more subtle limitation is that the driver couldn't handle interrupts, so there wasn't any hot-plug monitor support.
  46. ^ Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Driver Initialization". Olingan 31 avgust 2016.
  47. ^ a b v d e f g Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - KMS Initialization and Cleanup". Olingan 31 avgust 2016.
  48. ^ a b "Video Cards". X.Org Wiki. Olingan 11 aprel 2016.
  49. ^ a b Deucher, Alex (15 April 2010). "Notes about radeon display hardware". Arxivlandi asl nusxasi 2016 yil 5 aprelda. Olingan 8 aprel 2016.
  50. ^ a b v d e Vetter, Daniel (5 August 2015). "Atomic mode setting design overview, part 1". LWN.net. Olingan 7 may 2016.
  51. ^ a b Reding, Thierry (1 February 2015). "Atomic Mode-Setting" (PDF). FOSDEM Archives. Olingan 7 may 2016.
  52. ^ Vetter, Daniel (12 August 2015). "Atomic mode setting design overview, part 2". LWN.net. Olingan 7 may 2016.
  53. ^ a b v Herrmann, David (29 May 2013). "DRM Render- and Modeset-Nodes". Olingan 21 iyul 2014.
  54. ^ a b v d Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Render nodes". Olingan 31 avgust 2016.
  55. ^ a b Deucher, Alex (20 April 2015). "Initial amdgpu driver release". dri-devel (Pochta ro'yxati).
  56. ^ a b "Linux 2.6.33 - Nouveau, a driver for Nvidia graphic cards". Linux Kernel Newbies. Olingan 26 aprel 2016.
  57. ^ a b "drm/nouveau: Add DRM driver for NVIDIA GPUs". Kernel.org. Olingan 27 yanvar 2015.
  58. ^ "DRM: add DRM Driver for Samsung SoC EXYNOS4210". Kernel.org. Olingan 3 mart 2016.
  59. ^ "vmwgfx: Take the driver out of staging". Kernel.org. Olingan 3 mart 2016.
  60. ^ "Linux 3.3 - DriverArch - Graphics". Linux Kernel Newbies. Olingan 3 mart 2016.
  61. ^ Larabel, Michael (10 January 2012). "The Linux 3.3 DRM Pull Is Heavy On Enhancements". Froniks. Olingan 3 mart 2016.
  62. ^ "drm: Initial KMS driver for AST (ASpeed Technologies) 2000 series (v2)". Kernel.org. Olingan 3 mart 2016.
  63. ^ Airlie, Dave (17 May 2012). "mgag200: initial g200se driver (v2)". Olingan 24 yanvar 2018.
  64. ^ "drm: Renesas SH Mobile DRM driver". Kernel.org. Olingan 3 mart 2016.
  65. ^ "drm: Add NVIDIA Tegra20 support". Kernel.org. Olingan 3 mart 2016.
  66. ^ "drm/omap: move out of staging". Kernel.org. Olingan 3 mart 2016.
  67. ^ "drm: Renesas R-Car Display Unit DRM driver". Kernel.org. Olingan 3 mart 2016.
  68. ^ "drm/msm: basic KMS driver for snapdragon". Kernel.org. Olingan 3 mart 2016.
  69. ^ Larabel, Michael (28 August 2013). "Snapdragon DRM/KMS Driver Merged For Linux 3.12". Froniks. Olingan 26 yanvar 2015.
  70. ^ Edge, Jake (8 April 2015). "An update on the freedreno graphics driver". LWN.net. Olingan 23 aprel 2015.
  71. ^ King, Russell (18 October 2013). "[GIT PULL] Armada DRM support". dri-devel (Pochta ro'yxati).
  72. ^ "DRM: Armada: Add Armada DRM driver". Kernel.org. Olingan 3 mart 2016.
  73. ^ "drm/bochs: new driver". Kernel.org. Olingan 3 mart 2016.
  74. ^ Larabel, Michael (8 August 2014). "Linux 3.17 DRM Pull Brings New Graphics Driver". Froniks. Olingan 3 mart 2016.
  75. ^ a b Corbet, Jonathan (13 August 2014). "3.17 merge window, part 2". LWN.net. Olingan 7 oktyabr 2014.
  76. ^ a b Corbet, Jonathan (17 December 2014). "3.19 Merge window part 2". LWN.net. Olingan 9 fevral 2015.
  77. ^ "drm: imx: Move imx-drm driver out of staging". Kernel.org. Olingan 9 fevral 2015.
  78. ^ "drm: rockchip: Add basic drm driver". Kernel.org. Olingan 3 mart 2016.
  79. ^ Larabel, Michael (25 June 2015). "Linux 4.2 DRM Updates: Lots Of AMD Attention, No Nouveau Driver Changes". Froniks. Olingan 31 avgust 2015.
  80. ^ Corbet, Jonathan (1 July 2015). "4.2 Merge window part 2". LWN.net. Olingan 31 avgust 2015.
  81. ^ Deucher, Alex (3 August 2015). "[PATCH 00/11] Add Fiji Support". dri-devel (Pochta ro'yxati).
  82. ^ "Add virtio gpu driver". Kernel.org. Olingan 3 mart 2016.
  83. ^ Corbet, Jonathan (11 November 2015). "4.4 Merge window, part 1". LWN.net. Olingan 11 yanvar 2016.
  84. ^ Larabel, Michael (15 November 2015). "A Look At The New Features Of The Linux 4.4 Kernel". Froniks. Olingan 11 yanvar 2016.
  85. ^ "drm/vc4: Add KMS support for Raspberry Pi". Kernel.org.
  86. ^ "Linux 4.5-DriversArch - Graphics". Linux Kernel Newbies. Olingan 14 mart 2016.
  87. ^ Larabel, Michael (24 January 2016). "The Many New Features & Improvements Of The Linux 4.5 Kernel". Froniks. Olingan 14 mart 2016.
  88. ^ Corbet, Jonathan (20 January 2016). "4.5 merge window part 2". LWN.Net. Olingan 14 mart 2016.
  89. ^ "Merge tag 'sun4i-drm-for-4.7'". Kernel.org.
  90. ^ a b v Airlie, Dave (23 May 2016). "[git pull] drm for v4.7". dri-devel (Pochta ro'yxati).
  91. ^ "Merge tag 'drm-hisilicon-next-2016-04-29'". Kernel.org.
  92. ^ "Merge tag 'mediatek-drm-2016-05-09'". Kernel.org.
  93. ^ Larabel, Michael (22 November 2016). "Hisilicon Hibmc DRM Driver Being Added For Linux 4.10". Froniks. Olingan 24 yanvar 2018.
  94. ^ "Huawei FusionServer RH5885 V3 Technical White Paper". 18 November 2016. uses an onboard display chip that is integrated into the management chip Hi1710 and uses the IP core of the SM750
  95. ^ "kernel / git / torvalds / linux.git - Linux yadrosi manba daraxti". git.kernel.org. Olingan 2019-11-28.
  96. ^ "kernel / git / torvalds / linux.git - Linux yadrosi manba daraxti". git.kernel.org. Olingan 2019-11-28.
  97. ^ "drm: remove the gamma driver". Kernel.org. Olingan 27 yanvar 2015.
  98. ^ "[DRM]: Delete sparc64 FFB driver code that never gets built". Kernel.org. Olingan 27 yanvar 2015.
  99. ^ "drm: remove i830 driver". Kernel.org. Olingan 27 yanvar 2015.
  100. ^ "drm: Add via unichrome support". Kernel.org. Olingan 27 yanvar 2015.
  101. ^ "drm: add savage driver". Kernel.org. Olingan 27 yanvar 2015.
  102. ^ "List of maintainers of the linux kernel". Kernel.org. Olingan 14 iyul 2014.
  103. ^ "libdrm git repository". Olingan 23 iyul 2014.
  104. ^ "First DRI release of 3dfx driver". Mesa 3D. Olingan 15 iyul 2014.
  105. ^ "Import 2.3.18pre1". The History of Linux in GIT Repository Format 1992-2010 (2010). Olingan 15 iyul 2014.
  106. ^ Torvalds, Linus. "Linux 2.4.0 source code". Kernel.org. Olingan 29 iyul 2014.
  107. ^ Airlie, Dave (30 December 2004). "[bk pull] drm core/personality split". Linux yadrosi (Pochta ro'yxati).
  108. ^ Torvalds, Linus (11 January 2005). "Linux 2.6.11-rc1". Linux yadrosi (Pochta ro'yxati).
  109. ^ Gettys, James; Packard, Keith (15 June 2004). "The (Re)Architecture of the X Window System". Olingan 30 aprel 2016.
  110. ^ Smirl, Jon (30 August 2005). "The State of Linux Graphics". Olingan 30 aprel 2016. I believe the best solution to this problem is for the kernel to provide a single, comprehensive device driver for each piece of video hardware. This means that conflicting drivers like fbdev and DRM must be merged into a cooperating system. It also means that poking hardware from user space while a kernel based device driver is loaded should be prevented.
  111. ^ Verhaegen, Luc (2 March 2006). "X and Modesetting: Atrophy illustrated" (PDF). Olingan 30 aprel 2016.
  112. ^ Glisse, Jerome (4 December 2007). "Radeon kernel modesetting". Olingan 30 aprel 2016.
  113. ^ Larabel, Michael (1 October 2008). "The State of Kernel Mode-Setting". Froniks. Olingan 30 aprel 2016.
  114. ^ Packard, Keith (21 July 2008). "X output status july 2008". Olingan 1 may 2016.
  115. ^ "drm: reorganise drm tree to be more future proof". Kernel.org.
  116. ^ "Linux 2.6.28 - The GEM Memory Manager for GPU memory". Linux Kernel Newbies. Olingan 23 iyul 2014.
  117. ^ "drm: Add the TTM GPU memory manager subsystem". Kernel.org.
  118. ^ "DRM: add mode setting support". Kernel.org.
  119. ^ "DRM: i915: add mode setting support". Kernel.org.
  120. ^ Anholt, Eric (22 December 2008). "[ANNOUNCE] libdrm-2.4.3". dri-devel (Pochta ro'yxati).
  121. ^ Barnes, Jesse (20 October 2008). "[ANNOUNCE] xf86-video-intel 2.5.0". xorg-announce (Pochta ro'yxati).
  122. ^ "Linux 2.6.31 - ATI Radeon Kernel Mode Setting support". Linux Kernel Newbies. Arxivlandi asl nusxasi 2015 yil 5-noyabrda. Olingan 28 aprel 2016.
  123. ^ Torvalds, Linus (9 September 2009). "Linux 2.6.31". Linux yadrosi (Pochta ro'yxati).
  124. ^ "drm/radeon: introduce kernel modesetting for radeon hardware". Kernel.org.
  125. ^ "The irregular Nouveau Development Companion #40". Nouveau project. Olingan 3 may 2016.
  126. ^ "Linux 2.6.33 - Graphic improvements". Linux Kernel Newbies. Olingan 28 aprel 2016.
  127. ^ "drm/kms: add page flipping ioctl". Kernel.org.
  128. ^ "Linux 2.6.38 - Graphics". Linux Kernel Newbies. Olingan 28 aprel 2016.
  129. ^ Airlie, Dave (21 December 2009). "[ANNOUNCE] libdrm 2.4.17". dri-devel (Pochta ro'yxati).
  130. ^ "drm: dumb scanout create/mmap for intel/radeon (v3)". Kernel.org.
  131. ^ "Linux 2 6 39-DriversArch". Linux Kernel Newbies. Olingan 19 aprel 2016.
  132. ^ Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Dumb Buffer Objects". Olingan 31 avgust 2016.
  133. ^ Wilson, Chris (11 April 2011). "[ANNOUNCE] libdrm 2.4.25". dri-devel (Pochta ro'yxati).
  134. ^ Barnes, Jesse (25 April 2011). "[RFC] drm: add overlays as first class KMS objects". dri-devel (Pochta ro'yxati).
  135. ^ Barnes, Jesse (13 May 2011). "[RFC] drm: add overlays as first class KMS objects". dri-devel (Pochta ro'yxati).
  136. ^ "drm: add plane support v3". Kernel.org.
  137. ^ "drm: add generic ioctls to get/set properties on any object". Kernel.org.
  138. ^ Widawsky, Ben (27 June 2012). "[ANNOUNCE] libdrm 2.4.36". xorg-announce (Pochta ro'yxati).
  139. ^ Larabel, Michael. "Proof Of Concept: Open-Source Multi-GPU Rendering!". Froniks. Olingan 14 aprel 2016.
  140. ^ Larabel, Michael (23 February 2012). "DRM Base PRIME Support Part Of VGEM Work". Froniks. Olingan 14 aprel 2016.
  141. ^ Airlie, Dave (27 March 2012). "[PATCH] drm: base prime/dma-buf support (v5)". dri-devel (Pochta ro'yxati).
  142. ^ Larabel, Michael (30 March 2012). "Last Minute For Linux 3.4: DMA-BUF PRIME Support". Froniks. Olingan 15 aprel 2016.
  143. ^ "drm: base prime/dma-buf support (v5)". Kernel.org.
  144. ^ "Linux 3.4 DriverArch". Linux Kernel Newbies. Olingan 15 aprel 2016.
  145. ^ Anholt, Eric (10 May 2012). "[ANNOUNCE] libdrm 2.4.34". dri-devel (Pochta ro'yxati).
  146. ^ Larabel, Michael (12 May 2012). "DMA-BUF PRIME Coming Together For Linux 3.5". Froniks. Olingan 15 aprel 2016.
  147. ^ "Linux 3.5 DriverArch". Linux Kernel Newbies. Olingan 15 aprel 2016.
  148. ^ Corbet, Jonathan (11 September 2013). "3.12 merge window, part 2". LWN.net. Olingan 21 iyul 2014.
  149. ^ "drm: implement experimental render nodes". Kernel.org.
  150. ^ "drm/i915: Support render nodes". Kernel.org.
  151. ^ "drm/radeon: Support render nodes". Kernel.org.
  152. ^ "drm/nouveau: Support render nodes". Kernel.org.
  153. ^ Roper, Matt (7 March 2014). "[RFCv2 00/10] Universal plane support". dri-devel (Pochta ro'yxati).
  154. ^ Larabel, Michael (2 April 2014). "Universal Plane Support Set For Linux 3.15". Froniks. Olingan 14 aprel 2016.
  155. ^ Lankhorst, Maarten (25 July 2014). "[ANNOUNCE] libdrm 2.4.55". dri-devel (Pochta ro'yxati).
  156. ^ a b Vetter, Daniel (7 August 2014). "Neat stuff for 3.17". Olingan 14 aprel 2016.
  157. ^ Barnes, Jesse (15 February 2012). "[RFC] drm: atomic mode set API". dri-devel (Pochta ro'yxati).
  158. ^ Syrjälä, Ville (24 May 2012). "[RFC][PATCH 0/6] WIP: drm: Atomic mode setting idea". dri-devel (Pochta ro'yxati).
  159. ^ Clark, Rob (9 September 2012). "[RFC 0/9] nuclear pageflip". dri-devel (Pochta ro'yxati).
  160. ^ Clark, Rob (6 October 2013). "[RFCv1 00/12] Atomic/nuclear modeset/pageflip". dri-devel (Pochta ro'yxati).
  161. ^ Vetter, Daniel (3 February 2016). "Embrace the Atomic Display Age" (PDF). Olingan 4 may 2016.
  162. ^ Vetter, Daniel (2 November 2014). "Atomic Modeset Support for KMS Drivers". Olingan 4 may 2016.
  163. ^ Airlie, Dave (14 December 2014). "[git pull] drm for 3.19-rc1". dri-devel (Pochta ro'yxati).
  164. ^ Vetter, Daniel (28 January 2015). "Update for Atomic Display Updates". Olingan 4 may 2016.
  165. ^ Airlie, Dave (15 February 2015). "[git pull] drm pull for 3.20-rc1". dri-devel (Pochta ro'yxati).
  166. ^ "Linux 4.0 - DriverArch - Graphics". Linux Kernel Newbies. Olingan 3 may 2016.
  167. ^ "Linux 4.2 - Atomic modesetting API enabled by default". Linux Kernel Newbies. Olingan 3 may 2016.
  168. ^ Velikov, Emil (29 June 2015). "[ANNOUNCE] libdrm 2.4.62". dri-devel (Pochta ro'yxati).
  169. ^ Vetter, Daniel (6 June 2016). "Awesome Atomic Advances". Olingan 7 iyun 2016. right now there's 17 drivers supporting atomic modesetting merged into the DRM subsystem
  170. ^ Stone, Daniel (20 March 2018). "A new era for Linux's low-level graphics - Part 1". Olingan 5 may 2018.
  171. ^ Herrmann, David (10 December 2012). "KMSCON Introduction". Olingan 22 noyabr 2015.
  172. ^ "Linux, Solaris, and FreeBSD driver 358.09 (beta)". 2015-12-10.

Tashqi havolalar