0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UEFI_Libc

Last updated at Posted at 2024-12-17

UEFI Libc

これは、UEFI BOOTする、64bit整数版 TinyBASICインタープリターに付随する形で作成中のLibc ( NewLib-4.4.0 を移植中 )です

64bit整数版 TinyBASICインタープリター とは?

・Tiny BASIC for the Motorola MC68000 をUEFIブートするように改造したものです。

・予約語を普通の文字列型に変更

・整数のビット数を16bitから64bitに変更

・多少の Refactoring を実施

・追記: オリジナルのGitHubは2024年時点で消滅しておりました。

https://github.com/LHerrmeyer/UEFI_Basic

環境構築メモ

(1)・Lubuntu24.04 を用意(普通のUbuntu24.04でも良い) QEMUを動かすので、GUIが必要。

(2)・gnu-efiを入れる。

# apt install gnu-efi

(3)・QEMUを入れる。・・・UEFIブートを試すエミュレータ。

# apt install qemu-system-x86

(4)・OVMFを入れる。・・・UEFIのBIOS(変な言い方だが、そう)というかファームウェアね。 Open Virtual Machine Firmware とかそんな感じの。

# apt install ovmf

QEMU上で動かす

$ make run

・エラー発生時の行番号は、BASICの行ではなく、 basic.c のエラー発生時の行番号であることに注意

・変数は A-Zしか使用できない。

・文字列変数はない。

・整数は64bit

・配列は実装されない。

・Arduino等にあるような SD Card File I/O や Port Pin Control など、は実装されない。

QEMUの終了のさせ方

・[CTRL] + [ALT] + [2] を押してQEMUコンソールに戻す
・>quit で終了

注意事項

・Libc (NewLib-4.4.0) 移植途上です。

・とりあえず、リンクエラーする関数をダミー関数として undef.c に置いています。

・以前はLinuxコマンドライン上でもbasicが実行可能なMakefileを用意していましたが、
現在はUEFI環境へのLibc移植に主眼を置いているため、サポートしていません。

どの程度実装されている?

・strcpy()とかstrcmp()とか string系
・printf() sprintf()
・malloc() は sbrk()が仮実装のままで、UEFI APIには繋いでません

・timeとかfileとかdirとかprocessとかは全く未実装

・ぶっちゃけいうと、libcの最低限の機能を使いたい(UEFI APIに繋ぎたい)ので、とりあえずNewLibのコンパイル通るようにしてみました。という感じです。libcの全機能が使えると思ったら大間違い。

・テスト方法は、ub_test.c に書いて、 BASICから、 user 命令を実行することで、cmd_User()関数がキックされる。

・(現状では、BASIC起動時に自動実行している)

実機で動くのか?

ちなみに、てきとーなUSBメモリーをFAT32フォーマットして、

USBドライブ名: /EFI/BOOT/BOOTX64.EFI

のようにさっきのファイルを配置して、

C:ドライブだったSSDを抜いておいて起動すると、ちゃんとBASICが起動する。

だけど、メーカーロゴが残ったままだし、全画面じゃないし(中央部分にしかコンソールがprintしない)不満が・・・

GitHub URL: (ソースコード)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?