อย่างแรกเลย, โดยพื้นฐานแล้วมีสองประเภทของไดรเวอร์เฟรมเฟรมคลาสสิก:
- ไดรเวอร์ฮาร์ดแวร์และเฟิร์มแวร์ทั่วไป (เช่น vga, vesafb / uvesafb, efifb)
- ไดรเวอร์เฉพาะของฮาร์ดแวร์ (เช่น rivafb, atyfb)
ไดร์เวอร์ framebuffer แบบคลาสสิกทั้งหมดมีการสนับสนุนการตั้งค่าโหมดพื้นฐาน แต่พวกเขาก็มีการสนับสนุนเล็กน้อยสำหรับการรองรับฮาร์ดแวร์
ด้วยการออกแบบ X แบบคลาสสิกนี่ไม่ใช่ปัญหาจริงๆ: เพื่อให้ได้การเร่งความเร็วแบบ 2 มิติเซิร์ฟเวอร์ X ทำงานในฐานะรูทและสามารถเข้าถึงฮาร์ดแวร์ได้โดยตรง โดยทั่วไปแล้วจะข้ามไดร์เวอร์ framebuffer อย่างสมบูรณ์ สำหรับ 3d (และการสนับสนุน 2d สำหรับการ์ดรุ่นใหม่) ก็จะใช้ไดรเวอร์ DRM เคอร์เนลที่เป็นสื่อกลางในการเข้าถึงและจัดการหน่วยความจำวิดีโอ
ในการตั้งค่านี้มีสองสถานที่ที่การตั้งค่าการทำเสร็จแล้ว: ทั้งในเคอร์เนลไดรเวอร์เฟรมบ็อกเกอร์และในเซิร์ฟเวอร์ userspace X การทำสำเนาของรหัสนี้ (และการต่อสู้เป็นครั้งคราวระหว่างไดรเวอร์เช่นบน VT-switch) ไม่เหมาะ
นอกจากนี้ยังมีไดรเวอร์อีกสองตัวแยกกันในเคอร์เนลสำหรับฮาร์ดแวร์ชิ้นเดียวกันนั่นคือไดร์เวอร์ framebuffer และไดรเวอร์ DRM ในบางกรณี (เช่น pre-kms intelfb) คุณสามารถโหลดหนึ่งหรืออื่น ๆ แต่ไม่ทั้งสองในเวลาเดียวกัน
KMS เป็นวิธีแก้ปัญหาเหล่านี้ มัน:
- ผสานรวมไดร์เวอร์ framebuffer เฉพาะฮาร์ดแวร์เคอร์เนลและไดรเวอร์ drm เข้ากับไดรเวอร์เดียว
- จัดเตรียมอินเตอร์เฟสสำหรับเซิร์ฟเวอร์ X เพื่อใช้เพื่อควบคุมการตั้งค่าโหมดดังนั้นเซิร์ฟเวอร์ X ไม่จำเป็นต้องเข้าถึงฮาร์ดแวร์โดยตรง (อันที่จริงแล้วด้วย KMS เซิร์ฟเวอร์ X ไม่ต้องการสิทธิ์รูทอีกต่อไป)
หมายเหตุที่น่าสนใจ: การโยกย้ายไปยังสิ่งที่ตอนนี้ KMS เริ่มต้นจริงประมาณปี 2004; ดูอีเมลจอน Smirl บนคอนโซล rearchitecture
หากต้องการตอบคำถามเฉพาะเพิ่มเติมของคุณ:
- ความเร็วโดยทั่วไปจะไม่เลวร้ายยิ่งกว่าไดรเวอร์ทั่วไปที่ไม่มีการเร่งความเร็ว (เช่น VGA, vesafb) แต่คอนโซลข้อความ KMS framebuffer ได้รับการออกแบบมาเพื่อความสะดวกและการใช้งานฉุกเฉินมากกว่าความเร็วและคอนโซลไม่ได้เร่งความเร็วเต็มที่ เส้นยาวที่ถูกห่อนั้นค่อนข้างแย่สำหรับการ์ด intel ตัวอย่างเช่น
- แอปพลิเคชันที่ออกแบบมาเพื่อใช้อินเทอร์เฟซ framebuffer แบบเก่าจะยังคงทำงานกับ KMS framebuffer