うまくいけばfs.py
、しかし必ずしもそうではありません。
たとえば、QEMU の画面に線を描画する x86 BIOS の例があり、それが gem5 でも動作することを確認したいと考えています。
すべてのアーチに興味があります。
https://www.mail-archive.com/gem5-users@gem5.org/msg15455.html
うまくいけばfs.py
、しかし必ずしもそうではありません。
たとえば、QEMU の画面に線を描画する x86 BIOS の例があり、それが gem5 でも動作することを確認したいと考えています。
すべてのアーチに興味があります。
https://www.mail-archive.com/gem5-users@gem5.org/msg15455.html
腕
ARMの画面に画像を表示することができました。
次の手順を実行する高度に自動化されたセットアップを次に示します。
https://gem5.googlesource.com/arm/linux/から ARM gem5 Linux カーネル v4.15 フォークを取得し、そこから構成ファイル arch/arm/configs/gem5_defconfig を使用します。
コミットにはフォークが必要ですdrm: Add component-aware simple encoder
https://gem5.googlesource.com/arm/linux/必要なオプションを追加すると思いますCONFIG_DRM_VIRT_ENCODER=y
。
もう 1 つの必須オプションはCONFIG_DRM_HDLCD=y
、ディスプレイを管理する HDLCD ARM IP を有効にする: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0541c/CHDBAIDI.html
次のタイプのコマンドを使用して、49f96e7b77925837aa5bc84d4c3453ab5f07408e で gem5 を実行します。
M5_PATH='/data/git/linux-kernel-module-cheat/out/common/gem5/system' \
'/data/git/linux-kernel-module-cheat/out/common/gem5/build/ARM/gem5.opt' \
--debug-file=trace.txt \
-d '/data/git/linux-kernel-module-cheat/out/arm/gem5/m5out' \
'/data/git/linux-kernel-module-cheat/gem5/gem5/configs/example/fs.py' \
--disk-image='/data/git/linux-kernel-module-cheat/out/arm/buildroot/images/rootfs.ext2' \
--kernel='/data/git/linux-kernel-module-cheat/out/arm/buildroot/build/linux-custom/vmlinux' \
--mem-size='256MB' \
--num-cpus='1' \
--script='/data/git/linux-kernel-module-cheat/data/readfile' \
--command-line='earlyprintk=pl011,0x1c090000 console=ttyAMA0 lpj=19988480 rw loglevel=8 mem=256MB root=/dev/sda console_msg_format=syslog nokaslr norandmaps printk.devkmsg=on printk.time=y' \
--dtb-file='/data/git/linux-kernel-module-cheat/out/common/gem5/system/arm/dt/armv7_gem5_v1_1cpu.dtb' \
--machine-type=VExpress_GEM5_V1 \
お気に入りのクライアントで gem5 が提供する VNC サーバーに接続します。
Ubuntu 18.04 では、以下が気に入っています。
sudo apt-get install vinagre
vinagre localhost:5900
ポートは、次のタイプの gem5 メッセージに表示されます。
system.vncserver: Listening for connections on port 5900
から始まる最初の空きポートを占有し5900
ます。
現在、未加工の接続のみがサポートされています。
結果:
数秒後、VNC クライアントの画面に小さなペンギンが表示されます。これは、カーネルが次のようにコンパイルされたためですCONFIG_LOGO=y
。
最新のフレームが にダンプさsystem.framebuffer.png
れ、小さなペンギンも含まれています。
Linux カーネル dmesg は、telnet 3456
ターミナルに次のようなメッセージを表示します。
[ 0.152755] [drm] found ARM HDLCD version r0p0
[ 0.152790] hdlcd 2b000000.hdlcd: bound virt-encoder (ops 0x80935f94)
[ 0.152795] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 0.152799] [drm] No driver support for vblank timestamp query.
[ 0.215179] Console: switching to colour frame buffer device 240x67
[ 0.230389] hdlcd 2b000000.hdlcd: fb0: frame buffer device
[ 0.230509] [drm] Initialized hdlcd 1.0.0 20151021 for 2b000000.hdlcd on minor 0
これは、HDLCD が有効になったことを示しています。
接続すると、標準出力に gem5 が表示されます。
info: VNC client attached
TODO: シェルも動作させます。現在、私は小さなペンギンしか持っておらず、キーストロークは何もしません。おそらく、カーネル パラメータを調整するconsole=
か、init で tty コンソールをセットアップする必要がありますか? CONFIG_FRAMEBUFFER_CONSOLE=y
が設定されています。おそらく答えはhttps://www.kernel.org/doc/Documentation/fb/fbcon.txtに含まれています
aarch64
gem5 aarch64
defconfig には、必要なすべてのオプションが含まれているわけではありませんCONFIG_DRM_HDLCD=y
。
ハッキングまたは構成フラグメントを使用して次のオプションを追加すると、機能するようになりました。
CONFIG_DRM=y
CONFIG_DRM_HDLCD=y
CONFIG_DRM_VIRT_ENCODER=y