พีซีวิดีโอฮาร์ดแวร์ที่ทันสมัยรองรับโหมดข้อความ VGA ใน HW หรือไม่ BIOS เลียนแบบ (ด้วยโหมดการจัดการระบบ) หรือไม่


10

สิ่งที่มันเกิดขึ้นในฮาร์ดแวร์คอมพิวเตอร์ที่ทันสมัย booted ใน 16 บิตมรดกโหมด BIOS MBR เมื่อคุณเก็บไบต์เช่น'1'(0x31) ลงในข้อความ VGA (โหมด 03) framebuffer ที่อยู่ทางกายภาพเชิงเส้นB8000? วิธีช้าเป็นmov [es:di], eaxร้านด้วยMTRRสำหรับภูมิภาคชุด UC? (การทดสอบทดลองบนแล็ปท็อป Kaby Lake iGPU หนึ่งตัวบ่งชี้ว่า clflushopt บน WC นั้นมีความเร็วเท่ากับ UC สำหรับหน่วยความจำ VGA โดยประมาณ แต่หากไม่มี clflushopt การจัดmovเก็บไปยังหน่วยความจำ WC จะไม่ออกจาก CPU และไม่อัปเดตหน้าจอเลย .)

หากไม่ใช่ SMI สำหรับทุกร้านมีวิธีใดที่จะประมาณค่าใช้จ่ายนี้สำหรับหน่วยความจำ WB ในพื้นที่ผู้ใช้สำหรับการทดลองประสิทธิภาพโดยไม่ต้องบูตเครื่องใหม่ในโหมดจริงหรือไม่ (เช่นการใช้หน้า BSS เป็น framebuffer แบบหลอกที่ไม่ได้แสดงที่ใดก็ได้)

ตัวอักษรที่สอดคล้องกันปรากฏขึ้นบนหน้าจอในการรีเฟรชครั้งต่อไป แต่ฮาร์ดแวร์สแกนเอาท์จริงๆแล้วอ่านว่า ASCII ถ่านจาก VRAM (หรือ DRAM สำหรับ iGPU) และการแมปไปยังสัญลักษณ์ตัวอักษรบิตแมปในทันที? หรือมีการสกัดกั้นซอฟต์แวร์ในแต่ละร้านค้าหรือหนึ่งครั้งต่อ vblank ดังนั้นฮาร์ดแวร์ที่แท้จริงเท่านั้นที่ต้องจัดการกับ framebuffer บิตแมป?


การบู๊ต BIOS ดั้งเดิมเป็นที่รู้จักกันดีในการใช้ System Management Mode (SMM)เพื่อจำลอง USB kbd / mouse เป็นอุปกรณ์ PS / 2 ฉันสงสัยว่ามันยังใช้สำหรับเฟรมข้อความโหมด VGA ฉันคิดว่ามันจะใช้สำหรับ VGA I / O พอร์ตสำหรับโหมดการตั้งค่า แต่มันก็เป็นไปได้ว่า framebuffer ข้อความได้รับการสนับสนุนโดยฮาร์ดแวร์ อย่างไรก็ตามคอมพิวเตอร์ส่วนใหญ่ใช้เวลาตลอดเวลาในโหมดกราฟิกดังนั้นการละทิ้งการสนับสนุน HW สำหรับโหมดข้อความดูเหมือนว่าผู้ขายอาจต้องการทำ (OTOH บล็อกนี้แสดงให้เห็นว่าตัวควบคุม verilog VGA แบบ homebrew สามารถใช้โหมดข้อความได้อย่างง่ายดาย)

ฉันสนใจระบบที่ใช้ iGPU ใน Intel Skylakeแต่จะสนใจ iGPUs ก่อนหน้า / ต่อมาจาก Intel และ AMD และ GPU แยกหรือเก่า

(รวมถึงผู้จำหน่ายอื่น ๆ นอกเหนือจาก AMD และ NVidia มีเมนบอร์ด Skylake บางรุ่นที่มีสล็อต PCI ไม่ใช่ PCIe หากไดรเวอร์เฟิร์มแวร์ GPU สมัยใหม่จำลองโหมดข้อความอาจสันนิษฐานว่ามีการ์ดวิดีโอ PCI เก่าที่มีโหมดข้อความ VGA ฮาร์ดแวร์และอาจเป็นการ์ดดังกล่าว สามารถทำให้ร้านค้าเป็นเพียงธุรกรรม PCI แทน SMI)

เดสก์ท็อปของฉันคือ i7-6700k ในโทรศัพท์มือถือ Asus Z170 Pro Gaming ไม่มีการ์ดเสริมเพียงแค่ iGPU พร้อมจอมอนิเตอร์ 1920x1200 บนเอาต์พุต DVI-D ฉันไม่ทราบรายละเอียดของ Kaby Lake i5-7300HQ ระบบ @Eldan กำลังทำการทดสอบเฉพาะรุ่น CPU


ผมพบว่าPhoenix BIOS ของUS20120159520 สิทธิบัตรจาก 2011 , เผื่อวิดีโอแบบเดิมโดยใช้ UEFI แทนที่จะต้องการให้ผู้จำหน่ายฮาร์ดแวร์วิดีโอจัดหาทั้ง UEFI และตัวเลือกรอมโหมดจริง 16 บิตเนทิฟพวกเขาเสนอไดรเวอร์ VGA โหมดจริง ( int 10hฟังก์ชั่นและอื่น ๆ ) ที่เรียกใช้ไดรเวอร์วิดีโอ UEFI ที่ผู้จำหน่ายจัดจำหน่ายผ่าน SMM hooks

บทคัดย่อ
[... ] ROM ตัวเลือกวิดีโอทั่วไปแจ้งให้ทราบถึงไดรเวอร์ SMM วิดีโอทั่วไปของคำขอบริการวิดีโอ การแจ้งเตือนดังกล่าวอาจดำเนินการโดยใช้ซอฟต์แวร์การจัดการระบบขัดจังหวะ (SMI) เมื่อได้รับการแจ้งเตือนไดรเวอร์วิดีโอ SMM ทั่วไปจะแจ้งให้ทราบถึงไดรเวอร์วิดีโอ UEFI บุคคลที่สามของคำขอวิดีโอ โปรแกรมควบคุมวิดีโอของ บริษัท อื่นให้บริการวิดีโอที่ร้องขอไปยังระบบปฏิบัติการ ด้วยวิธีนี้ไดรเวอร์กราฟิก UEFI ของบุคคลที่สามอาจรองรับระบบปฏิบัติการที่หลากหลายแม้กระทั่งระบบที่ไม่สนับสนุนโปรโตคอลการแสดงผลแบบ UEFI

คำอธิบายส่วนใหญ่ครอบคลุมการจัดการการint 10hโทรและสิ่งต่าง ๆ เช่นที่เห็นได้ชัดว่าดักจับผ่าน IVT ดังนั้นจึงสามารถเรียกใช้รหัสที่กำหนดเองได้อย่างง่ายดายซึ่งก่อให้เกิด SMI ตามวัตถุประสงค์ ส่วนที่เกี่ยวข้องคือสิ่งที่พวกเขาอธิบายสำหรับร้านค้าโดยตรงใน framebuffer โหมดข้อความซึ่งจำเป็นต้องทำงานแม้สำหรับรหัสที่ไม่เรียกใช้ซอฟต์แวร์หรือฮาร์ดแวร์ขัดจังหวะ (นอกเหนือจาก HW ที่เรียกใช้ SMI ในร้านค้าดังกล่าวซึ่งพวกเขากล่าวว่าสามารถใช้งานได้หากได้รับการสนับสนุน)

การสนับสนุนบัฟเฟอร์ข้อความ

[0066] ใน embodiments บางการใช้งานอาจจัดการกับข้อความ VGA ของบัฟเฟอร์โดยตรง ในศูนย์รวมดังกล่าวไดรเวอร์วิดีโอ SMM ทั่วไป 130 สนับสนุนสิ่งนี้ในหนึ่งในสองวิธีขึ้นอยู่กับว่าฮาร์ดแวร์จัดเตรียมการดักจับ SMI บนการเข้าถึงการอ่าน / เขียนไปยังพื้นที่หน่วยความจำ 740 KB-768 KB (ซึ่งบัฟเฟอร์ข้อความอยู่)

[0067] เมื่อการวางกับ SMI พร้อมใช้งานฮาร์ดแวร์จะสร้าง SMI บนการเข้าถึงเพื่ออ่านหรือเขียนแต่ละครั้ง การใช้ที่อยู่กับดักของกับดัก SMI คอลัมน์ข้อความและแถวที่แน่นอนอาจถูกคำนวณและแถวและคอลัมน์ที่เกี่ยวข้องในการเข้าถึงหน้าจอข้อความเสมือน

อีกทางหนึ่งหน่วยความจำปกติเปิดใช้งานสำหรับภูมิภาคนี้และโดยใช้ SMI เป็นระยะ ๆ ไดรเวอร์วิดีโอ SMM ทั่วไป 130 จะสแกนหาการเปลี่ยนแปลงในบัฟเฟอร์ข้อความฮาร์ดแวร์ที่จำลองและปรับปรุงหน้าจอข้อความเสมือนที่สอดคล้องกันซึ่งดูแลโดยไดรเวอร์วิดีโอ ในทั้งสองกรณีเมื่อตรวจพบการเปลี่ยนแปลงอักขระจะถูกวาดใหม่บนหน้าจอข้อความเสมือน

นี่เป็นเพียงสิทธิบัตรของผู้ขายไบออสรายหนึ่งและไม่ได้บอกเราว่าฮาร์ดแวร์ส่วนใหญ่ใช้งานได้จริงหรือไม่ เป็นหลักยืนยันว่ามีฮาร์ดแวร์บางอย่างที่สามารถดักจับในร้านค้าในช่วงนั้นได้ (เว้นแต่เป็นเพียงความเป็นไปได้สมมุติที่พวกเขาตัดสินใจที่จะครอบคลุมในสิทธิบัตรของพวกเขา)

สำหรับกรณีการใช้งานที่ฉันมีอยู่ในใจการวางกับการรีเฟรชหน้าจอจะเร็วกว่าการวางกับทุกร้านอย่างมากฉันจึงอยากรู้ว่าฮาร์ดแวร์ / เฟิร์มแวร์ตัวใดทำงานได้ดี


แรงจูงใจสำหรับคำถามนี้

การเพิ่มประสิทธิภาพตัวนับทศนิยม ASCII ที่เพิ่มขึ้นใน Video RAM ในรุ่นที่ 7 Intel Core - จัดเก็บตัวเลขใหม่สำหรับตัวนับข้อความ ASCII ไปยังหน่วยความจำวิดีโอไบต์เดียวกันไม่กี่ไบต์

ฉันทดสอบรุ่นของรหัสในพื้นที่ผู้ใช้แบบ 32 บิตภายใต้ Linux ในหน่วยความจำ WB โดยหวังว่าจะประมาณสถานการณ์ด้วยmovntiวิธีที่แตกต่างกันในการทำให้ซีพียูซิงค์บัฟเฟอร์ WC กับ RAM วิดีโอหลังจากแต่ละร้าน (หรืออาจเป็นครั้งคราวใน ตัวจับเวลาขัดจังหวะ) แต่นี่ไม่ใช่ความจริงหากสถานการณ์ bootloader แบบเรียลไทม์ไม่ได้จัดเก็บไว้ที่ DRAM แต่เป็นการกระตุ้น SMI แทน

ในหน่วยความจำ WB ล้างmovntiร้านค้าที่มีค่อนข้างเร็วกว่าการล้างด้วยlock xor byte [esp], 0 clflushoptแต่ @Eldan รายงานว่าไม่มีการปรับปรุงความเร็วสำหรับผู้ที่อยู่ในหน่วยความจำ VGA หลังจากเขียนโปรแกรม MTRR เพื่อให้เป็น WC (และความเร็วเดียวกันกับต้นฉบับที่ทำตามร้านค้าปกติโดยระบุว่าค่าเริ่มต้นคือ framebuffer VGA คือ UC BIOSes รุ่นเก่าบางตัวมีตัวเลือกในการสร้างหน่วยความจำ VGA WCซึ่งพวกเขาเรียกว่า USWC = Uncached Speculative Write Combining)

มันไม่ได้เป็นปัญหาที่แท้จริงของโลกดังนั้นฉันไม่ได้มองหาวิธีการแก้ปัญหาที่เกิดขึ้นจริง ; แม้ว่ามันจะน่าสนใจที่จะทราบว่าการจัดเก็บพิกเซลพิกเซลด้วยตนเองในโหมดกราฟิก VGA อาจเร็วกว่ามาก


สรุป

  1. ระบบที่ทันสมัยจริง ๆ / ใด ๆ เรียก SMI ในทุก ๆ ร้านไปที่ framebuffer โหมดข้อความหรือไม่?
  2. ถ้าไม่เราสามารถประมาณค่า WC store + clflush กับ framebuffer โดยใช้ movnti + บางอย่างในพื้นที่ผู้ใช้ในหน่วยความจำ WB ได้หรือไม่? ดังนั้นเราจึงสามารถโปรไฟล์กับperfเคาน์เตอร์วัดประสิทธิภาพได้อย่างง่ายดาย
  3. หาก BIOSes และ / หรือฮาร์ดแวร์ที่แตกต่างกันใช้กลยุทธ์ที่ต่างกันกลยุทธ์เหล่านั้นคืออะไร (ฉันไม่ต้องการรายละเอียดเพียงระดับสูงเช่น "SMI ทุก vblank เพื่อซิงค์ VGA framebuffer กับฮาร์ดแวร์ framebuffer จริง")
  4. การ์ดวิดีโอ PCIe หรือ PCI ที่มี textmode เป็นฮาร์ดแวร์ VGA จะเร็วกว่า GPU ที่รวมอยู่ในตัวหรือไม่ ฉันเดาว่าธุรกรรมการเขียน PCIe จริงจะช้ากว่าการรอให้ร้านค้าเข้าสู่ DRAM แต่การเขียน PCIe นั้นจะถูกกว่า SMI ในทุกร้าน ballpark / ลำดับการเปรียบเทียบขนาดน่าสนใจ

คำถามเหล่านี้เกี่ยวข้องกันมาก แต่ฉันสามารถแยกคำถามนี้ออกได้หากไม่มีการเหลื่อมซ้อนกันอย่างที่คาดไว้


ไม่มีตัวนับประสิทธิภาพสำหรับ SMIs หรือไม่
prl

@prl: ใช่ฉันคิดอย่างนั้น ถ้าฉันเขียน bootloader ซึ่งตั้งโปรแกรมตัวนับ perf และรวบรวม + พิมพ์พวกเขาหลังจากการทดสอบการทำงานและจากนั้นรีบูตเดสก์ท็อปของฉันเพื่อเรียกใช้ฉันสามารถหาคำตอบสำหรับเดสก์ท็อปของฉันเอง ไม่สามารถใช้งานได้perfเนื่องจาก Linux ยังไม่ได้บูต การประเมินเวลาแฝง SMI (การจัดการระบบขัดจังหวะ) บนเครื่อง Linux-CentOS / Intelมีรายละเอียดบางอย่างเกี่ยวกับวิธีการนับ SMIs
Peter Cordes

1
@prl: จริง ๆ แล้วมันง่ายกว่าในการนับ SMIs: เห็นได้ชัดว่ามี MSR ไม่ใช่เคาน์เตอร์ที่สมบูรณ์แบบดังนั้นเพียงแค่ใช้ RDMSR MSR_SMI_COUNT=0x34โดยไม่ต้องเขียนโปรแกรมตัวนับก่อน
Peter Cordes

นั้นง่ายกว่าความคิดอื่น ๆ ของฉันซึ่งใช้เทคนิคที่อธิบายไว้ในส่วน 34.15 เพื่อตรวจหา SMIs
prl

@prl: 34.15 ของ vol.3 SDM ของ Intel ฉันคิดว่าคุณหมายถึงอะไร xem.github.io/minix86/manual/intel-x86-and-64-manual-vol3/ …ดูเหมือนว่าจะอธิบายกรณีการนับที่ SMM เป็นสาเหตุหรือเกี่ยวข้องกับ VMEXIT ไม่ใช่แค่ SMM เก่า ๆ ใน "โลหะเปลือย" (หรือโลหะเปลือยปลอมที่บู๊ต BIOS ดั้งเดิมนำเสนอผ่านกับดัก SMM ... ) อย่างไรก็ตามถ้าฉันมีเวลาในครั้งต่อไปฉันไม่รังเกียจที่จะรีบูตเดสก์ท็อปฉันอาจเขียน bootloader แบบ 16 บิตและทดสอบบนระบบของฉัน ... หรือหวังว่าคนอื่นจะรู้สึกกระตือรือร้นและทดสอบกับฉัน
Peter Cordes

คำตอบ:


7

ระบบที่ทันสมัยจริง ๆ / ใด ๆ เรียก SMI ในทุก ๆ ร้านไปที่ framebuffer โหมดข้อความหรือไม่?

สำหรับการ์ดแสดงผลฉันสงสัยมาก ผู้ผลิตการ์ดแสดงผลมีตรรกะ "รับข้อมูลพิกเซลจากคุณสมบัติชาร์ต +" ที่สร้างไว้ในฮาร์ดแวร์มาตั้งแต่ปี 1980 (ก่อนหน้านี้เป็น VGA และไม่ได้เปลี่ยนไปมากนักตั้งแต่ CGA) และตัดและวางตรรกะนั้นลงในการออกแบบแต่ละรุ่นใหม่ .

สำหรับสิ่งที่ไม่ใช่การ์ดแสดงผลเลย (เช่นเครื่องมือการจัดการระบบระยะไกลที่ใช้ LAN) ฉันไม่รู้ แต่ไม่สงสัย (บ่อยครั้งที่พวกเขาใช้ CPU การจัดการพิเศษมากกว่า CPU หลัก / s เพื่อให้ทำงานได้แม้ว่าคอมพิวเตอร์จะเป็น ปิด").

ถ้าไม่เราสามารถประมาณค่า WC store + clflush กับ framebuffer โดยใช้ movnti + บางอย่างในพื้นที่ผู้ใช้ในหน่วยความจำ WB ได้หรือไม่?

หากคุณไม่ได้อยู่ในพื้นที่ผู้ใช้คุณสามารถเปลี่ยน MTTRs (ใน CPU ทั้งหมด - MTRR ต้องตรงกันและมีลำดับพิเศษที่เกี่ยวข้อง) เพื่อให้พื้นที่ของ RAM "uncached"; หรือใช้ PAT ในตารางหน้า (ง่ายกว่า messing กับ MTRRs โดยเฉพาะถ้าคุณกำลังใช้การเพจอยู่ดี แต่มีพฤติกรรมที่แตกต่างกันเล็กน้อยเนื่องจากยังต้องการความต่อเนื่องของแคช) หากคุณอยู่ในพื้นที่ของผู้ใช้คุณจะต้องพึ่งพาสิ่งที่ OS / เคอร์เนลจัดเตรียมไว้ให้และ (ขึ้นอยู่กับระบบปฏิบัติการที่เป็น) ระบบปฏิบัติการ / เคอร์เนลอาจไม่มีวิธีการใด ๆ เลย

อย่างไรก็ตาม; แม้ว่าคุณจะหาวิธีที่จะทำให้แรม (พื้นที่) ไม่ได้ล้างมันก็ยังจะไม่คล้ายกันมากเพราะคุณจะเขียนสิ่งที่แนบกับตัวควบคุมหน่วยความจำใน CPU โดยตรง (CPU ตัวนั้นสามารถเขียนได้อย่างรวดเร็วมาก ) แทนที่จะพูดกับบางสิ่งที่ปลายอีกด้านของลิงก์ PCI (ซึ่งจะมีความหน่วงแฝงที่สูงขึ้นและแบนด์วิดธ์ที่ต่ำกว่าจากด้านข้างของ CPU) แม้สำหรับวิดีโอรวม (ซึ่งในทางเทคนิคแล้วมันเป็นชิปแรมเดียวกันในตอนท้าย) เขียนไปยัง VRAM ผ่านเส้นทางที่แตกต่างกันมาก (ขึ้นอยู่กับการแมปใหม่ / GART / การเพจในการ์ดวิดีโอซึ่งได้รับผลกระทบจากการลงทะเบียน VGA การลงทะเบียน VGA หน้ากากบิต / เครื่องบิน VGA ฯลฯ )

การ์ดวิดีโอ PCIe หรือ PCI ที่มี textmode เป็นฮาร์ดแวร์ VGA จะเร็วกว่า GPU ที่รวมอยู่ในตัวหรือไม่

สำหรับการเขียนจาก CPU ไปยัง VRAM; โดยทั่วไปวิดีโอแบบรวมจะเร็วกว่าการ์ดแบบแยก (อย่างน้อยสำหรับการเขียนแบบธรรมดาจาก CPU ไปยังบัฟเฟอร์เฟรมแบบเส้นตรงซึ่งไม่มีส่วนเกี่ยวข้องกับ "การเขียนตรรกะ" ของ VGA)

สำหรับการประเมิน ballpark ที่หยาบมาก ฉันคาดว่าการเขียน RAM ครั้งเดียวจะอยู่ที่ประมาณ 150 รอบและการเขียน PCI เพียงครั้งเดียวจะใกล้ถึง 1,000 รอบ สำหรับ SMI ฉันคาดหวังความล่าช้าสักสองสามร้อยรอบก่อนที่ SMI จะมาถึง CPU จากนั้นค่าใช้จ่ายของ CPU pip flush จากนั้นประมาณ 500 รอบเพื่อบันทึกสถานะของ CPU (และสถานะการโหลดเดียวกันบนเส้นทางกลับ) จากนั้นรหัสของเฟิร์มแวร์จะต้องค้นหาสาเหตุของ SMI (อีกไม่กี่ร้อยรอบ) ก่อนที่มันจะรู้ว่ามันเป็นจดหมายจาก VRAM และไม่ใช่อย่างอื่น จากนั้นจะต้องตรวจสอบสถานะ CPU ที่บันทึกไว้และค้นหาและถอดรหัสคำสั่งที่ทำการเขียน (เพราะไม่สามารถรู้ได้ว่าข้อมูลใดกำลังถูกเขียนถ้าเป็นไบต์ / คำ / dword เขียน ฯลฯ ) ขณะที่พิจารณา บัญชีซีพียูก่อนหน้านี้ (โหมดซีพียูที่อยู่ในขนาดรหัสXADDฯลฯ ) ถัดไปก็จะต้องวิเคราะห์สถานะของ (จำลอง) VGA register (โหมดเขียน, เขียนมาสก์, ระนาบเปิดใช้งาน, อะไรก็ตามที่ควบคุมว่าธนาคารขนาด 64 KiB ถูกแมปเข้าไปในพื้นที่ดั้งเดิม, ความสูงของตัวอักษร, ... ) โดยทั่วไป; สำหรับการจำลอง SMI ของการเขียนเฟรมบัฟเฟอร์ของโหมดข้อความ ฉันคาดหวังว่าจะใช้เวลาหลายหมื่นรอบก่อนที่รหัสของเฟิร์มแวร์จะมองเห็นรายละเอียดเล็กน้อย แต่สำคัญฝังอยู่ในความซับซ้อนจำนวนมากทำให้มันทำสิ่งผิดและเสียอย่างผิดปกติ

หมายเหตุอื่น ๆ

ฉันพบสิทธิบัตรของ Phoenix BIOS US20120159520 จากปี 2011 เลียนแบบวิดีโอรุ่นเก่าโดยใช้ uefi

ฉันสงสัยว่าสิ่งนี้เกิดขึ้นเพราะฉันสงสัยว่ามันสามารถใช้งานได้ มีสิ่งต่าง ๆ มากมาย (ธรรมดาและคลุมเครือ) มากเกินไปที่คุณสามารถทำได้ด้วยอินเทอร์เฟซแบบดั้งเดิม (เช่นตรวจสอบการรีเฟรชแนวตั้งการตั้งค่าโหมดวิดีโอที่ไม่ได้มาตรฐานเช่น "โหมด X", ซอกับ "เริ่มต้นการแสดงผล" ใช้ "ข้อมูล CRTC" ใน VBE เพื่อเปลี่ยนการตั้งเวลาวิดีโอ ฯลฯ ) ที่ UEFI ไม่รองรับและไม่สามารถทำได้ผ่าน โปรแกรมควบคุมวิดีโอของบุคคลที่สามสำหรับ UEFI

แต่ผู้ผลิตการ์ดแสดงผลไม่ได้กังวลกับการจัดหาไดรเวอร์ UEFI เป็นเวลาประมาณ 10 ปีและเฟิร์มแวร์ UEFI ใช้อินเทอร์เฟซแบบดั้งเดิมเพื่อเลียนแบบบริการ UEFI (มักจะทำให้บูตปลอดภัยในขณะที่อยู่) จนกระทั่งเกือบทุกอย่างเป็น UEFI อยู่ดี

ฉันคิดว่ามัน (SMM) ใช้สำหรับพอร์ต VGA I / O สำหรับการตั้งค่าโหมด

ฉันไม่คิด สิ่งเดียวที่เกี่ยวข้องกับวิดีโอที่ฉันสงสัยว่า SMM อาจถูกใช้เพื่อควบคุมความสว่างของแบ็คไลท์ของหน้าจอในแล็ปท็อป (โดยเฉพาะสำหรับแล็ปท็อปรุ่นเก่าและโดยเฉพาะอย่างยิ่งสำหรับ "กิจกรรมเปิด / ปิดฝา") จะใช้เวลามากกว่า).

.. ออกจากการสนับสนุน HW สำหรับโหมดข้อความดูเหมือนว่าผู้ขายอาจต้องการทำ

ฉันยังคงเชื่อว่าการลบ (ในที่สุดหลังจากผ่านช่วงการเปลี่ยนภาพ "ไฮบริด BIOS + UEFI") ที่ยาวเกิน 30 ปีของระเบียบมรดกสะสม (A20, VGA, PS / 2, PIT, PIC, ... ) จากฮาร์ดแวร์ เป็นหนึ่งในเหตุผลหลักที่ผู้ผลิตฮาร์ดแวร์ (Intel) ได้รับ / ผลักดันให้มีการนำ UEFI ไปใช้


ดูเหมือนว่าช่วง VGA แบบดั้งเดิมนั้นเพิ่งถูกถอดรหัสโดยชิ้นส่วนแคช L3 โดยตรงไปยังตัวประมวลผลกราฟิก, DMI หรือลิงก์ PCIe โดยอิงตามแกนพวงมาลัย VGA ในการลงทะเบียนการกำหนดค่า ฉันไม่แน่ใจว่ากราฟิกโปรเซสเซอร์จะทำอย่างไรกับช่วงนี้หากไม่มี VGA อาจเป็นเพียงบัฟเฟอร์และแปลเป็นเฟรมเฟรม HDMI และส่งไปยังท่อ HDMI FDI แต่ฉันไม่มีเงื่อนงำ
Lewis Kelsey

ขอบคุณฉันมองข้ามความเป็นไปได้ที่จะยังคงได้รับการรองรับ HW แต่จะผ่านเส้นทางที่ช้ากว่าในเอเจนต์ระบบมากกว่าแค่ตรงไปที่ตัวควบคุมหน่วยความจำ และเอาชนะควบคุมหน่วยความจำเขียนหลอมรวมเพื่อให้เราในคอขวดที่เกิดขึ้นจริง DRAM ทางเข้าไม่ได้เป็นเพียงหลัก - รถบัสแหวน> ควบคุมหน่วยความจำผ่านสามารถอธิบาย VGA เขียนโดยสิ้นเชิงอำนาจเหนือเวลาทำงานและซ่อนความแตกต่างใด ๆ ระหว่าง -> uncore clflushoptเทียบlock xor byte [esp], 0สำหรับการเรียกวูบวาบ
Peter Cordes

จุดของคุณเกี่ยวกับการเลียนแบบ x86 ในโหมดใดก็ได้เพื่อให้ได้ข้อมูลร้านค้าเป็นสิ่งที่ดีซึ่งทำให้ไม่น่าเชื่ออย่างเป็นธรรมและประสิทธิภาพจะไม่เป็นที่ยอมรับหรืออย่างน้อยก็สังเกตเห็นได้สำหรับเลื่อนบนคอนโซลข้อความที่ใช้โหมดข้อความ VGA แทน ไม่ว่า Linux จะทำอะไรตามค่าเริ่มต้นในทุกวันนี้ด้วยคอนโซล framebuffer ฉันลืมว่าโหมดข้อความ VGA ต้องทำงานต่อไปแม้ว่าระบบปฏิบัติการจะนำคอร์ทั้งหมดมาใช้กับระบบมัลติคอร์
Peter Cordes

4

การอ่านเอกสารข้อมูลทางเทคนิคต่างๆของ Intel CPU และ Platform Controller Hub (PCH) นั้นไม่ปรากฏว่ามีการใช้งานฮาร์ดแวร์ที่จำเป็น ดูเหมือนจะไม่มีวิธีใดในการสร้าง SMI (การจัดการระบบขัดจังหวะ) ในการตอบสนองต่อการเข้าถึงโปรเซสเซอร์ของบัฟเฟอร์เฟรม VGA (ที่อยู่ทางกายภาพ 0xA0000 - 0xBFFFF)

ตัวควบคุมหน่วยความจำใน CPU จะกำหนดเส้นทางเข้าถึงเฟรมบัฟเฟอร์ VGA ไปยังคอนโทรลเลอร์กราฟิกแบบรวมพอร์ต PCI Express ที่เชื่อมต่อโดยตรงกับ CPU หรืออินเตอร์เฟส DMI ที่เชื่อมต่อ CPU กับ PCH ในขณะที่เป็นไปได้ส่วนเส้นทางเฟรมบัฟเฟอร์ VGA แยกต่างหากนี้ปรากฏขึ้นเพื่อสนับสนุนอุปกรณ์ MDA (อะแดปเตอร์การแสดงผลขาวดำ) แยกต่างหากเท่านั้น คอนโทรลเลอร์กราฟิกแบบรวมไม่ได้รับการบันทึกไว้อย่างดีดังนั้นจึงเป็นไปได้ว่ามันสามารถกำหนดค่าให้สร้าง SMI บนการเข้าถึงบัฟเฟอร์เฟรม VGA ได้ ไม่ว่าในกรณีใดมันจะไม่ทำงานกับกราฟิกแบบแยก

Intel PCH นั้นดูเหมือนจะไม่ได้รับการสนับสนุนสำหรับการสร้าง SMIs ในการตอบสนองต่อการเข้าถึงบัฟเฟอร์เฟรม VGA นี่จะเป็นสถานที่ที่เป็นธรรมชาติมากที่สุดเนื่องจากมีการรองรับการสร้าง SMIs เพื่อตอบสนองต่อการเข้าถึง I / O ไปยังคอนโทรลเลอร์คอนโทรลเลอร์แป้นพิมพ์คอนโทรลเลอร์ IDE และอุปกรณ์ดั้งเดิมอื่น ๆ เป็นไปได้ว่ามีคุณสมบัติที่ไม่มีเอกสารที่ทำสิ่งนี้ แต่ไม่รวมอยู่ในรายการแหล่งที่มาของ SMI ที่เป็นไปได้ที่กำหนดไว้ในเอกสารข้อมูล PCH

ในทางทฤษฎีแล้วมันจะเป็นไปได้สำหรับผู้ผลิตเมนบอร์ดในการเชื่อมต่ออุปกรณ์ VGA ปลอมกับ PCH ผ่านพอร์ต PCI Express จากนั้นสร้าง SMIs โดยใช้ PCH GPIO pin อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้งานได้จริง เมื่อ CPU ได้รับ SMI ก็สามารถย้ายไปที่การดำเนินการคำสั่งอื่น ๆ และจะไม่สามารถตรวจสอบสถานะของ CPU ในขณะที่การเข้าถึงเฟรมบัฟเฟอร์

(ปัญหาที่คล้ายกันเกิดขึ้นกับการจำลอง SoundBlaster 16 บน SoundBlaster Live มันจะสร้าง PCI SERR # เมื่อพอร์ต SoundBlaster เดิมได้รับการเข้าถึง NMI จะมาถึงคำสั่งถัดไปหรือถัดไป)


ขอบคุณสำหรับการตรวจสอบว่า สิ่งนี้ไม่ได้แยกเอาตัวจัดการ SMI หนึ่งครั้งต่อการซิงค์ / การแสดงผลเฟรมข้อความ VGA แบบ vblank เป็นตัวเฟรมเฟรมพิกเซลจริง outการเรียนการสอนเป็นชนิดของการซิงโครและส่วนใหญ่ serializing แต่ร้าน UC ยังคงผ่านไปบัฟเฟอร์ร้านและจะได้เกษียณก่อนที่จะกระทำการจัดเก็บที่ผมคิดว่า หากการoutเข้าถึงพอร์ตเป็นปัญหาใน P4 ร้านค้าธรรมดาจะเป็นหายนะ
Peter Cordes

หากระบบใช้ตัวจัดการ SMI เพื่อสแกนกรอบข้อความตัวอักษรแสดงว่าสามารถแคช WB ได้และยังคงอัพเดตหน้าจอแม้จะcliปิดการใช้งานอินเตอร์รัปต์ปกติ นั่นจะเป็นสิ่งที่ทดสอบได้เราสามารถใช้เพื่อแยกแยะหรือยืนยันความเป็นไปได้อื่น ๆ
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.