ไม่มีอุปกรณ์ framebuffer: วิธีการเปิดใช้งานมัน?


23

ฉันกำลังพยายามทำให้การ์ดรับจูนเนอร์ PCMCIA ทำงานในบ้านเซิร์ฟเวอร์ที่ไม่มีหัวของฉันโดยใช้ Debian Squeeze ตอนนี้เมื่อฉันมีปัญหาใหญ่มากในการค้นหาบรรทัดคำสั่งที่ถูกต้องในการจับภาพ transcode จบสตรีมวิดีโอไปยังเครือข่ายโดยใช้ VLC ฉันตัดสินใจที่จะทำทีละขั้นตอนและทำงานเป็นอันดับแรกในเอาต์พุตท้องถิ่น

นั่นคือที่มาของปัญหา: ดูเหมือนจะไม่มีอุปกรณ์ framebuffer (/ dev / fb0) สำหรับการเข้าถึงการแสดงกราฟิกบนหน้าจอที่แนบมา! และแน่นอนฉันสังเกตเห็นว่าฉันไม่มีอิมเมจของเพนกวิน Linux ในตอนบูต (ไม่ได้สนใจมาก่อนเมื่อหน้าจอติดอยู่ แต่ปิดเสมอและเปิดคอมพิวเตอร์ตลอดเวลา)

เนื่องจากฉันไม่คุ้นเคยกับกราฟิก Linux ฉันต้องการที่จะเข้าใจ:

  • สิ่งนี้เกี่ยวข้องกับฮาร์ดแวร์เฉพาะของฉันหรือไม่ (ดูด้านล่าง) หรือเฉพาะกับ Debian Squeeze / a kernel version / ...
  • จำเป็นต้องติดตั้ง / โหลดด้วยตนเองหรือไม่?

ตอนนี้ข้อมูลทั่วไป:

  • คอมพิวเตอร์ไม่มีการ์ดกราฟิกแยกเฉพาะ แต่มีชิปเซ็ตกราฟิกฝังตัว (Intel G31 Express) ซึ่งฝังอยู่บนเมนบอร์ด (Gigabyte G31M-ES2L)
  • ฉันไม่ต้องการติดตั้งเซิร์ฟเวอร์ X ที่มีคุณสมบัติครบถ้วนเพียงแค่มีอุปกรณ์ framebuffer สำหรับการทดสอบนี้โดยเฉพาะ

มีข้อคิดเห็น / ความคิดเห็นเกี่ยวกับปัญหาหรือไม่


1
เมื่อคุณ/dev/fb0เริ่มใช้งานได้โปรดยอมรับคำตอบของฉัน ทำคนที่มีประสบการณ์จริงในหัวข้อที่ไม่ค่อยพบบ่อย ๆ ลองไปให้คำตอบ HQ พวกมันมีอยู่ใน UNIX-SE มันเป็นเรื่องที่ค่อนข้างธรรมดา
JM Becker

คำตอบ:


36

ฉันสามารถตอบคำถามของคุณได้ก่อนหน้านี้ทำงานกับ Linux FB

Linux ทำ FB อย่างไร

  1. ก่อนอื่นคุณต้องมีการสนับสนุน FrameBuffer ในเคอร์เนลของคุณซึ่งสอดคล้องกับฮาร์ดแวร์ของคุณ การแจกแจงที่ทันสมัยส่วนใหญ่มีการสนับสนุนผ่านโมดูลเคอร์เนล ไม่สำคัญว่า distro ของคุณจะได้รับการติดตั้งโลโก้บูทไว้ล่วงหน้าฉันไม่ได้ใช้และสนับสนุน FB

  2. ไม่สำคัญว่าคุณจะมีการ์ดแสดงผลเฉพาะตัว แต่จะทำงานได้ตราบใดที่ Hardware Framebuffer รองรับ

  3. คุณไม่จำเป็นต้องใช้ X ซึ่งเป็นสิ่งที่น่าดึงดูดที่สุดในการมี FrameBuffer บางคนไม่รู้ดีกว่าดังนั้นพวกเขาจึงสนับสนุนให้ X บางรูปแบบแก้ปัญหาความเข้าใจผิดของพวกเขา

  4. คุณไม่จำเป็นต้องทำงานกับ FB โดยตรงซึ่งหลายคนคิดผิด ห้องสมุดที่ยอดเยี่ยมมากสำหรับการพัฒนาด้วย FrameBuffer คือDirectFBแม้จะมีการสนับสนุนการเร่งความเร็วพื้นฐาน ฉันมักจะแนะนำให้ตรวจสอบอย่างน้อยถ้าคุณกำลังเริ่มต้นโครงการ FB แบบเต็มรูปแบบ (เว็บเบราว์เซอร์เกม GUI ... )

เฉพาะกับฮาร์ดแวร์ของคุณ

  1. ใช้ Vesa ทั่วไป framebuffer vesafbโมดูลของมันจะถูกเรียกว่า modprobe vesafbคุณสามารถโหลดได้ถ้าคุณมีมันใช้ได้กับคำสั่ง ดิสทริบิวชันมากมายตั้งค่าไว้ล่วงหน้าถูกปิดใช้งานคุณสามารถเช็คอิน/etc/modprobe.d/ได้ blacklist vesafbอาจจำเป็นต้องได้รับการคอมเม้นต์ด้วย#, ในblacklist-framebuffer.confหรือไฟล์บัญชีดำอื่น ๆ

  2. ตัวเลือกที่ดีที่สุดคือไดรเวอร์ KMS เฉพาะสำหรับฮาร์ดแวร์ สิ่งสำคัญสำหรับ Intel คือ Intel GMA ไม่แน่ใจว่าโมดูลนั้นมีชื่ออะไร คุณจะต้องอ่านข้อมูลจากเอกสาร distro ของคุณ นี่คือตัวเลือก FB ที่มีประสิทธิภาพดีที่สุดโดยส่วนตัวแล้วฉันจะไปที่ KMS ก่อนเสมอถ้าเป็นไปได้

  3. ใช้ไดร์เวอร์ FB เฉพาะของ Legacy Hardware ไม่แนะนำเนื่องจากบางครั้งก็มีบั๊ก ฉันจะหลีกเลี่ยงตัวเลือกนี้เว้นแต่สุดท้ายจำเป็น

ฉันเชื่อว่าสิ่งนี้ครอบคลุมคำถามของคุณทั้งหมดและควรให้ข้อมูลเพื่อให้/dev/fb0อุปกรณ์นั้นพร้อมใช้งาน อะไรที่เฉพาะเจาะจงมากขึ้นจะต้องมีรายละเอียดการกระจายและถ้าคุณมีประสบการณ์บ้าง RTFM ควรเป็นทุกสิ่งที่คุณต้องการ (หลังจากอ่านข้อความนี้)

ฉันหวังว่าฉันได้ช่วยคุณโชคดีที่คุณถามเกี่ยวกับหนึ่งในหัวข้อของฉัน! เรื่องนี้เป็นเรื่องที่ถูกทอดทิ้งใน UNIX-SE เนื่องจากไม่ใช่ทุกคน (รู้เท่าทัน) ใช้ Linux FrameBuffer

หมายเหตุ: UvesaFB หรือ VesaFB?

คุณอาจได้อ่านคนใช้uvesafbมากกว่าvesafbเพราะมันมีประสิทธิภาพที่ดีขึ้น โดยทั่วไปแล้วสิ่งนี้เป็นจริง แต่ไม่ได้อยู่ใน distro ที่ทันสมัยด้วยฮาร์ดแวร์ที่ทันสมัย หากฮาร์ดแวร์กราฟิกของคุณรองรับโหมดที่ได้รับการป้องกัน VESA (VESA> = 2.0) และคุณมีเคอร์เนลค่อนข้างน้อยvesafbตอนนี้เป็นตัวเลือกที่ดีกว่า


1
ขอบคุณมากสำหรับคำตอบของคุณ !!! มันเกินกว่าที่ฉันคาดหวังในแง่ของความลึกและคุณภาพ !! ฉันรู้สึกซาบซึ้งจริงๆเมื่อฉันสามารถหาโพสต์ / คำตอบเหมือนคุณเพราะพวกเขาไม่เพียง แต่ให้การแก้ปัญหาเฉพาะ แต่ที่สำคัญพวกเขาให้ข้อมูลทั่วไปเกี่ยวกับการทำงานภายในซึ่งจะเป็นประโยชน์กับผู้อื่นในสถานการณ์เดียวกันหรือที่เกี่ยวข้อง !!
Federico

1
เกี่ยวกับปัญหาของฉันฉันจะพิจารณาตามข้อมูลของคุณและรายงานกลับมาที่นี่ทันทีที่ฉันได้รับผลลัพธ์ที่น่าพอใจ ...
Federico

3
ดังนั้นฉันจึงลองmodprobe vesa(ซึ่งฉันจำได้ว่าเคยลองก่อนถามคำถามที่นี่) ซึ่งล้มเหลวเนื่องจากโมดูลไม่มีอยู่ในระบบของฉัน ( FATAL: Module vesafb not found.) -> จะต้องเข้าใจว่าสิ่งนี้เกี่ยวข้องกับฮาร์ดแวร์หรือการกระจาย Linux ของฉัน (Debian Squeeze) ) ข่าวดีก็คือมันใช้modprobe uvesafbงานได้และสร้าง/dev/fb0อุปกรณ์ อย่างไรก็ตามตอนนี้ฉันได้อ่านคำตอบของคุณแล้วฉันจะพยายามตั้งค่าสิ่งต่าง ๆ ให้ถูกต้องและค้นหาไดรเวอร์ KMS ...
Federico

1
ฉันโหวตให้ความคิดเห็นของคุณฉันตื่นเต้นที่ฉันสามารถช่วยได้! ในการพูดถึงความคิดเห็นล่าสุดของคุณคุณไม่ถูกต้องเกี่ยวกับวิธีแก้ปัญหา 2 คุณสามารถรับ KMS โดยไม่ใช้ X ได้ แต่อย่างที่ฉันบอกว่าคำตอบที่แท้จริงจมอยู่ในถังขยะ ชื่อของโมดูลฮาร์ดแวร์ที่ถูกต้องเรียกว่าinteldrmfbฉันพบมันทำวิจัยอย่างรวดเร็ว ฉันมี ATI เสมอดังนั้นการสนับสนุนที่เกี่ยวข้องกับ Intel GPU ไม่ใช่จุดแข็งของฉัน คุณอาจต้องติดตั้งแพคเกจสำหรับมัน แต่ฉันจะดูว่าฉันสามารถหา
JM Becker

1
โอ้เดี๋ยวก่อนฉันทำผิดพลาด ... ฉันเพิ่งตรวจสอบ Intel เน็ตบุ๊กของฉันและโมดูลคือi915แต่มันโหลด Framebuffer ที่รู้จักกันเป็น inteldrmfb คุณอาจต้องติดตั้งแพคเกจlibdrm-intel1หรือตรวจสอบว่ามีการติดตั้ง
JM Becker

10

ในที่สุดฉันก็ได้พบวิธีแก้ปัญหาของฉันแล้ว !!

ก่อนอื่นขอบคุณมากสำหรับทุกคนที่มีส่วนร่วมและโดยเฉพาะอย่างยิ่ง TechZilla และคำอธิบายโดยละเอียดที่เขาให้มาโดยที่ฉันคิดว่าฉันจะยอมแพ้ไปนานแล้ว!

ดังนั้นโดยพื้นฐานแล้วสิ่งที่ต้องทำคือเปิดใช้งานโหมดการตั้งค่า ( modeset=1) เมื่อi915โหลดเคอร์เนลโมดูล วิธีนี้สามารถทำได้ตามปกติ:

  • ผ่านพารามิเตอร์เคอร์เนลของ GRUB
  • ผ่านไฟล์ config ใน /etc/modprobe.d
  • หรือที่บรรทัดคำสั่ง:

    # rmmod i915
    # modprobe i915 modeset=1
    

ในความเป็นจริงคุณไม่จำเป็นต้องทำอะไรหากคุณติดตั้งแพคเกจxserver-xorg-video-intelซึ่งจะสร้างที่มี/etc/modprobe.d/i915-kms.conf options i915 modeset=1อย่างไรก็ตามหากมีคนไม่ต้องการติดตั้ง X (เช่นในกรณีของฉัน) KMS จะไม่เปิดใช้งานโดยอัตโนมัติซึ่งจะอธิบายว่าทำไมอุปกรณ์ FrameBuffer จึงไม่ถูกสร้างขึ้น ...


2
คุณควรยอมรับคำตอบของฉันเพราะ "ฉันจะเปิด KMS ด้วยการบีบได้อย่างไร" ไม่ใช่คำถามเริ่มต้นของคุณ ฉันเชื่อว่าฉันตอบคำถามแรกของคุณแล้วชี้ไปที่เส้นทางที่คุณตั้งใจไว้ อีกเหตุผลหนึ่งคือคุณจะได้รับคะแนนจากการให้คะแนนคนอื่น ๆ แม้ว่ามันจะดีต่อการให้รางวัลตัวเองหากไม่มีใครเข้ามาใกล้ในกรณีนี้มันก็ไม่สมเหตุสมผล แม้ว่าคุณจะเก็บคำตอบไว้หรือโพสต์ข้อมูลที่เป็นปัญหา ทั้งสองวิธีจะไม่เป็นไร ดีใจจริงๆที่ฉันช่วย! ฉันดีใจมากที่คุณได้โซลูชัน KMS ใช้งานได้ซึ่งควรเร็วกว่า VESA ธรรมดา
JM Becker

1
ฉันเพิ่งเปลี่ยนคำตอบที่คุณยอมรับกลับไปแล้ว! เป็นชนิดใหม่ที่นี่ฉันไม่ทราบว่าจะทำอย่างไร: ใส่คำตอบในคำถามในความคิดเห็นคำตอบที่คุณยอมรับหรือโพสต์เป็นคำตอบใหม่ ฉันคิดว่าด้วยการสร้างคำตอบที่ยอมรับใหม่ผู้คนจะอ่านคำถามก่อนจากนั้นคำตอบของคุณจะอยู่ด้านบนเนื่องจากมี upvotes มากกว่าและจากนั้นคำตอบของฉัน ...
Federico

ในขณะที่คำตอบอื่น ๆ อย่างละเอียดควรเป็นคำตอบที่ได้รับการยอมรับ โดยไม่คำนึงว่าผู้เขียนขอร้องอย่างไร
Moog

-2

คุณอาจลองใช้ framebuffer เสมือนเช่น Xvfb (X virtual framebuffer)

คำอธิบายของแพ็กเกจ xvfb เป็นบีบ


1. นี่คือ FrameBuffer 'เสมือน' ไม่ใช่ฮาร์ดแวร์โดยตรง FrameBuffer 2. มันเป็นเซิร์ฟเวอร์ X และโดยเฉพาะคำถามที่ขอไม่ X
JM Becker

-2

ตราบใดที่นี่เป็นการติดตั้งเดเบียนแบบมาตรฐานโดยที่ไม่มีอะไรแฟนซีและเคอร์เนลมาตรฐานคุณควรจะสามารถรับคอนโซล VGA ที่ใช้อุปกรณ์ framebuffer พร้อมกับพารามิเตอร์เคอร์เนลเช่น "vga = 792" (ซึ่งเป็น 24 บิต 1024 × 768 ) แน่ใจว่าเคอร์เนลรายงานว่าเลิกใช้แล้ว แต่ใช้งานได้

ดูhttp://www.kernel.org/doc/Documentation/kernel-parameters.txtสำหรับพารามิเตอร์เคอร์เนล ที่น่าสนใจคือ "vga =" paremeter ไม่แสดงว่าเลิกใช้แล้ว

ตรวจสอบให้แน่ใจว่าได้เรียกใช้ update-grub (2) และไลค์หลังจากการเปลี่ยนแปลง

ลองดูที่http://packages.debian.org/squeeze/svgalib-binมันไม่ได้สมบูรณ์แบบ แต่มันช่วยให้คุณทำบางสิ่งกราฟิกแฟนซีบนคอนโซล


3
ไม่มันไม่ทำงานอีกต่อไปในหลาย ๆ สถานการณ์ นี่คือคำตอบที่ฉันพูดถึงเสมอ หากคุณใช้ GRUB2 จะใช้งานได้เฉพาะเมื่อบูตด้วย16ตัวลดความเร็วแบบเดิม นอกจากนี้ยังเลิกใช้แล้วซึ่งอย่างน้อยคุณก็รับรู้อย่างจริงจังซึ่งหมายความว่าไม่ต้องตั้งค่าใหม่กับมัน vga=ขยะเก่าจะไม่สามารถบู๊ตได้หากคุณปิดการใช้งานโมดูลฮาร์ดแวร์/etc/modprobe.d/และดิสทริบิวเตอร์จำนวนมากได้กำหนดค่าไว้ล่วงหน้าแล้ว
JM Becker

ดังนั้นปัญหาต่อไป svgalib-bin เป็นอุปกรณ์ที่ไม่ใช่ '/ dev / fb0' ทุกสิ่งที่ต้องการ svgalib จำเป็นต้องได้รับการพัฒนาด้วย svgalib สามารถใช้แทน FB ได้ แต่ไม่สามารถแทนที่ FB ได้อย่างแท้จริง ฉันทำข้อผิดพลาดความคิดเห็นล่าสุดเมื่อฉันพูดว่า "ล้มเหลวในการบูต 'ฉันหมายถึง" ล้มเหลวในการโหลด FB มีแนวโน้มที่จะย้อนกลับไปสู่ ​​vga มาตรฐาน "
JM Becker

3
สิ่งนี้ไม่ได้เป็นความผิดของคุณ แต่ชุมชนของเรามีเอกสารที่ล้าสมัยอย่างน่ากลัว ทุกคนต่างเอ่ยคำตอบเก่า ๆ ผ่านทางอินเทอร์เน็ตทำให้ความเข้าใจที่ทันสมัยเป็นเรื่องยากสำหรับสัตว์ร้าย ผู้คนจำนวนมากถึงกับยอมแพ้เพราะคำตอบที่แท้จริงคือคำตอบใหม่และถูกฝังอยู่ภายใต้การแก้ปัญหาที่เลิกใช้มาหลายปี
JM Becker

1
พารามิเตอร์ "vga =" ทำงานเมื่อใช้การบีบ ฉันแค่แนะนำเพราะมันเป็นวิธีแก้ปัญหาอย่างรวดเร็วง่าย ๆ แทนที่จะค้นคว้าสิ่งที่มันถูกแทนที่ด้วย kernel.org/doc/Documentation/kernel-parameters.txtไม่แสดง "vga =" ตามที่คัดค้าน เหตุผลเดียวที่ฉันรู้คือเนื่องจากข้อความบูตที่อ่านไม่ได้อย่างรวดเร็วโดยเคอร์เนล ... ความสับสนเกิดขึ้น ... ดังนั้นตามข้อความที่ kernel.org "vga =" ไม่ได้คัดค้าน เราต้องเชื่ออะไร
aseq

1
ตามคำแนะนำของฉันในการใช้ svgalib นั้นเป็นเพราะผู้ใช้ไม่ต้องการใช้ X ฉันเข้าใจว่าผู้ร้าย svgalib แต่มีตัวเลือกอื่น ๆ น้อย
aseq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.