はじめに
最近再整備した Ubuntu 18.04 上で QEMU を立ち上げようとしています. Raspberry Pi 2 でちょっとしたポーティングを検討していまして,その開発作業をつつがなく進めるため,まずは仮想環境上で実施しようかと考えています.
最初は Ubuntu 18.04 上での通常のパッケージインストールで導入される QEMU にしようかとも考えていましたが,この4月にメジャーバージョンアップした 4.0 がリリースされているみたいなので,この 4.0 で立ち上げてみようと思います.
QEMUソースコードの入手
まずは QEMU のソースコードの入手です. オフィシャルサイト の ダウンロードページ から入手可能です.
ダウンロードページ上からはOS毎のバイナリパッケージが入手できますが, その並びにある Source code からソースコードを入手する形となります
QEMUのビルド
QEMUは autoconf 系で構成されているためソースコードページ記載の configure と make にてアプリケーションの構築が可能です.参考までにページ記載の手順を以下に列挙しておきます:
tar xvJf qemu-4.0.0.tar.xz cd qemu-4.0.0 ./configure make
なお圧縮フォーマットの xz 形式は最近ちょこちょこ見かけます.圧縮に時間はかかるけど gzip や bzip2 よりも高い圧縮率みたいです.
生成されるエミュレータ
ビルド後は様々なエミュレータがフォルダ上に生成されています.CPU種別毎にどのようなエミュレータがあるかをフォルダのリストアップで調べたものが以下です. 色々と充実しています.
aarch64-linux-user/ aarch64-softmmu/ aarch64_be-linux-user/ alpha-linux-user/ alpha-softmmu/ arm-linux-user/ arm-softmmu/ armeb-linux-user/ cris-linux-user/ cris-softmmu/ hppa-linux-user/ hppa-softmmu/ i386-linux-user/ i386-softmmu/ lm32-softmmu/ m68k-linux-user/ m68k-softmmu/ microblaze-linux-user/ microblaze-softmmu/ microblazeel-linux-user/ microblazeel-softmmu/ mips-linux-user/ mips-softmmu/ mips64-linux-user/ mips64-softmmu/ mips64el-linux-user/ mips64el-softmmu/ mipsel-linux-user/ mipsel-softmmu/ mipsn32-linux-user/ mipsn32el-linux-user/ moxie-softmmu/ nios2-linux-user/ nios2-softmmu/ or1k-linux-user/ or1k-softmmu/ ppc-linux-user/ ppc-softmmu/ ppc64-linux-user/ ppc64-softmmu/ ppc64abi32-linux-user/ ppc64le-linux-user/ riscv32-linux-user/ riscv32-softmmu/ riscv64-linux-user/ riscv64-softmmu/ s390x-linux-user/ s390x-softmmu/ sh4-linux-user/ sh4-softmmu/ sh4eb-linux-user/ sh4eb-softmmu/ sparc-linux-user/ sparc-softmmu/ sparc32plus-linux-user/ sparc64-linux-user/ sparc64-softmmu/ tilegx-linux-user/ tricore-softmmu/ unicore32-softmmu/ x86_64-linux-user/ x86_64-softmmu/ xtensa-linux-user/ xtensa-softmmu/ xtensaeb-linux-user/ xtensaeb-softmmu/
ARMのエミュレータ
今回は ARM のエミュレータを使用し,またLinuxやBigEndianではないので,arm-softmmu フォルダにおかれている qemu-system-arm を使用します.バージョン表示は以下の通りです:
$ ./qemu-system-arm -version QEMU emulator version 4.0.0 Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
また単純にコマンドを実行すると以下の表示がなされます.
$ ./qemu-system-arm qemu-system-arm: No machine specified, and there is no default Use -machine help to list supported machines
メッセージ通りにサポートされているマシンを調べると以下の模様です:
$ ./qemu-system-arm -machine help Supported machines are: akita Sharp SL-C1000 (Akita) PDA (PXA270) ast2500-evb Aspeed AST2500 EVB (ARM1176) borzoi Sharp SL-C3100 (Borzoi) PDA (PXA270) canon-a1100 Canon PowerShot A1100 IS cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310) collie Sharp SL-5500 (Collie) PDA (SA-1110) connex Gumstix Connex (PXA255) cubieboard cubietech cubieboard emcraft-sf2 SmartFusion2 SOM kit from Emcraft (M2S010) highbank Calxeda Highbank (ECX-1000) imx25-pdk ARM i.MX25 PDK board (ARM926) integratorcp ARM Integrator/CP (ARM926EJ-S) kzm ARM KZM Emulation Baseboard (ARM1136) lm3s6965evb Stellaris LM3S6965EVB lm3s811evb Stellaris LM3S811EVB mainstone Mainstone II (PXA27x) mcimx6ul-evk Freescale i.MX6UL Evaluation Kit (Cortex A7) mcimx7d-sabre Freescale i.MX7 DUAL SABRE (Cortex A7) microbit BBC micro:bit midway Calxeda Midway (ECX-2000) mps2-an385 ARM MPS2 with AN385 FPGA image for Cortex-M3 mps2-an505 ARM MPS2 with AN505 FPGA image for Cortex-M33 mps2-an511 ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3 mps2-an521 ARM MPS2 with AN521 FPGA image for dual Cortex-M33 musca-a ARM Musca-A board (dual Cortex-M33) musca-b1 ARM Musca-B1 board (dual Cortex-M33) musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S) n800 Nokia N800 tablet aka. RX-34 (OMAP2420) n810 Nokia N810 tablet aka. RX-44 (OMAP2420) netduino2 Netduino 2 Machine none empty machine nuri Samsung NURI board (Exynos4210) palmetto-bmc OpenPOWER Palmetto BMC (ARM926EJ-S) raspi2 Raspberry Pi 2 realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S) realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore) realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8 realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9 romulus-bmc OpenPOWER Romulus BMC (ARM1176) sabrelite Freescale i.MX6 Quad SABRE Lite Board (Cortex A9) smdkc210 Samsung SMDKC210 board (Exynos4210) spitz Sharp SL-C3000 (Spitz) PDA (PXA270) sx1 Siemens SX1 (OMAP310) V2 sx1-v1 Siemens SX1 (OMAP310) V1 terrier Sharp SL-C3200 (Terrier) PDA (PXA270) tosa Sharp SL-6000 (Tosa) PDA (PXA255) verdex Gumstix Verdex (PXA270) versatileab ARM Versatile/AB (ARM926EJ-S) versatilepb ARM Versatile/PB (ARM926EJ-S) vexpress-a15 ARM Versatile Express for Cortex-A15 vexpress-a9 ARM Versatile Express for Cortex-A9 virt-2.10 QEMU 2.10 ARM Virtual Machine virt-2.11 QEMU 2.11 ARM Virtual Machine virt-2.12 QEMU 2.12 ARM Virtual Machine virt-2.6 QEMU 2.6 ARM Virtual Machine virt-2.7 QEMU 2.7 ARM Virtual Machine virt-2.8 QEMU 2.8 ARM Virtual Machine virt-2.9 QEMU 2.9 ARM Virtual Machine virt-3.0 QEMU 3.0 ARM Virtual Machine virt-3.1 QEMU 3.1 ARM Virtual Machine virt QEMU 4.0 ARM Virtual Machine (alias of virt-4.0) virt-4.0 QEMU 4.0 ARM Virtual Machine witherspoon-bmc OpenPOWER Witherspoon BMC (ARM1176) xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9 z2 Zipit Z2 (PXA27x)
めざす Raspberry Pi 2 は raspi2 のようです.
raspi2 エミュレータの起動
-machine raspi2 のオプション指定にて起動してみると以下に示すウィンドが表示されます:
このメニューバー上の Machine メニューからは Pause/Reset/Power Down および Quit の操作を実行できます. また View メニューからはフレームバッファによる描画やシリアルの出力等を確認することができます:
起動と同時に qemu-system-arm がぶん回るのでプラットフォーム上でもたつきが発生しますが, 事前に理解しておけば対応は可能だと思います.



0 件のコメント:
コメントを投稿