読者です 読者をやめる 読者になる 読者になる

るくすの日記 ~ Out_Of_Range ~

主にプログラミング関係

30日でできない 自作Linuxクローン開発

この記事は 自作OS Advent Calendar 2014 - Adventar 12/25の記事です。

一ヶ月程前からLinuxカーネルのコードを読み始めたので、解読ついでに自分でもカーネルを作ってみました。
とはいっても、まだ半分も完成してないです() 当初は、30日でできる 自作Linuxクローン開発 を予定していたのですが、
予想以上の規模で、解読とフルスクラッチ開発を併行するのは結構大変でした...

という訳で、現在実装できている所まで紹介します。

f:id:RKX1209:20141225221401p:plain

開発レポジトリはこちらです。
RKX1209/Abyon · GitHub
(インストール方法や実行方法はここに書いてます)

実装した機能

  • プロセススケジューラー
  • Runキュー
  • ハードウェア割り込み(PIC 8259A)
  • 遅延割り込み
  • Tasklet
  • グローバルタイマー(PIT)
  • タイマーリスト
  • 仮想ページング(IA-32 MMU)
  • バディシステム(カーネル初期化後)
  • 簡易メモリアロケーター(ブート時)
  • 簡易ドライバ(デバッグ出力printk用)

そのうち実装する予定の機能

Linuxカーネル理解のために開発した物なので、当然設計も実装も
殆どLinuxと同じ物になっています。
が、本家と違い、例えばSMPやNUMAといったアーキテクチャへの考慮や、初期化時のメモリ調査などを
かなり怠っています。またメモリのレイアウトもかなり大雑把で、32bit境界ギリギリにカーネル本体を
置いて、仮想とストレートに対応させているだけです。HIGHMEMも実装してません。
あくまで理解のためという名目なので、コードもそんなに長くないです。(現在約5000行)

まあこんな感じで割といい加減なカーネルなのですが、教育目的には充分使えるんじゃないかなぁと思います。
なにせ本家はかなり規模が大きいので....

参考書籍,サイト

最後に、Linux解読と自作カーネル開発にあたって参考にさせてたいただいた書籍、サイト
を紹介します。もしカーネルや自作OSに興味がある方は参考にしていただけると嬉しいです。

サイト:

(Linuxカーネルのコードが一つ一つとても細かく説明されています。効率良く解読を進められると思います)
LKH-jpの概要 - LinuxKernelHackJapan

(19日の記事を担当されていたyabusameさんのサイトです。自作OSを開発する際は絶対に読むべきです。本当に素晴らしいサイトです)
0から作るOS開発

(こちらもyabusameさんのサイトです。x86命令でここまで詳しく載っている日本語資料は(仕様書以外で)ここしかないです。有り難うございます)
Tips IA32(x86)命令一覧

(OS開発wikiです。開発ノウハウや周辺機器の仕様が載っています)
Expanded Main Page - OSDev Wiki
FrontPage - OS-Wiki
FrontPage - OS-Wiki

(言わずもがな、最終兵器intel SDMです。得にIA-32下巻が役立ちます)
日本語技術資料のダウンロード




私の記事はここまでです。読んでくださって有難うございました!
皆様良いお年を。Happy Hacking~!