狠狠撸

狠狠撸Share a Scribd company logo
鲍贰贵滨向け自作翱厂の绍介
大神 祐真
yuma@ohgami.jp
● 大神 祐真
– http://yuma.ohgami.jp
● 組み込み系の技術営業(2016/12?)
– 同会社のエンジニア(?2016/11)
● 趣味
– フルスクラッチでOS自作
技術書典2(4/9 日)
配置: え-15
超技術書典(4/29 土)
配置: B-20
カーネル
時間
管理
ファイルシステム
システムコール
デバイスドライバ
ユーザーランド
libkernel libcommon
コンソール
CPU メモリ KBC CRTCPIT
タスク管理
スケジューラ
タスクローダ
メモリ管理
ページング
メモリアロケータ
ソ
フ
ト
ハ
ー
ド
shell uptime whoareyou
libstring
libconsole
ライブラリ
アプリケーション
カーネル
時間
管理
ファイルシステム
システムコール
デバイスドライバ
ユーザーランド
libkernel libcommon
コンソール
CPU メモリ KBC CRTCPIT
タスク管理
スケジューラ
タスクローダ
メモリ管理
ページング
ソ
フ
ト
ハ
ー
ド
shell uptime whoareyou
libstring
libconsole
ライブラリ
アプリケーション
メモリアロケータUEFI
UEFI
UEFI
UEFI
実行している様子
引数で与えたファイルをシェルスクリプトとして実行
view 1 2 3 4
内容
※ タイプ数削減のため、ファイル名は1文字
【viewコマンド】
引数で与えたファイルを画像ファイルとして
画面表示
実行している様子
viewコマンドを使用し、画像ファイルとして用意したスライドを表示
【viewコマンド実行中の操作】
● 'h'キー: 最初へ
● 'j'キー: 次へ
● 'J'キー: 5枚次へ
● 'k'キー: 前へ
● 'K'キー: 5枚前へ
● 'l'キー: 最後へ
● 'q'キー: 終了
実行している様子
UEFIで扱う文字はUnicodeなので、
日本語を表示できる
multitestはUEFIでマルチコアを扱う動作確認コマンド
発表時のPC(Lenovo ThinkPad)にはCPUが4つあり、
その内の1つがBSP(Boot Strap Processor)で、
残る3つがAP(Application Processor)
BSPではシェルを実行中
multitestは、各APにプロセッサ番号を表示させている
備考
●
インタフェース仕様はUEFIで決められているが、
ファームウェア実装はメーカーによりけりな模様
●
Lenovo ThinkPadのファームウェア(UEFIバージョン2.3.1)では
以下のとおり
– 大抵の漢字は化ける
– 画像表示関数(*1)が使えない
●
フレームバッファの先頭アドレスを取得し、
ピクセルデータを直接書き込むことで画像表示している
(*1) Graphics Output ProtocolのBlt(Block Transfer)関数
付録1: 試してみるには
●
以下で実行バイナリ版を公開しています
– http://yuma.ohgami.jp
●
zipを展開し、以下の構成でストレージへ配置してください
– USBフラッシュメモリ
├ EFI
│└ BOOT
│ └ BOOTX64.EFI
├ 1
├ 2
├ 3
├ 4
├ a
├ b
├ c
└ d
●
その後、ファイルを配置したストレージから
起動してください
※ 起動ディスクの設定を行うこと
※ 第1パーティションへ配置すること
※ 第1パーティションはFATでフォーマット
  されていること
※ Lenovoのファームウェア(UEFIバージョン2.3.1)
  でしか試したことがなく、ちゃんと動くかは
  分かりません
付録2: catとviewのデータ形式
●
cat
– UTF-16 (リトルエンディアン / BOM無し)
– nkfコマンドでの変換例
$ nkf -w16L0 hello.txt > hello_utf16.txt
●
view
– ピクセルフォーマット: BGRA各8ビット(32bits/pixel)
– 解像度: 640x480 のみ
– convertコマンドでの変換例
$ convert slide.png -resize 640x -depth 8 slide.bgra
付録3: ソースコードの場所
●
発表時点のソースコード
– https://github.com/cupnes/os6/releases/tag/demo_20170413
●
ビルド方法など
– 以下を参照(bare_metal_uefiのGitHubプロジェクト)
●
https://github.com/cupnes/bare_metal_uefi
– 現時点で、OS6のソースコードは読みやすいものではないので、
UEFIプログラミング方法などを参照する際も
bare_metal_uefiの方が見やすいと思います
– ブログ記事も書きました
「UEFIベアメタルプログラミング
- Hello UEFI!(ベアメタルプログラミングの流れについて)
- へにゃぺんて@日々勉強のまとめ」
http://d.hatena.ne.jp/cupnes/20170408/1491654807

More Related Content

鲍贰贵滨向け自作翱厂の绍介