Linux風のシンプルなx86オペレーティングシステム
SimpleOSは教育目的で作成されたミニマルなOSです。以下の機能を持っています:
- x86ブートローダー(保護モード対応)
- VGAテキストモードドライバー
- PS/2キーボードドライバー
- インタラクティブシェル
以下のツールが必要です:
nasm- アセンブラgcc- Cコンパイラ(32bit対応)ld- リンカーmake- ビルドツールqemu-system-i386- エミュレータ(実行用)
sudo apt update
sudo apt install nasm gcc make qemu-system-x86
sudo apt install gcc-multilib # 32bitコンパイル用# OSイメージのビルド
make
# 生成されるファイル:
# - boot.bin ブートローダー
# - kernel.bin カーネル
# - os.img OSイメージ(1.44MB)make runqemu-system-i386 -fda os.img# USBメモリに書き込む(注意:データが消去されます)
sudo dd if=os.img of=/dev/sdX bs=512OSが起動すると、以下のコマンドが使用できます:
| コマンド | 説明 |
|---|---|
help |
コマンド一覧を表示 |
clear |
画面をクリア |
echo <text> |
テキストを表示 |
uname |
システム情報を表示 |
uptime |
稼働時間を表示(未実装) |
reboot |
システムを再起動 |
.
├── boot.asm # ブートローダー
├── kernel_entry.asm # カーネルエントリポイント
├── kernel.c # カーネルメイン
├── kernel.h # カーネルヘッダー
├── vga.c/h # VGAドライバー
├── keyboard.c/h # キーボードドライバー
├── shell.c/h # シェル
├── string.c # 文字列関数
├── linker.ld # リンカースクリプト
└── Makefile # ビルドスクリプト
- BIOSがブートローダー(boot.asm)をメモリアドレス0x7C00に読み込む
- ブートローダーがカーネルをディスクから0x10000に読み込む
- 保護モードに移行
- カーネルエントリポイント(kernel_entry.asm)にジャンプ
- kernel_main()を呼び出し
| アドレス | 用途 |
|---|---|
| 0x7C00 | ブートローダー |
| 0x10000 | カーネル |
| 0x90000 | スタック |
| 0xB8000 | VGAテキストメモリ |
make clean- タイマー割り込み
- メモリ管理
- ファイルシステム
- マルチタスク
- システムコール
このプロジェクトは教育目的で作成されています。自由に使用・改変してください。