QEMUでARM向けUEFIを動かしてみる
QEMUのBeagleBoardエミュレータでEDK2のBeagleBoardPkgを動かしてみます。
BeagleBoardPkgはLinuxを起動するためのもののようですが、 とりあえず前回のビルドの成果物が動くことを確認したいだけなので、Linuxのブートイメージは作りません。
前回のビルドができた状態から始めます。
QEMUのビルドとインストール
BeagleBoardがエミュレートできるQEMUをビルドします。 Ubuntuではapt-getでQEMUをインストールすることができますが、 これで入るQEMUにはBeagleBoardをエミュレートするマシンに指定できないようです。
$ wget https://launchpad.net/qemu-linaro/trunk/2014.01/+download/qemu-linaro-1.7.0-2014.01.tar.gz
$ tar -xvf qemu-linaro-1.7.0-2014.01.tar.gz
$ cd qemu-linaro-1.7.0-2014.01/
QEMUのビルドに必要なものをインストール
$ sudo apt-get install libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
あとは適当にビルドとインストール
$ mkdir build
$ cd build
$ ../configure --prefix=/home/retrage/opt
$ make
$ make install
完了したらちゃんとBeagleBoardがサポートされているかを確認。
$ qemu-system-arm -M help
Supported machines are:
none empty machine
beagle Beagle board (OMAP3530)
beaglexm Beagle board XM (OMAP3630)
collie Collie PDA (SA-1110)
nuri Samsung NURI board (Exynos4210)
...
BEAGLEBOARD_EFI.fdを動かしてみる
$ ~/opt/bin/qemu-system-arm -M beagle -serial stdio -mtdblock ~/src/edk2/Build/BeagleBoard/DEBUG_GCC48/FV/BEAGLEBOARD_EFI.fd
のように実行すると、
[1] Linux from SD
- VenHw(B615F1F5-5088-43CD-809C-A16E52487D00)/HD(1,MBR,0x00000000,0x3F,0x19FC0)/Image
- Arguments: console=tty0 console=ttyS2,115200n8 root=UUID=a4af765b-c2b5-48f4-9564-7a4e9104c4f6 rootwait ro earlyprintk
[2] Shell
[3] Boot Manager
Start:
とか出てきます。
2を指定すれば、
UEFI Interactive Shell v2.1
EDK II
UEFI v2.50 (Beagle Board EFI Nov 1 2015 19:04:57, 0x00000000)
Mapping table
BLK1: Alias(s):
VenHw(4D00EF14-C4E0-426B-81B7-30A00A14AAD6)
BLK0: Alias(s):
VenHw(100C2CFA-B586-4198-9B4C-1683D195B1DA)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell>
のようにUEFI Shellが起動できることが確認できます。
ちなみに、tianocoreのWikiにあるようにLinuxのイメージを作ってみたりもしたのですが、うまく動きませんでした。 調べてみると使っているQEMUが1.7.0でかなり古く、QEMU側のバグかもしれないとのことです。
参考: