Score:0

Ubuntu ไม่ใช้ printf สำหรับเอาต์พุตเมื่อบู๊ตโดยชัดแจ้งหรือไม่ ได้หรือไม่?

ธง ng

คำถามนี้เกิดขึ้นกับฉันเมื่อฉันพยายามให้ผู้เยี่ยมชม Ubuntu OS แสดงข้อความบูตใน QEMU VM (เช่น [ 2.34567890123] ... และ [ ตกลง ] ....) ที่นี่ฉันมี QEMU VM ทั้งโฮสต์และแขกเป็น Ubuntu 20.04 ในการแสดงข้อความบูตของแขกในคอนโซลของโฮสต์ (เช่น บรรทัดคำสั่งที่เริ่มต้น qemu) ฉันตั้งค่าบางบรรทัดของแขก /etc/default/grub ไฟล์ดังนี้:

GRUB_TIMEOUT_STYLE=เมนู
GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT=คอนโซล
GRUB_CMDLINE_LINUX_DEFAULT=nomodeset

จากนั้นฉันเริ่มแขกโดยใช้คำสั่งต่อไปนี้:

qemu-system-x86_64 -hda ubuntu.qcow -m 2000 -nographic -serial ไม่มี

GRUB ส่งออก TUI ด้วยโหมดข้อความอนุกรมหรือ VGA -โนกราฟิก ปิดใช้งานเอาต์พุต VGA และ - ไม่มีอนุกรม ปิดใช้งานคอนโซลซีเรียล ดังนั้นฉันจึงไม่เห็น GRUB TUI ใดๆ เฉพาะจอภาพ QEMU เท่านั้นที่แสดงในคอนโซล ตามเอกสารของ -โนกราฟิก (ที่นี่), "QEMU เป็นแอ็พพลิเคชันบรรทัดคำสั่งอย่างง่าย" ในสถานการณ์นี้ เช่นเดียวกับโปรแกรม C/C++ ปกติ มอนิเตอร์ QEMU จะใช้ พิมพ์ฉ (หรือฟังก์ชั่นอื่น ๆ แต่โปรดให้ฉันใช้ชื่อนี้เป็นการสมควร) เพื่อแสดงเวอร์ชัน การแจ้ง และข้อความอื่น ๆ หลังจากผ่านไป 5 วินาที Ubuntu guest OS กำลังบูทอย่างไรก็ตาม ฉันไม่เห็นข้อความบูตที่พิมพ์ในคอนโซล การทดลองก่อนหน้านี้ของฉันแสดงให้เห็นว่า Ubuntu ไม่ได้ใช้คอนโซลอนุกรม แต่จะใช้โหมดข้อความ VGA สำหรับเอาต์พุตแทน ด้วยเหตุนี้ฉันเดาว่า Ubuntu สามารถใช้งานได้เหมือนกันหรือไม่ พิมพ์ฉ ฟังก์ชั่นเพื่อส่งออกข้อความบูต QEMU ควรสามารถแสดงในคอนโซล (ผสมกับจอภาพ QEMU) เช่นเดียวกับวิธีปฏิบัติต่อเอาต์พุตของจอภาพ QEMU จากการสังเกตว่าคอนโซลมีเอาต์พุตของจอภาพ QEMU เท่านั้น คำถามของฉันคือ:

Ubuntu ไม่ได้ใช้ พิมพ์ฉ สำหรับเอาต์พุตขณะบู๊ต ทั้งโดยชัดแจ้งหรือโดยค่าเริ่มต้น อาจเนื่องมาจากการพิจารณาประสิทธิภาพ หากเป็นพฤติกรรมเริ่มต้น ฉันสามารถใช้ตัวเลือกการบู๊ตใดเพื่อบังคับให้ Ubuntu ใช้ พิมพ์ฉ เพื่อส่งข้อความบูตของมัน (หรือวิธีการส่งออกใด ๆ ที่ QEMU moniter ใช้) ซึ่งตรงข้ามกับโหมดข้อความ VGA? ตามบันทึกด้านข้าง ฉัน googled แต่ไม่พบเอกสารออนไลน์ใด ๆ เกี่ยวกับตัวเลือกการบู๊ตของ Ubuntu เช่น โนโมเซ็ตดังนั้นฉันจึงไม่ทราบว่ามีตัวเลือกการบูต Ubuntu ที่สามารถระบุสิ่งนี้ได้หรือไม่ กรุณาแบ่งปันลิงค์ของมันกับฉันถ้าคุณรู้ มันเป็นงานจำนวนมากดังนั้นฉันจึงไม่สามารถพูดได้อย่างแน่นอนว่าฉันได้กล่าวถึงทุกอย่างข้างต้นแล้ว หากฉันพลาดการพูดถึงบางสิ่งในคำถาม โปรดแจ้งให้เราทราบและฉันจะแก้ไข ขอบคุณ.

Sadaharu Wakisaka avatar
pl flag
ยินดีต้อนรับสู่ AskUbuntu 'echo' เป็นคำสั่งปกติสำหรับพิมพ์บางสิ่งบนจอแสดงผล แต่เดิม 'printf' เป็นคำสั่งสำหรับเครื่องพิมพ์และจำเป็นต้องมีฟังก์ชันรวมโดยเชลล์ ฉันคิดว่า `bash` มีและ `sh` Bourne Shell ไม่มี
muru avatar
us flag
ข้อความบางข้อความที่คุณพูดถึงจะถูกพิมพ์โดยเคอร์เนล และโดยทั่วไปจะใช้ [`printk`](https://en.wikipedia.org/wiki/Printk) ในเคอร์เนล GRUB มาก่อนเคอร์เนลด้วยซ้ำ ใครจะรู้ว่ามันใช้อะไรแสดงข้อความ? ท้ายที่สุดแล้ว โปรแกรมที่ใช้ "`printf`" มักจะอาศัยสิ่งอื่นในการเรนเดอร์เอาต์พุตจริง และในกรณีของ GRUB และเคอร์เนล จะไม่มีอย่างอื่น
muru avatar
us flag
ฉันคิดว่าแทนที่จะเป็น [ปัญหา XY](https://meta.stackexchange.com/q/66377/270345) ที่ค่อนข้างซับซ้อน คุณควรถามวิธีบรรลุสิ่งที่คุณต้องการ ซึ่งน่าจะเป็น: "ฉันจะสร้าง QEMU แสดงเอาต์พุตคอนโซลของ Guest VM ในเทอร์มินัลหรือไม่"
in flag
ไม่มีสิ่งที่เรียกว่า `printf` ซึ่งเคอร์เนลสามารถเรียกใช้ได้ เคอร์เนลเป็นผู้รับผิดชอบในการเปลี่ยนเส้นทางของ printf เหล่านั้นไปยังที่ที่ควรไป ไม่ว่าจะเป็น VGA อนุกรมหรือที่อื่น ดังนั้นจึงไม่มีทาง `printf` ในแขกของคุณอาจปรากฏขึ้นอย่างน่าอัศจรรย์บนโฮสต์ เว้นแต่ว่าแขกของคุณจะส่งข้อความเหล่านั้นไปยังที่ที่โฮสต์ของคุณเห็น
Score:0
ธง ng

หลังจากการสอบสวนสองวัน ฉันคิดว่าในที่สุดฉันก็ค้นพบกุญแจของคำถาม

พิมพ์ฉ ส่งออกทั้งในโหมดข้อความ VGA (คัดลอกไปยังบัฟเฟอร์หน่วยความจำสำหรับโหมดข้อความ) และพอร์ตอนุกรม หลักฐานคือ xv6 ใช้ในหลักสูตร OS มากมาย เดอะ qemu-nox เป้าหมายใน xv6Makefile ของระบุ -โนกราฟิก. ถ้าเราเพิ่ม - ไม่มีอนุกรม, xv6 จะแสดงเฉพาะมอนิเตอร์ QEMU (คิวมู).

ใช้ทั้ง GRUB และ ubuntu shell (โดย shell ฉันหมายถึงการบูทเสร็จสิ้น) พิมพ์ฉ การทำงาน. อย่างไรก็ตาม ความแตกต่างคือ: GRUB ใช้ซีเรียล แต่อูบุนตูปิดใช้งานซีเรียลตามค่าเริ่มต้น นั่นเป็นเหตุผลที่ภายใต้ -โนกราฟิก, GRUB สามารถแสดงได้ แต่ ubuntu shell ไม่สามารถทำได้ นอกจากนี้ยังอธิบายว่าทำไม - คำสาป สามารถแสดงผลได้ทั้งสองแบบ

มอนิเตอร์ QEMU ใช้งานได้ปกติ พิมพ์ฉ ด้วย. อย่างไรก็ตาม มันทำงานในโฮสต์ที่เปิดใช้งานซีเรียลแล้ว ดังนั้นมันจึงสามารถส่งออกไปยังคอนโซลของโฮสต์ได้ อูบุนตูผู้เยี่ยมชมปิดการใช้งานซีเรียลในอิมเมจ iso ดังนั้นจึงไม่พิมพ์อะไรออกมา -โนกราฟิก.

ขั้นตอนการบูต Ubuntu ใช้โหมดข้อความ VGA เท่านั้น ไม่มีซีเรียลแม้ว่าจะเปิดใช้งานอยู่ก็ตาม ดังนั้นข้อความการบูต (เช่นเดียวกับการปิดเครื่อง) ไม่สามารถแสดงภายใต้ -โนกราฟิก แต่สามารถแสดงภายใต้ - คำสาป. ฉันคิดว่ามันเกิดจากการพิจารณาประสิทธิภาพเนื่องจากหน่วยความจำเขียนโดยตรง (บัฟเฟอร์โหมดข้อความ) เร็วกว่า พิมพ์ฉ ซึ่งนอกเหนือจากการดำเนินการแบบอนุกรม

โพสต์คำตอบ

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