[随時更新]OS自作入門をLinuxでやるときに躓いたこと

今、アセンブリに入門しようと「OS30日本」をやっていますが、なかなか進みません(汗
というわけで、つまずいた点をまとめていきます！

調べると筆者が提供するツールを極力使わないで自力でやってる強者記事も見られますが、早く完成させたいので、ここではできるだけ本と同じことをするようにしています。

進捗: 現在3日目の最後の方です。あと1セクションで4日目みたいなところです。

## サンプルの文字コード修正したらnaskがエラー吐く

### 初出:３日目

僕の環境だとサンプルソースの内容が文字化けしてしまいました。そこで、UTF-8に変換したら`NASK : 1 errors.`と言われてしましました。。

これは、「BOM付きのUTF-8」にすると解決できました！

```bash
nkf -w8 ipl.nas > ipl_u.nas
```

というわけでBOMなしのUTF-8にしないよう注意！！

### 追記

まあ、さすがに毎回ShiftJIS変換するのは疲れるので、vscodeの文字コード自動判別機能を使ってしまいました。(え、editor。。なんて言わないで。。進捗に追われて使う時が来るはずだから。。。)

https://qiita.com/ustakr/items/acad8dc12c166c2ad5e9

## diffでサンプルと完全に一致するのにうまくいかない

### 初出:３日目

原因はよく分かりませんが、1回ではなく、2回連続で`make`するとなぜか解決したりしました

```shell-session
[gpioblink@gpiobook harib00a]$ make
/home/gpioblink/mylearn/learn-os-30days/z_tools/make -r img
make[1]: Entering directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
/home/gpioblink/mylearn/learn-os-30days/z_tools/make -r haribote.img
make[2]: Entering directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
/home/gpioblink/mylearn/learn-os-30days/z_tools/nask ipl_u.nas ipl.bin ipl.lst
NASK : 1 errors.
Makefile:17: recipe for target 'ipl.bin' failed
make[2]: *** [ipl.bin] Error 1
make[2]: Leaving directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
Makefile:29: recipe for target 'img' failed
make[1]: *** [img] Error 2
make[1]: Leaving directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
Makefile:12: recipe for target 'default' failed
make: *** [default] Error 2
[gpioblink@gpiobook harib00a]$ make
/home/gpioblink/mylearn/learn-os-30days/z_tools/make -r img
make[1]: Entering directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
/home/gpioblink/mylearn/learn-os-30days/z_tools/make -r haribote.img
make[2]: Entering directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
/home/gpioblink/mylearn/learn-os-30days/z_tools/edimg   imgin:/home/gpioblink/mylearn/learn-os-30days/z_tools/fdimg0at.tek \
	wbinimg src:ipl.bin len:512 from:0 to:0   imgout:haribote.img
make[2]: Leaving directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
make[1]: Leaving directory '/home/gpioblink/mylearn/learn-os-30days/myprogress/myday3/harib00a'
```

## cc1なんてものはない

### 初出: day3 harib00h

Makefileを上手い感じに直しても、そもそもCC1なんてなかった。ここは、`cc1`のところを`gocc1plus`にすればおｋ。

## obj2bimでエラーが出る

### 初出: day3 harib00h

CC1はなんとかなったけど、結局makeは失敗した。これは、`z_tools/haribote/haribote.rul`にある`haribote.rul`の相対パスが変な場所にあって解決できてなかったため。`haribote.rul`をいじって相対パスにしたらうまくいきました。

あ、あと、linuxだったらcopyじゃなくてcatで結合できるからharibote.sys作るとこは`cat asmhead.bin bootpack.hrb > haribote.sys`こんな感じに変えてみました。

## 「can't link _HariMain」と言われてしまう

### 初出: day3 harib00i

`Warning : can't link _HariMain`って言われてしまいました。

> bootpack.nas の __Z8HariMainv を _HariMain に手動で修正ｗ
https://qiita.com/S-YOU/items/4f2160cf41adf614efc8

ここに書いてある通りでよかった。みんな30日終してて強すぎる。

でも、ちょっとどういうことか気になったので調べてみました。
恐らく、「cc1」の代わりに「gocc1plus」を使っているため、内部的にc++が使われている。
cとc++の名前変換規則が違うため、変数名が異なってしまったってことらしい。

って中国語のサイト翻訳書けたら書いてあったw。あと何調べていいか分からんので保留で。

https://blog.imlk.top/page/10/


## 凡ミスのお墓

恥ずかしいミスだから小さく書く

### qemuでいつまで経っても「load error」

サンプルとdiffしてもコメント以外同じになったのになんでだ、と思ったら、、、
はい、`-fda`オプション忘れてました。。

## この先、進捗とともに追記していきます。。。