經過上次jserv網友提醒後,小弟就趁今天空檔動手下去看看能不能解決之前奇怪的問題,結果發現還是不能即時把printk的訊息秀在console上,底下是我做實驗的步驟

QEMU-Console設定


在QEMU on-line文件中有提到,模擬serial只需要設定選項-serial即可,而在它的說明中有很重要的一段我截錄如下
This option can be used several times to simulate up to 4 serials ports.”
這句話的意思是說,-serial這個選項最多可模擬到4個serial port,所以如果linux kernel只支援到2個serial port,那serial選項可以依照下面方法設定
範例1
-serial stdio (這是第一個serial輸出的地方,對應本機stdio)–serial /dev/ttyS0(這是第二個serial輸出的地方, 對應本機/dev/ttyS0)
範例2
-serial “pty” (這是第一個serial輸出的地方,對應本機/dev/pts/xxx) –serial /dev/ttyS1(這是第二個serial輸出的地方, 對應本機/dev/ttyS1)

所以從上面的設定可以知道,你有幾個serial,就可以設定幾個-serial選項

kernel command line設定

而除了這樣的設定外,也必需在kernel command line中設定”console=xxxx”,舉例來說,如果你的第一個serial device名稱為ttyS0(這需要在driver source或開機資訊中確定),那就設定kernel command line為”console=/dev/ttyS0″,設定完成後,試著跑跑看,你會發現qemu吐出如下的訊息(我用-serial “pty”當做我第一個seiral driver 輸出的地方)

這時你可以用screen指令開啟qemu隨機指定的終端輸出介面 (screen /dev/pts/xxx),就可以看到kernel吐出的訊息

可是雖然這樣設定了,還是沒有解決到我之前講的問題,可能要再找時間試試看kgdb,底下是我設定的範例

#!/bin/bash
qemu -s -S -kernel bzImage -hda initrd.img -m 128 -no-acpi -nographic -serial "pty" -append "root=/dev/hda console=ttyS0"

最後修改日期: 3 6 月, 2022

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。