ラベル QEMU の投稿を表示しています。 すべての投稿を表示
ラベル QEMU の投稿を表示しています。 すべての投稿を表示

2019年5月12日日曜日

QEMU 4.0.0 で Raspberry Pi 2 (1)

はじめに

最近再整備した 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 がぶん回るのでプラットフォーム上でもたつきが発生しますが, 事前に理解しておけば対応は可能だと思います.

GNU Emacs for Windows における最近の IMEパッチ問題

自分は GNU Emacs 使いなのですが、Windows版の Emacs を使用する場合、IMEパッチの問題がありました。 ざっくり言うと、FSFの正規のリリースバイナリだと日本語変換のIMEに切り替えた時、インラインで候補文字が表示されないという問題です。そのために有志の方々...