借り初めのひみつきち

仮ブログです。移転先募集中

moe

ぬるぽ警察24時

myos では Null Pointer Exception は発生しません。 理由は2つあって、言語に Rust を採用しているというのと、 Null Pointer Exception が発生するようにページングを設定していないからです。 事件編 Rust には Null Pointer Exception によく似た別のエ…

Rust 自作 OS 日記/Part 9 my new os...

2020 年を振り返ってみると、色々と検討した結果もう Rust を勉強するしかないなー ということになって春ごろから Rust の勉強を開始、そして myos の開発が始まりました。 さて、およそ半年開発を続けてきた「myos」ですが、 「私の OS」ってなんやねーん …

Rust 自作 OS 日記/Part 7 次世代の OS へ。

myos の開発をはじめておよそ半年が経ちました。 前回の続き 前回の日記より実装も進歩してはりぼて OS でできることの8〜9割程度が myos でもできるようになりましたが、まだいくつか課題があります。 そもそも myos ははりぼて OS ベースではないし、は…

Rust 自作 OS 日記/Part 6 過去最大の更新

このシリーズの記事は月1くらいで書こうと思ってて前回からそんなに日付も経ってないのですが、 ここ最近で過去最大にいろいろ変わってしまったので前倒しで書くことにします。 initrd 某はりぼて OS では起動時にフロッピーディスクの内容をメモリに転送し…

Rust 自作 OS 日記/Part 5 マルチタスキング

古代のコンピュータでは1台のコンピュータでひとつのタスクを実行するのが普通でした。*1 現代のコンピュータでは1台のコンピュータで複数のタスクを同時に実行するのが当たり前となり、さらには複数の OS を並列に動かす技術さえあります。 複数のタスク…

Rust 自作 OS 日記/Part 4.1 おまけ

前回の日記でひとつ触れ忘れました。 Rust 自作 OS 日記/Part 4 フォントのはなし - 借り初めのひみつきち ベクターフォントのラスターフォントにないもうひとつの利点、 それは描画予定のサイズよりあらかじめ大きいバッファに描画してから縮小して実際の画…

Rust 自作 OS 日記/Part 4 フォントのはなし

古きよき太古のコンピューターは ROM にフォントを内蔵していたので文字コードを指定するだけで画面に文字を表示することができました。 現代のコンピューターは広大な画面に自由に図形を描画できるようになった代償として文字を表示するためにフォントが必…

Rust 自作 OS 日記/Part 3 ブートローダー

最近の大きな変更点は、カーネルとブートローダーを分離しました! UEFI の便利なところはカーネルを直接起動できるところです。 一方、カーネルに UEFI のコードが含まれることによる問題も少なからずあるので、 ブートローダーを分離することになりました…

Rust 自作 OS 日記/Part 2

前回の日記からまた間が空いてしまったので進捗をば。。 最近多忙につき、あまり開発時間が取れてないですが、 ウィンドウシステムっぽいものを実装始まりました ちなみに以前作ってたアレがこんな感じ まるで進化してない 見た目はだいぶそれっぽいになりま…

Rust 自作 OS 日記/Part 1 my new gear...

前回の日記でお察しかと思いますが、さいきん Rust + UEFI で OS がどのくらい作れるのか検証していました。 TL; DR 結論から言うとマルチスレッドが動く程度までは動いて、今後も継続して開発していこうと思います。(๑╹ω╹๑ ) Rust で OS Rust 特有の苦労し…

最小限の USB Hub 対応

USB バスはスター型トポロジーになっていて規格上は最大127台のデバイスを接続することができることになっていますが*1、実際のコンピューターには多い機種でも数個、ほとんどのモバイル PC にはたった1個の USB ポートしかコネクタがありません。 それ以上…

USB/xHCI インタラプト転送の罠

USB プロトコルではホストとデバイスの役割が明確に分かれていて、ホスト (PC) から送受信命令を発行しないとデータ転送が始まりません。ストレージのようなデバイスではこれで問題ありませんが、キーボードやマウスのように人間の気まぐれでいつデータが来…

moe の xHCI / USB 実装

現在の moe の xHCI / USB 実装について軽く解説します。 実装の解説がメインで、各レジスタやビットの意味などあまり詳細に解説すると本が書ける量になってしまうので省略ご了承ください。 xhci.c, xhci_init() PCI エニュメレーションとコンフィグレーショ…

UEFI 自作 OS 日記 v0.7 / First Anniversary

moe を公開して一年経ちました。neriring.hatenablog.jpmeg-os.orgで、そろそろなんかどーんとやりたかったところですが、v0.7が目立った新機能もないのでひっそりします。。。

MOE は MEG-OS MOE になりました。

MOE は MEG-OS MOE になりました。 MEG-OS Dawn もともと MOE は内部コードネーム「MEG-OS Dawn」として企画された MEG-OS ファミリーの最も新しい OS でした。MEG-OS Dawn の主な要件は以下の通りです。 新しい 64bit OS UEFI で起動し、 PIC や PIT に依存…

UEFI自作OS日記 v0.6.1 ゆ。

前回の記事で紹介したように v0.6 は大幅なリメイクとなりましたが、それには大きな目的がありました。github.com現代の PC ではペリフェラル接続に主に USB を利用しています。 キーボードやマウスもデスクトップ PC では USB 接続が主流です。 モバイル PC…

UEFI自作OS日記 v0.6 再始動

しばらく開発の停滞していた moe ですが・・・github.com思うところあってリファクタリングしながら再実装しています。既存のコードを再利用できるところは再利用していますが、完全に新規に書き直してる部分もあります。これだけだと面白くないので具体的な…

きんきょうてきな?

また更新間隔が空いてしまいました。 フォントのあれ 以前公開すると宣言していた megos フォントについてあえず現場を公開しておきます。 (0610と0608は字形が一緒じゃないかとかまだ気になるところはあるのですが...)github.commoe で使用しているフォント…

地獄のデバッグ

ある日家にあった Surface 3 で moe を起動してみたら、画面が真っ黒のまま進みませんでした。現在の moe はウィンドウシステムが起動する前は基本的に何も画面出力しないので何が起こっているのかさっぱりわかりません。 こういう時はどうしたらいいでしょ…

最小ステップで作る UEFI OS v0.5.1

ウィンドウの基本的な部分はできましたが、本格的なウィンドウシステムとしては全然機能が足りてなかったので色々実装しました。半透明のウィンドウもほぼチラつきなしで動くようになりました!そして、自作OS界隈では元ネタより有名な noiz2bg なんかも移植…

最小ステップで作る UEFI OS v0.5

今週は SMP 環境の安定化と格闘しておりましたがなんとか進捗出せました。。github.com ウィンドーシステム スレッドが動くようになったのでウィンドウシステムの改良です。 今まではルートウィンドウとマウスカーソルだけの特別な処理だったので、他のウィ…

最小ステップで作る UEFI OS v0.4.1?

昔の CPU は世代が進むごとに動作周波数が向上していき、それに伴って動作も高速になっていました。しかし、やがて動作周波数をあげるのが困難になり、別の方法で性能向上する必要が出てきました。 そこで偉い人は考えました。 超高速な CPU を1個作るより…

最小ステップで作る UEFI OS v0.4

そろそろ GUI の実装に入りたい感じですね。github.com メモリの拡張 現在実装されているメモリ管理はコンパイル時に静的に割り当てたブロックを切り取って分配する手抜き実装でした。 今まではそこまで大量のメモリを必要としていなかったのでこれでよかっ…

最小ステップで作る UEFI OS v0.3.1

前回はコンテキストスイッチを実装しましたが FPU(SSE) のコンテキストスイッチには未対応だったので実装します。 Lazy FPU Context Switch FPU や SSE はレジスタが多く汎用レジスタに比べてコンテキストスイッチのコストが高いわりにほとんどのプログラム…

最小ステップで作る UEFI OS v0.3

もう UEFI とあんまり関係なくなってきましたが OS の開発を続けていこうと思います。github.com スレッディングの実装 まずはスレッディングを実装します。コンテキストスイッチには setjmp/longjmp を使います。 これによって setjmp/longjmp の中身とスレ…

最小ステップで作る UEFI OS v0.2.1

v0.2 で忘れていたことがあったので補足します。 EFI Runtime Services の構成 ExitBootServices を呼び出した後も EFI Runtime Services を使うためには GetMemoryMap で取得したメモリマップの VirtualStart の値を適切に設定し、一度だけ SetVirtualAddre…

最小ステップで作る UEFI OS v0.2

前回は IDT の初期化が終わって割り込みが処理できるようになりましたが、まだ外部割り込み (IRQ) の処理ができなかったので実装します。github.comほぼ全ての OS はタイマー割り込みをサポートし、タスクスイッチなどの重要な役割を持っています。 これらは…

最小ステップで作る UEFI OS v0.1

前回は最小ステップで UEFI からカーネルを起動するところまでできたので、今回はその続きを作ってみようと思います。github.comなお、前回は起動までの最短ステップを紹介しましたが、 UEFI Aware な OS を作る場合には RuntimeServices API を使うためにも…

最小ステップで作る UEFI OS v0.0

UEFI で OS ローダーを作るために必要な最小ステップを考えてみました。github.com 1. ACPI テーブルの取得 bootinfo.acpi = efi_find_config_table(&efi_acpi_20_table_guid); 対応するハードウェアが完全に既知でそれ以外対応しないなら不要な気もしますが…