mruby on EFI Shellのビルド
※この記事では後々mrbgemsを追加していく事などを意図してmrubyをビルドする事に拘っているが、単にmrubyをUEFIで試してみたいだけならば自分でビルドする必要はない。ここのHow to useからリンクされている"download page"をクリックすればダウンロードできる。
前回の記事をベースにmruby on EFI Shellのビルドを行う。
他のmruby on EFI Shellのビルド方法のメモ(1,2)は日付が2年前になっておりディストリやgccのバージョン、EDK2のコードがこのときからかなり変わってはいるが、手順に大きな変更は見られなかった。
まず、Conf/tools_def.txtのGCC44_ALL_CC_FLAGSから-Werrorを取り除く。
DEFINE GCC44_ALL_CC_FLAGS = -g -fshort-wchar -fno-strict-aliasing -Wall -Wno-array-bounds -ffunction-sections -fdata-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings
AppPkgにmrubyを追加する。
cd AppPkg/Applications git clone https://github.com/masamitsu-murase/mruby_on_efi_shell.git mruby cd mruby git submodule update --init --recursive cd mruby rake cd .. ruby override/override.rb
AppPkg/AppPkg.dscを開いて[Components]にAppPkg/Applications/mruby/mruby.infを足す。
diff --git a/AppPkg/AppPkg.dsc b/AppPkg/AppPkg.dsc index 424434c..e34ceb6 100644 --- a/AppPkg/AppPkg.dsc +++ b/AppPkg/AppPkg.dsc @@ -112,6 +112,7 @@ AppPkg/Applications/Main/Main.inf # Simple invocation. No other LibC AppPkg/Applications/Enquire/Enquire.inf # AppPkg/Applications/ArithChk/ArithChk.inf # + AppPkg/Applications/mruby/mruby.inf #### A simple fuzzer for OrderedCollectionLib, in particular for #### BaseOrderedCollectionRedBlackTreeLib.
LibCにパッチを当てる。
diff --git a/StdLib/LibC/Main/Main.c b/StdLib/LibC/Main/Main.c index b203d15..f22edcf 100644 --- a/StdLib/LibC/Main/Main.c +++ b/StdLib/LibC/Main/Main.c @@ -31,7 +31,7 @@ #include <MainData.h> #include <unistd.h> -extern int main( int, char**); +extern int EFIAPI main( int, char**);^M extern int __sse2_available;
mrubyをビルド。
build
前回と同様の手順でovmfディレクトリにmruby.efiをコピーしてくる。
cd ~/ovmf cp ~/edk2/Build/AppPkg/DEBUG_GCC49/X64/mruby.efi .
それっぽいサンプルコードを用意する。
sort.rb
[10,2,4,1].sort.each{|i| p i}
fib.rb
def fib(n) return 0 if n == 0 return 1 if n == 1 fib(n-2) + fib(n-1) end p fib(10)
qemu-system-x86_64 -nographic -bios OVMF.fd -hda fat:. UEFI Interactive Shell v2.0 EDK II UEFI v2.40 (EDK II, 0x00010000) Mapping table FS0: Alias(s):HD7a1:;BLK3: PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1) BLK2: Alias(s): PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0) BLK4: Alias(s): PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0) BLK0: Alias(s): PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0) BLK1: Alias(s): PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x1) Press ESC in 1 seconds to skip startup.nsh or any other key to continue. Shell> fs0: FS0:\> dir Directory of: FS0:\ 02/10/2014 12:42 4,210 LICENSE 12/03/2014 06:27 96 fib.rb 02/10/2014 12:30 10,573 README 02/10/2014 12:42 1,048,576 OVMF.fd 12/03/2014 06:28 30 sort.rb 02/10/2014 12:42 130 BUILD_INFO 12/03/2014 06:47 525,440 mruby.efi 12/02/2014 22:06 1,540 NvVars 8 File(s) 1,590,595 bytes 0 Dir(s) FS0:\> mruby fib.rb 55 FS0:\> mruby sort.rb 1 2 4 10