การตั้งค่าโหมดเคอร์เนลเทียบกับ Framebuffer?


24

ด้วย KMS ไดรเวอร์กราฟิกจะถูกย้ายไปยังเคอร์เนล เนื่องจาก framebuffer อยู่ในเคอร์เนลอยู่แล้วฉันไม่คาดหวังว่าสิ่งนี้จะส่งผลกระทบต่อการทำงานของ framebuffer ถึงกระนั้นฉันอ่านว่า KMS จะควบคุม fb ให้เพิ่ม fb ต้องใช้ fb และต้องการการสนับสนุน fb เพื่อลบออก ห่า? คำตอบที่ฉันกำลังมองหาคือคำอธิบายของความสัมพันธ์ระหว่าง KMS และ framebuffer

ฉันใช้ uvesafb เพื่อให้ได้ความละเอียดดั้งเดิมที่ tty จุดประสงค์ของฉันที่นี่คือเพื่อทำความเข้าใจว่าระบบทำงานอย่างไรกับ KMS นอกจากนี้ยังช่วยครอบคลุมสิ่งต่าง ๆ เช่น .. การเลื่อน KMS เร็วขึ้นหรือไม่ ยูทิลิตี้อย่าง fbterm และ fbida ทำงานเหมือนกันหรือไม่? เสถียรภาพดีขึ้นหรือไม่

คำตอบ:


6

อย่างแรกเลย, โดยพื้นฐานแล้วมีสองประเภทของไดรเวอร์เฟรมเฟรมคลาสสิก:

  • ไดรเวอร์ฮาร์ดแวร์และเฟิร์มแวร์ทั่วไป (เช่น 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

3

KMS ตั้งค่าความละเอียดการแสดงผลและความลึกในพื้นที่เคอร์เนลมากกว่าพื้นที่ผู้ใช้ ดังนั้นใช่มันแทนที่มัน มันช่วยให้การแก้ปัญหาพื้นเมืองใน framebuffer

การตั้งค่าโหมดเคอร์เนล


4
บทความ Wiki เกี่ยวกับ KMS หาง่าย แต่คำอธิบายนั้นแย่มาก KMS สามารถแทนที่ fb ได้อย่างไรและในขณะเดียวกันก็เปิดใช้งานได้อย่างไร fb รองรับการแก้ปัญหาแบบเนทีฟแล้วสิ่งที่แตกต่างกันคือ ยูทิลิตี้ fb ทำงานร่วมกับ KMS หรือไม่
user5184

ฉันไม่คิดว่า framebuffer รองรับความละเอียดดั้งเดิมโดยเฉพาะอย่างยิ่งเมื่อจอภาพเป็นแบบจอกว้าง ตัวอย่างเช่นความละเอียดดั้งเดิมของจอ LCD ของฉันคือ 1680x1050 อย่างไรก็ตาม framebuffer ตรวจพบความละเอียด 1280x1024 เท่านั้น
LiuYan 刘研
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.