初めに
C言語を用いて32ビットのOSを開発します。
一般的なOSは、呼び出しの流れが複雑で、マクロや抽象層が多く、ソース間の関係も入り組んでいます。そのため、どのコードがどこから呼ばれているのか追いにくく、全体の動作を理解するのが難しい場合があります。
そこで本OSでは、なるべく構造を簡素に保ったOSを作り、誰でもOSの仕組みを直感的に理解できることを目指しています。学習や実験のための教材として活用できるよう設計しています。
以下の目次にOSに関する記事をまとめています。
https://qiita.com/earthen94/items/b5d77f98f0cf85a13346
ソースは以下に載せています。
記事投稿時点:
https://github.com/ooe1220/KansoOS/tree/553801f2a9bdbd7df615f781f2791e90427c1791
最新:
https://github.com/ooe1220/KansoOS
起動した様子
OS構成
構成
├── build # ビルド後の成果物はここに生成される
├── build.sh # ビルド用スクリプト
└── src
├── arch
│ └── x86 # CPUや割り込み制御、ハードウェア操作のコード
│ ├── cmos.c
│ ├── cmos.h
│ ├── console.c
│ ├── console.h
│ ├── init.c
│ ├── init.h
│ ├── io.h
│ ├── pic.c
│ ├── pic.h
│ ├── rtc.c # 時間取得関連
│ └── rtc.h
├── boot
│ └── boot.asm # ブートローダ
├── kernel
│ ├── kernel.c # カーネル入り口
│ └── switch32.asm # CPUを16bit→32bitへ切り替えてkernel.cを呼び出す
├── lib
│ └── stdint.h # 標準整数型定義
└── linker.ld # メモリ配置やリンク方法を指定
ビルド手順
KansoOS/直下にbuildフォルダを作成し、./build.shを実行します。
生成されたdisk.imgをエミュレータもしくは記憶媒体に書き込んで実機から起動します。
最近のOSはUEFIから起動している為、実機から起動する場合はBIOSの設定を開いてレガシーBIOSへ変更してから起動して下さい。

