Blog posts by @retrage01

mirror of https://retrage.github.io/

LLVMのEFI Byte Codeバックエンドを作る

ここでは開発しているLLVMのEFI Byte Code (EBC)バックエンドの概要と EBCバックエンド固有の問題などについてみていく. ソースコードは以下で公開している. yabits/llvm:retrage/ebc yabits/clang:retrage/ebc yabits/lld:retrage/ebc

文鎮化したMinnowboardを復旧させる

MinnowboardはIntel Atomを搭載した シングルボードコンピュータである. Minnowboardを使った実験で誤ったファームウェアを書き込んでしまい brick (文鎮化) させてしまったので SPI Flashを外部から書き換えることで復旧させる.

ELVMのEFI Byte Codeバックエンドを作る

ここでは ELVM のEFI Byte Codeバックエンドについて紹介する. 特にELVM IRとEFI Byte Codeのsemantic gapに注目する.

Linux kernelをUnikernelのライブラリ化する

Linux kernelをUnikraftのライブラリ化した. これにより機能の少ないUnikernelの資源として Linux kernelの持つ機能を利用することが可能となる.

正規表現からLLVM IRを生成する

正規表現は文字列マッチングなどに広く用いられている形式言語であるが, 等価な決定性有限オートマトン(DFA)に変換できることが知られている. google/redgrep は与えられた正規表現から等価なDFAに相当するネイティブコードを LLVMにより生成する. ここで…

技術書典6で新刊「UEFI読本 GRUB編」を頒布

2019年4月14日に池袋サンシャインシティで開催される 技術書典6において「海洋軟件」として 新刊「UEFI読本 GRUB編」を頒布する。 既刊「UEFI読本 基礎編 Linux編」も基礎編を分離し 「UEFI読本 Linux編」として頒布する。 配置先は「う27」である。

春の秋山郷の行き方 (2019年3月版)

2019年3月21日から24日かけて開催された「カーネル/VMキャンプ #9」[1]に参加した. 開催場所は秋山郷結東温泉「かたくりの宿」という元小学校校舎の宿[2]である. 東京から「かたくりの宿」までの公共交通機関でのアクセスがやや変則的なのでここにまとめ…

LinuxにおけるEFI Variableをみてみる

この記事は Linux Advent Calendar 2018 の20日目の記事として書かれた. ここではLinux kerenlにおけるEFI Variableのコードをみていく. EFI Variableとは UEFIでは,EFI varibale(EFI変数)というものが存在する. これは不揮発性メモリ(NVRAM)に値が書き…

ebcvm: A Usermode EFI Byte Code Virtual Machine

この記事は 自作OS Advent Calendar 2018 の19日目の記事として書かれた. ここでは,フルスクラッチで開発したEFI Byte Code Virtual Machineである ebcvm[1]と開発したのELVMのEBCバックエンド[2]について紹介する.

EFI Byte Code解説

本記事は2018年11月10日に開催されたkernelvm 北陸 Part4において 発表した内容[10]をまとめたものである. ここではUEFIの持つ独自のバイトコードであるEFI Byte CodeとそのVMについてみていく.

EFI stubなArch Linuxのインストール

QEMU上の仮想マシンにEFI stubなArch Linuxをインストールする。 ここでのホストはUbuntu 16.04.4 TLSとする。 なお[1][2][3][4]を参考にした。 OVMFのダウンロードとArch Linuxのインストールディスクのダウンロード 最初にOVMFをダウンロードして解凍する…

技術書典5で「UEFI読本 基礎編 Linux編」を頒布

2018年10月8日に池袋サンシャインシティで開催される 技術書典5において「海洋軟件」として 「UEFI読本 基礎編 Linux編」を頒布する. 配置先は「お09」である. UEFI読本 基礎編 Linux編 以下,本書「はじめに」より抜粋. UEFIが2005年に登場してから10年…

LKL.js: Linux kernelを直接JavaScript上で動かす

Linux kernelを直接JavaScript上で動かした. つまり,JSLinuxのようにEmulatorをJavaScriptで作成し, その上でLinuxを動かすのではなく, JavaScriptで書かれたLinuxを生成し,それを動かす,ということである. LKL.js Architecture リポジトリは以下の通…

HiFive1でZephyr

HiFive1とは,SiFiveによって開発されたRISC-V搭載のArduino互換ボードである. 一方,Zephyrは,Linux Foundationにより開発が進められている組み込み向けOSである. upstreamのZephyrはHiFive1に対応している. ここでは,ZephyrをHiFive1向けにビルドして…

RustでBrainfuck処理系を高速化して遊んでみる

Brainfuckとは><+-.,[]の8つの命令からなるプログラミング言語である. 実装が簡単であるために,すでに多くの言語によって実装がなされている. ここでは, Adventures in JIT compilation: Part 1 - an interpreter を参考にC++の実装をRustに移植し,その…

8cc in Lazy K

本日は4月1日で,エイプリルフールの日である. ただ,書いている現在は午後9時で,ちょっと嘘をつくには遅すぎる時間である.そこで,今回は何にも役に立たないものを作ってみようと思った. そこで,表題の通り,Lazy Kで書かれた8ccを生成して遊んでみた…

Google V8 JavaScript EngineでのWebAssemblyのi32.addの実装を見てみる

WebAssembly(以下,wasm)については,既に多くの解説記事が存在するため, wasmについての説明は割愛する. ここでは,wasmにおいてとある命令i32.addがどのように実行されるのかを見ていく. 参照する実装はGoogle V8 JavaScript Engineの 1b254a25163fd84a…

Rustでcoreboot payload

この記事は自作OS Advent Calendar の19日目の記事として書かれた. ここでは,corebootのpayloadをRustを使って作ってみる. corebootはファームウェアなのでOSとは異なるが,そこはご愛嬌ということで.

Linux kernelの5-Level Paging有効化部分を読んでみる

この記事はLinux Advent Calendar 14日目の記事として書かれた. 本記事ではLinuxにおける5-Level Paging(la57 paging)の実装を見ていく.

EFI stubなLinux kernelのヘッダ部分を見てみる

EFI環境においてLinux kernelの起動方法には ブートローダを用いる方法とEFI stubの2通りがある. EFI stubではbzImageに対してEFI Application相当のヘッダを付加することで EFIから直接kernelを起動する. ここでは,EFI stubなLinux kernelのヘッダが実際…

BitVisorのEFI向けVMM Loader(1st stage)のコードを読んでみる

この記事は BitVisor Advent Calendar 7日目の記事として書かれた. ここでは,BitVisorのEFI向けVMM Loader(1st stage)のコードを読んでみる.

Windows 10にEZP2010のドライバをインストール

EZP2010はAmazonなどで安価に販売されているROMライタである. すでに公式のWebサイトが閉鎖されていたりして Windows 10のドライバは公式には配布されていない. Windows 7でのインストール手順を記している方がいらっしゃるが[1], この方法ではうまく動か…

BitbucketとCircle CIでLatexする

前回からだいぶ空いてしまったが,小ネタを投下する. 以前に, Jenkins+Bitbucket(Git)でLaTeX - めもちょー という記事を書いた. ここでは,CIを用いてlatexdiffによる差分Latexの生成, コンパイル,Downloadsへのアップロード を行うようなものを作って…

ELVMのLLVM IRバックエンドをつくった

LLVMはよく知られてるコンパイラ基盤であり, 中間表現としてLLVM IRを持っている. 様々なところでこのLLVM IRが使われているが, 今まで触ってこなかったということもあり, 今回LLVM IRで何かしら遊んでみようと思っていた.

Zephyr上でBrainfuckを(一部)動かしてみる

ZephyrはLinux Foundationが発表したのRTOSである。 ただ触ってみただけでは面白くないので、 ここではZephyr上で動作するBrainfuckインタプリタを(一部)実装して動作させてみる。

OpenBSD vmmを動かしてみる

vmmはOpenBSD上で開発されているVMM(Virtual Machine Monitor)である。 ここではvmmを実際に動かしてその上でOpenBSDが動くことを確認する。

u8glibを使って画像をArduinoに接続したLCDに表示

aitendoのFSTN液晶モジュールに画像を出力させてみました。

BeagleBoneBlack上でUEFIを動かしてみる

BeagleBoneBlack(以下、BBB)実機上でUEFIを動かしてみます。 前回の記事ではBeagleBoardでしたが、ここではBBBを扱います。 QEMUでARM向けUEFIを動かしてみる - めもちょー 既にBBB向けにポーティングしている方がいらっしゃいましたので、 これを使ってみま…

QEMUでARM向けUEFIを動かしてみる

QEMUのBeagleBoardエミュレータでEDK2のBeagleBoardPkgを動かしてみます。 BeagleBoardPkgはLinuxを起動するためのもののようですが、 とりあえず前回のビルドの成果物が動くことを確認したいだけなので、Linuxのブートイメージは作りません。 前回のビルド…

EDK2のクロスコンパイル

tianocore/edk2をx64上でARM向けにクロスコンパイルしてみました。 ここでは、EDK2のリポジトリにあるBeagleBoardPkgをビルドしてみます。