ponono ponono; home - uchan-nos/os-from-zero GitHub Wiki
ponono-ponono (本名:Yoshihiro Nakahara)。
新しい物好き。飽きっぽい(ゼロからの〜はコンプするぞ!)。
超文系(なんと!あたまのなかで引き算(小学生レベル!)がうまくできないという、いらない特性を持ち合わせている)。
元SE。事情病気
によりSEをリタイア。紆余曲折を経て現在に至る。
現在はホビープログラマーで自宅に設置しているNASの環境構築や、ちょっとしたツールを作るのに明け暮れる日々。
今更ながら、gitの便利さに気づき始めた(持っている技術におもいっきり偏りがあるのがバレバレ汗)
PC黎明期をリアルタイムで経験しているウン+歳(遠い目)。
でも、gitって操作を間違うと変な情報が世界中に公開されちゃうので未だに怖さが拭えない。
しっかりローカルリポジトリで確認して、リモートリポジトリにpushしろって話なんだろうけど、
まだgitのコマンド覚えきってないんだよぅという言い訳をしてみる。
そんなこんなで、最近低レイヤープログラミングに興味が湧いてきたので、ゼロからのOS自作入門に手を出してみました。
(30日から〜(※)をかじったり、NASMで湯婆婆作ったりしたので低レイヤーはこれが初めてではないけれど、
実質、あたらしいPC環境で動かせる低レイヤーはほぼ初めと言っても差し支えないでしょう)
※筆者の謹製ツールを使うのがブラックボックスで嫌で(反抗期?!)、Linuxでコーディングしていたものの、
途中でうまくいかなくなり挫折したという経緯がある。
・ シェルにZSHを使う場合のポイント (osbook_day03c)
・ qemu実行時に出るwarning
・ buildenv.shやqemuの実行を取り込んだMakefile
ブートローダに関しては、以前UEFI Application(テキストの表示、マウス操作、グラフィック描画まで)を
テストで作ったことがあったので、コードの内容の理解に関しては問題なし。
osbook_day03cでコンパイルエラーが発生し、最初は原因が解らなかったが最終的に解決。
(上記、『開発トピック:シェルにZSHを使う場合のポイント』を参照のこと)
osbook_day04a〜day04cはわかりやすかった。ただosbook_day04dに関してはelfヘッダのあちこちの項目を
参照しにいっており、なおかつメモリを確保する際のイメージが頭の中で描きづらく、理解が及ばなかった。
ネットで探せばいいんだろうけど、elfヘッダの一覧図みたいな図があるともっと解りやすかっかも。
というのも、ヘッダ項目のフィールド名が省略形で定義してあり、どのフィールド名がなんの項目を指すのかが
少ししか解説がなかったため混乱の元になった。
この章でmakeを弄ることになったことと、buildenv.shをパス指定で実行するのが面倒になりMakefileから
buildenv.shを呼ぼうとした。いろんなやりかたを試したがsourceコマンドを使っても環境変数が設定
できなかった。edksetup.shはsourceで呼んだらちゃんと設定できるのに。しかたがないので、buildenv.shの
中身を丸々Makefileの中に移植するという方法を取らざるを得ないことに。これに関しては時間のあるときに
2つのシェルスクリプトを比べてなんでシェル変数が設定できないか原因究明したいなぁ。
この章はすごく難しいということはなかったかな。しかし、手間取ったのが、osbook_day05aのビット演算で
0x80uの意味を勘違いしたのと(単にビットマスクをかけるための値だというのに、恥ずかしながらAsciiコード表を
探しにいってしまった。元SEにあるまじきミス。とはいえ、C/C++はほとんど触ったことがなかったのでやむ無し
といったところ)、0x80uの最後のuの意味が解らず、ネットで情報を探す羽目になった。なんのことはないunsigned
だったのがわかり、膝から崩れ落ちてしまった。そして次に詰まったのが、p.130のリスト5.14で、コンストラクタの
:より後ろ(witer_{writer)など)の意味が解らなかった。これも調べてC++の書き方で、コンストラクタの引数で
受け取った値をメンバ変数に初期値としてセットしているというのが解り、ひとつ賢くなった(かな?)。
多分これ以降も、C++特有の書き方で躓くんだろうなぁと思いながら5章完了。