linux ド素人だけど OS 自作 みかん 本にチャレンジしてみた

お疲れ様です。
自分の環境で完走できたので、忘れないうちに手順をメモしておきます。

##-2 章 当たりを着ける
以下の URL を確認。
WSL2 , Ubuntu 20.4 で動作確認した偉人を発見。
なるほど、下手こかなければ何とかなりそうだ。

https://guricerin.github.io/shit-blog/post/2021/06/20210618-mikanos/

##-1 章 付録A 開発環境のインストール
####WSL2 and Ubuntu のインストール
以下の URL を死ぬほどパクる。
当たりを着けた Ubuntu 20.4 をインストール

https://qiita.com/kenchan1193/items/74edfc67910b51469b45

####Xサーバーの設定とインストール
インストールは適当に。
むしろ設定の方が迷う人が多いかもしれないが、
書籍の通りで十分。念のため分かりやすい URL を貼る

https://qiita.com/hana_shin/items/4ccf9d53aecd290d2cbb

##0 章 ubuntu を起動
恐れず、Enter new UNIX username: と New password: , Retype new password: を適当に入力
とりあえず、以下のコマンドを打ってみる。
その後の必要な手順

####step1
以下の記述を.bashrc の一番下の行に書き込む

```
export DISPLAY=$(ipconfig.exe | grep "IPv4" | head -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")'):0.0
```

ではファイルを開きましょう。

```
sudo vi .bashrc
```

linux のエディタの編集方法も念のためメモ。

https://www.itmedia.co.jp/help/tips/linux/l0271.html

(コピーして、ubuntu 画面上で右クリックするとコピーしたテキストを勝手に貼ってくれる)

このコマンドは以下から拝借。

https://qiita.com/souyakuchan/items/a484e1dd23639eb63bdb

####step2
.bashrc を起動時に勝手に読み込んでくれるように
適当なパッチ的な手順を踏む。

https://pcl.solima.net/archives/775

```
sudo vi .bash_profile
```

ubuntu を再起動して以下を試してみる。

```
$ echo $DISPLAY
192.168.11.13:0.0
```

ok なんか数字の羅列が出てきた。これで良し。

##1章 hello world まで
基本は以下を参照に進めていく。

https://qiita.com/all_fort/items/5165214c97ab76f568a5

以下のコマンドを実行

```
$ sudo apt update
$ sudo apt install git
$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos-build.git osbook
```

続いて開発環境のインストール

```
$ sudo apt install ansible
$ cd $HOME/osbook/devenv
$ ansible-playbook -K -i ansible_inventory ansible_provision.yml
```

冒頭の記事通りに
インストールが終わったら、
以下のコマンドで動作確認。

```
$ iasl -v
$ ls $HOME/edk2
```

ubuntu を再起動して次のステップへ。
速攻でありものを取得

```
$ curl -O https://raw.githubusercontent.com/uchan-nos/mikanos-build/master/day01/bin/hello.efi
```

では以下のコマンドを打つ。

```
$ qemu-img create -f raw disk.img 200M                  //img ファイルを作成
$ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 -F 32 disk.img //Fat で初期化
$ mkdir -p mnt　　　　　　　　　　　　　　　　　　　　　    //mnt を作成
$ sudo mount -o loop disk.img mnt                       //mnt に img を突っ込む
$ sudo mkdir -p mnt/EFI/BOOT                            //mnt の中に EFI/BOOT を作り
$ sudo cp hello.efi mnt/EFI/BOOT/BOOTX64.EFI            //その中に .efi をねじ込む
$ sudo umount mnt                                       //mount 解除(お作法!?
```

以下のコマンドで Hello world を確認した。

```
$ qemu-system-x86_64 -drive if=pflash,file=$HOME/osbook/devenv/OVMF_CODE.fd -drive if=pflash,file=$HOME/osbook/devenv/OVMF_VARS.fd -hda disk.img
```

ただ、出てくるまで 1,~2 分待った(笑)

<img width="300" alt="hello_world_1_0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/b6cde54a-881d-857f-c540-0959d8ae1d7e.png">

###C ファイルからも Hello world してみた
以下のコマンドをタイプ

```
$ cd $HOME/osbook/day01/c
$ clang -target x86_64-pc-win32-coff -mno-red-zone -fno-stack-protector -fshort-wchar -Wall -c hello.c
$ lld-link /subsystem:efi_application /entry:EfiMain /out:hello.efi hello.o
$ $HOME/osbook/devenv/run_qemu.sh hello.efi
```

一応動いた。
<img width="300" alt="hello_world_1_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/3540d018-61e6-d3c0-3661-7d1cead9da2b.png">

今後の勉強に役立ちそうなサイトを見つけたので
メモで貼っておく。

http://yuma.ohgami.jp/UEFI-Bare-Metal-Programming/main_1.html


##2 章に行く前に
付録 B をちょっとカジル

```
$ mkdir $HOME/workspace
$ cd $HOME/workspace
$ git clone https://github.com/uchan-nos/mikanos.git
```

#2 章 EDKII で hello world
以下を参考にしながらコマンドを打つ

https://qiita.com/bolte/items/ab5d0ddcbb9cb907ad40

```
$ cd $HOME/workspace/mikanos/
$ git checkout osbook_day02a
$ cd ~/edk2
$ ln -s $HOME/workspace/mikanos/MikanLoaderPkg ./
$ source edksetup.sh
```

すると Conf の下に target.txt が生成されるので
以下の項目を上書き。

```
#before
 ACTIVE_PLATFORM       = EmulatorPkg/EmulatorPkg.dsc
#after
 ACTIVE_PLATFORM       = MikanLoaderPkg/MikanLoaderPkg.dsc

#before
 TARGET_ARCH           = IA32
#after
 TARGET_ARCH           = X64

#before
 TOOL_CHAIN_TAG        = VS2015x86
#after
 TOOL_CHAIN_TAG        = CLANG38
```

なぜこのようなことをするのか、
補足の page を貼る。

https://osdev-jp.readthedocs.io/ja/latest/2017/create-uefi-app-with-edk2.html

変更が出来たら、さぁ build だ

```
$ cd $HOME/edk2
$ build
```

終わったら、以下のコマンドを実行。

```
$HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
```
<img width="300" alt="hello_world_2_0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/5642cfbb-ddfc-0b76-8713-c68d426fcef2.png">

hello world が少し変わった。

pointer について以下のサイトが分かりやすかった。

http://web.cc.yamaguchi-u.ac.jp/~fukuyo/prog2/501.html

https://daeudaeu.com/arrow/


##3章 カーネル
以下の page がとても参考になりました。

https://noanoa07.livedoor.blog/archives/2342069.html

```
$ cd $HOME/workspace/mikanos   
$ git checkout osbook_day03a
$ cd kernel
$ clang++ -O2 -Wall -g --target=x86_64-elf -ffreestanding -mno-red-zone \
-fno-exceptions -fno-rtti -std=c++17 -c main.cpp
$ ld.lld --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o
```

カーネルが出来たらしいので、ブートローダーをビルドして
カーネルの起動を試みる。

```
% cd $HOME/edk2
% source edksetup.sh 
% build
% $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_2_0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/816f8d55-63e3-93de-e4fd-11e5349d176a.png">

なんか、それっぽい。次行こう。

https://noanoa07.livedoor.blog/archives/2342185.html

ブートローダーの書き換えのみでいいらしい。

```
$ cd $HOME/workspace/mikanos
$ git checkout osbook_day03b
$ cd $HOME/edk2
$ source edksetup.sh
$ build
$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_2_0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/1654d675-e369-85d8-fe5f-9f41dd9c556c.png">

出来たようなので次に行く。
以下の記事では Error になったようだが、
こちらの windows の環境では問題なく動いた。

https://noanoa07.livedoor.blog/archives/2342186.html

```
$ cd $HOME/workspace/mikanos
$ git checkout osbook_day03c
$ cd kernel
$ source $HOME/osbook/devenv/buildenv.sh
$ echo $CPPFLAGS
$ clang++ $CPPFLAGS -O2 --target=x86_64-elf -fno-exceptions -ffreestanding -c main.cpp
$ ld.lld $LDFLAGS --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o

$ cd $HOME/edk2
$ source edksetup.sh
$ build

$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/bc9e0e0f-5677-1e32-5bd0-fc8fae3cac89.png">

実は 4 章に入ってしまいますが、
make をやってみます。

```
$ cd $HOME/workspace/mikanos/kernel
$ git checkout osbook_day04a
$ source $HOME/osbook/devenv/buildenv.sh
$ make
$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

参考 URL はこちら。

https://noanoa07.livedoor.blog/archives/2342314.html

<img width="300" alt="hello_world_3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/9b2f4b9a-7f80-0ec5-d0a3-f1ff124cda32.png">

##4章 ピクセルをいじる
以下の URL を参考に。

https://noanoa07.livedoor.blog/archives/2342461.html

```
$ cd $HOME/workspace/mikanos/kernel
$ git checkout osbook_day04b
$ source $HOME/osbook/devenv/buildenv.sh
$ make
$ cd $HOME/edk2
$ source edksetup.sh
$ build
$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/7e22de20-6100-37de-d3a9-e59e7cd520fa.png">

次の演習については流用で行けると思った。

```
$ cd $HOME/workspace/mikanos/kernel
$ git checkout osbook_day04c
$ source $HOME/osbook/devenv/buildenv.sh
$ make
$ cd $HOME/edk2
$ source edksetup.sh
$ build
$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/6f316cc4-26a9-d60d-0f17-b180168ea7ed.png">

osbook_04day0d も同じ要領で行けます。

##5章文字を表示してみる

https://noanoa07.livedoor.blog/archives/2343169.html

アプローチは前章と同じ。

```
$ cd $HOME/workspace/mikanos/kernel
$ git checkout osbook_day05a
$ source $HOME/osbook/devenv/buildenv.sh
$ make
$ cd $HOME/edk2
$ source edksetup.sh
$ build
$ $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf
```

<img width="300" alt="hello_world_3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/3fcc0704-444f-7360-f139-bb1632aa56eb.png">

コマンドは基本的に同じです。
後は osbook_day"**" <= ココだけ変えれば OK です。
残りは一気にやります。

|osbook_day05b|osbook_day05c|osbook_day05d|osbook_day05e|osbook_day05f|
|---|---|---|---|---|
|![hello_world_5_b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/2ba151c2-9c86-38a2-5582-103ef94023a6.png)|![hello_world_5_c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/46246cf4-728d-5d29-bb37-aa4bc7268891.png)|![hello_world_5_d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/806cd159-270f-92c4-7737-72a049f8ffe7.png)|![hello_world_5_e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/5bdd1c8e-d99b-eeb9-6d9d-1b0cd0e68e2c.png)|![hello_world_5_f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/a4d582a0-e6c8-c902-ae32-3e580edc5cb5.png)
|

##6章マウスとPCI
コマンドは 前章と要領は同じです。

|osbook_day05b|osbook_day05c|osbook_day05d|
|---|---|---|
|![osbook_day06a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f937b9e9-644c-16e1-e443-cc56a5535141.png)|![osbook_day06b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/d347b61c-c1c9-b24b-abaa-8918c1e36b97.png)|![osbook_day06c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f2cb91df-e847-59b4-ac2d-2f50ae60e800.png)|

##7章割り込みとFIFO
コマンドは 前章と要領は同じです。

|osbook_day07a|osbook_day07b|
|---|---|
|![osbook_day07a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/371ef61e-58f6-9061-a77a-c0abbf8109a6.png)|![osbook_day07b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/72284874-6aa3-4aea-b03a-f148ffd65e42.png)|

##8章メモリ管理に挑戦
コマンドは 前章と要領は同じです(あってるかな)。

|osbook_day08a|osbook_day08b|osbook_day08c|
|---|---|---|
|![osbook_day08a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f40662ec-53ab-e02e-fc96-4f44426379ec.png)|![osbook_day08b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/e4710a26-4198-e1a3-9122-8b33bfc11f59.png)|![osbook_day08c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/000d5193-63ee-83b8-be3d-47ea1608eee8.png)|

##9章重ね合わせ処理
コマンドは 前章と要領は同じです。
演習 09e は高速化がポイントなんですが、画像では伝えられず(笑)

|osbook_day09a|osbook_day09b|osbook_day09c|osbook_day09d|osbook_day09e|
|---|---|---|---|---|---|
|![osbook_day09a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/8d991e50-6b10-f137-d977-1eee9c112260.png)|![osbook_day09b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/a95dc89b-665a-68d6-320b-0fc562c8a459.png)|![osbook_day09c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/eeeb801c-6c6a-bc68-92b4-964f9efb8463.png)|![osbook_day09d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/2531044f-4e6d-ce11-6495-f56551cbb39a.png)|![osbook_day09e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/e91a1e56-947d-af32-0511-1edd4751e77e.png)|

まだ途中ですが、一旦ここまで。
お疲れさまでした。

##10章ウィンドウ
コマンドは 前章と要領は同じです。
ただのキャプチャですけど、やった人にはわかる画像です(笑)

|osbook_day10a|osbook_day10b|osbook_day10c|osbook_day10d|osbook_day10e|osbook_day10f|osbook_day10g|
|---|---|---|---|---|---|---|
|![osbook_day10a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/a5eda347-f0ac-0ed7-59c4-512f7e7637bd.png)|![osbook_day10b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/73e94756-3a36-8f9f-736c-1b9711b5bae1.png)|![osbook_day10c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/897bc8b4-bdab-2e89-53f5-27b75eb2600f.png)|![osbook_day10d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/3b930046-2712-337f-553c-de2aa6510d9f.png)|![osbook_day10e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f2a80ae7-df4d-b6c6-1665-15dbffc437b7.png)|![osbook_day10f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/78fa5656-957f-9d1a-e444-0a1ec18bfe84.png)|![osbook_day10g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/1b8178b2-6031-6be6-15f9-7aca79eeed53.png)|

##11章タイマとACPI
コマンドは 前章と要領は同じです。

|osbook_day11a|osbook_day11b|osbook_day11c|osbook_day11d|osbook_day11e|
|---|---|---|---|---|
|![osbook_day11a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/4728db64-d461-4673-7db1-3a5de659a556.png)|![osbook_day11b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/80508658-2cd3-22a4-cfaa-2eb10af78b05.png)|![osbook_day11c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/2836b945-ebae-c35a-802b-d14ad47f06ce.png)|![osbook_day11d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/d4624797-2d82-35dc-e708-f6c864c3341c.png)|![osbook_day11e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/ae10f1b6-6ede-6123-a89e-9cc638efe5d1.png)|

##12章キー入力
コマンドは 前章と要領は同じです。

|osbook_day12a|osbook_day12b|osbook_day12c|osbook_day12d|osbook_day12e|osbook_day12f|
|---|---|---|---|---|---|
|![osbook_day12a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f045df1e-3ef0-64fb-e674-7bdab8b1ab58.png)|![osbook_day12b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/d3422fb4-1240-6677-1096-de3a7de0fd5b.png)|![osbook_day12c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/b4e212dc-b6e1-311d-0767-366615ee39b8.png)|![osbook_day12d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/81f6a8b6-0679-9252-0844-5bbc321f4065.png)|![osbook_day12e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/ce5e277a-2bb9-85b7-58e3-266b10a8f61d.png)|![osbook_day12f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/61ba8a0a-c0cc-71bf-6ca2-5e798133f8e4.png)|

##13章マルチタスク(1)
コマンドは 前章と要領は同じです。
下の画像、差分かります？！(笑)

|osbook_day13a|osbook_day13b|osbook_day13c|osbook_day13d|
|---|---|---|---|
|![osbook_day13a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/49084b81-71b6-1a22-b40c-486bd78414ed.png)|![osbook_day13b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/d841cb9e-a777-48ec-f308-93037e44aed0.png)|![osbook_day13c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/9f16b1c0-d1ae-4cd6-3263-f40718972673.png)|![osbook_day13d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/9c0c3ac9-954a-eb60-b0b4-7946d2bef1a4.png)|

##14章マルチタスク(2)
コマンドは 前章と要領は同じです。
画像のみで違いを見せるのは不可能だ。。

|osbook_day14a|osbook_day14b|osbook_day14c|osbook_day14d|
|---|---|---|---|
|![osbook_day14a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/7d5076c4-1895-93eb-c225-aded2be091b5.png)|![osbook_day14b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/c3252d75-9c18-2990-828a-1368a2ffd921.png)|![osbook_day14c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/2d7c8c2c-da27-ea8a-86e7-caf522ddfb5c.png)|![osbook_day14d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/04202e4b-9dfa-a5f3-d5ef-dd3fbeea7772.png)|

##15章ターミナル
コマンドは 前章と要領は同じよいはず。
一部、動作が書籍と異なる。

|osbook_day15a|osbook_day15b|osbook_day15c|osbook_day15d|
|---|---|---|---|
|![osbook_day15a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/db1404d3-4371-4154-6052-e6d67e10cfe3.png)|![osbook_day15b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/406c962f-5942-bebe-b297-42500b5e9028.png)|![osbook_day15c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/87d36f4c-7bde-8f57-0827-a3fce759beb1.png)|![osbook_day15d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/8bf28e34-7de4-909c-47e3-cf1f3b39202f.png)|

##16章コマンド
コマンドは 前章と要領は同じよいはず。
書籍と異なる動作をメモ
・expr を打つとターミナルがフリーズ
・TaskB がなぜか消えている(最後の演習は消えてもよい)

|osbook_day16a|osbook_day16b|osbook_day16c|osbook_day16d|osbook_day16e|osbook_day16f|
|---|---|---|---|---|---|
|![osbook_day16a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/7d52f6f8-3f15-dbd7-5043-f9a712b8fc87.png)|![osbook_day16b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/de041128-da5d-db8f-1cf3-af27f9551e3f.png)|![osbook_day16c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/f6b5fee0-5bac-6482-1a3f-9debdf2ec9be.png)|![osbook_day16d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/30d6d875-6091-5454-cbd1-a73749f0cf01.png)|![osbook_day16e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/4d581c76-a9b0-bbb7-ed42-eb57f787d67a.png)|![osbook_day16f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/ad088f89-de37-5ff0-f6a4-72b1f5604779.png)|

##17章ファイルシステム
コマンドは 前章と要領は同じ。

|osbook_day16a|osbook_day16b|
|---|---|
|![osbook_day17a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/eedca6ec-5820-b59e-fb51-9a98f726285a.png)|![osbook_day17b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/87d22a20-b311-b91a-de14-ba39c8e6bbaa.png)|

##18章アプリケーション
osbook_day18b よりコマンドは以下で対応。

```
$ cd $HOME/workspace/mikanos
$ git checkout osbook_day18b
$ ./build.sh run
```

|osbook_day18a|osbook_day18b|osbook_day18c|osbook_day18d|
|---|---|---|---|
|![osbook_day18a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/0ec96dcd-06dd-ece1-2fd1-e9a57136e6ee.png)|![osbook_day18b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/37e64e1c-6d6f-5af8-cd60-cbfe5aa1ce1d.png)|![osbook_day18c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/4012bb3e-449b-5d8b-fc16-bf17f301809b.png)|![osbook_day18d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/1259eab5-a3a3-185d-7e1d-b9c0205e81ee.png)|

##19章ページング
以下のコマンドで動作確認

```
$ cd $HOME/workspace/mikanos
$ git checkout osbook_day19a
$ ./build.sh run
```

<img width="300" alt="hello_world_1_0.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/1b358b46-dac5-3359-b6f6-56963824063a.png">

##20章システムコール
前章と同じコマンドで対応。
演習が一部動作しなかった。

|osbook_day20a|osbook_day20b|osbook_day20e|
|---|---|---|
|![osbook_day20a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/4a1c20f9-0c32-0373-3894-06518c6a4843.png)|![osbook_day20b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/9269bff2-c35c-8bc0-a6a9-bd6bfba4feeb.png)|![osbook_day20e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/6e831ca0-820d-8c57-d4fa-fcc070379431.png)|

##21章アプリからウィンドウ
前章と同じコマンドで対応。

|osbook_day21b|osbook_day21c|osbook_day21e|osbook_day21f|
|---|---|---|---|
|![osbook_day21b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/168d2e84-ab21-12be-313b-192ff624c0ed.png)|![osbook_day21c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/19ea34c4-1f29-6896-3dec-b3056ace2144.png)|![osbook_day21e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/34c2ecbe-b25d-2185-195f-830d4d735552.png)|![osbook_day21f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/0fb95d20-8586-2321-8147-62280595d898.png)|

##22章グラフィックとイベント(1)
前章と同じコマンドで対応。

|osbook_day22b|osbook_day22c|osbook_day22d|osbook_day22e|osbook_day22f|
|---|---|---|---|---|
|![osbook_day22b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/ac8f25c8-379f-c26c-f139-3471a910c9ae.png)|![osbook_day22c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/6b3abae1-116d-6776-e1f4-1617e337ecbf.png)|![osbook_day22d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/48eb7df8-3722-c73e-463e-2404b5bdc618.png)|![osbook_day22e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/3ce74cbc-e50c-d530-b5ae-5c57773f1789.png)|![osbook_day22g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/2dd18e60-22e9-eb37-b4a0-46a06d428ffe.png)|

##23章グラフィックとイベント(2)
前章と同じコマンドで対応。

|osbook_day23a|osbook_day23b|osbook_day23c|osbook_day23d|osbook_day23e|
|---|---|---|---|---|
|![osbook_day23a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/3b64ffeb-2b6c-8e72-110b-78fa04b72b6f.png)|![osbook_day23b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/48a664e4-18f7-152b-fefc-d0d261eea595.png)|![osbook_day23c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/838e506f-9353-50f6-ad06-6c18f277c253.png)|![osbook_day23d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/08533950-5d36-1fe8-9941-cb0aceff6b41.png)|![osbook_day23e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/76fa8287-e01b-fdc2-5d02-6eaa80e7e329.png)|

##24章複数のターミナル
前章と同じコマンドで対応。

|osbook_day24a|osbook_day24b|osbook_day24c|osbook_day24e|osbook_day24f|osbook_day24g|
|---|---|---|---|---|---|
|![osbook_day24a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/80ae292e-c29b-e39d-6aa8-e6798e5bb96f.png)|![osbook_day24b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/566d8ea2-ca60-b244-de80-b57dff4fc4b1.png)|![osbook_day24c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/b9cf56c4-77b8-e0c9-b08f-7a09208ee85f.png)|![osbook_day24e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/8b10cee1-98ed-c7c7-6aaf-e476f7014d14.png)|![osbook_day24f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/b1c1016c-ca3a-8d6e-179e-81f35eb65934.png)|![osbook_day24g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/59ee3ecf-0f24-55f8-e524-abcd5a3f820b.png)|

##25章アプリでファイル読み込み
以下のコマンドで対応

```
$ cd $HOME/workspace/mikanos
$ git checkout osbook_day25a
$ APPS_DIR=apps ./build.sh run
```

|osbook_day25a|osbook_day25b|osbook_day25c|
|---|---|---|
|![osbook_day25a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/a7c6594f-9c40-a4f8-37c8-ca6a4a3e8f4c.png)|![osbook_day25b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/744c0cc7-3d4c-77be-7a56-6d3b0b2efdf5.png)|![osbook_day25c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/c1761e86-7214-21b6-96cd-e580a1b5bad3.png)|

##26章アプリでファイル書き込み
前章と同じコマンドで対応
なぜか osbook_day26 a/b にて mikanos のターミナル上で grep するとフリーズする

|osbook_day26c|osbook_day26d|
|---|---|
|![osbook_day25c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/51e35d68-d966-0da0-5013-45642625a3a3.png)|![osbook_day25d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/5bc8382e-6cdb-1966-3e85-46b44d1e4044.png)|

##27章アプリのメモリ管理
前章と同じコマンドで対応
なぜか b だけ動かなかった。

|osbook_day27a|osbook_day27c|osbook_day27d|
|---|---|---|
|![osbook_day27a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/56e633d4-08e9-d589-4c1b-e11cc24d7d76.png)|![osbook_day27c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/5074aec0-6b1d-ae02-3f7b-ff51c589c92e.png)|![osbook_day27d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/8f0defc5-128a-cee5-e5e8-0ae127ee8729.png)|

##28章日本語表示とリダイレクト
以下のコマンドで対応

```
cd $HOME/workspace/mikanos/
git checkout osbook_day28a
APPS_DIR=apps RESOURCE_DIR=resource ./build.sh run
```

|osbook_day28a|osbook_day28b|osbook_day28c|
|---|---|---|
|![osbook_day28a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/e27bd5cc-17a3-38a4-dc81-766bd8e4748e.png)|![osbook_day28b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/94893bff-245a-cac6-8386-273f32390478.png)|![osbook_day28c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/cbdd0240-471a-b9de-4929-a54f17ae7630.png)|

##29章アプリ間通信
前章と同じコマンドで対応
c が今一でした。たぶん sort が分かってないかも。

|osbook_day29a|osbook_day29b|osbook_day29c|osbook_day29d|
|---|---|---|---|
|![osbook_day29a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/c3c79797-69d9-5191-02eb-1f8f4cc8751a.png)|![osbook_day29b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/953c41bd-1ade-eda2-9abc-c29aa280d9e8.png)|![osbook_day29c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/b2dd436f-cf6a-63b6-63f7-e2405f85aabf.png)|![osbook_day29d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/884efc55-7c7f-2d49-b6fc-d4abb0b2094f.png)|

##30章おまけアプリ
前章と同じコマンドで対応
b が動かない。e ががっつり日本語表示できない。f だと tokyost.jpg が開けない


|osbook_day30a|osbook_day30b|osbook_day30d|osbook_day30e|osbook_day30f|
|---|---|---|---|---|
|![osbook_day30a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/44b151a5-d37b-9d6b-22cd-9fbb56ec7005.png)|![osbook_day30b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/c0d210b8-6b4c-ded3-817e-611f57f807e7.png)|![osbook_day30d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/bb9db891-c53c-4063-1d84-4fcddf7fb297.png)|![osbook_day30e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/7bcfe3ce-1056-3f11-e4c8-2b61388a9e1e.png)|![osbook_day30f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/389ebc1d-71bb-e7a5-013f-2a1ce1598a9a.png)|

とりあえず finish.
少しずつ技術的に掘り出したので、
興味のある方はこちらもどうぞ。

https://qiita.com/AKpirion/items/be3d4e6c8ead22b64bee