-
Notifications
You must be signed in to change notification settings - Fork 10
zulinx86; home
Takahiro Itazuri edited this page Dec 18, 2021
·
59 revisions
低レイヤーの技術に興味があり、個人的に勉強を進めています! まだまだ初学者ですが、頑張ります!
- 開発環境
- ローカル PC: macOS Catalina 10.15.7
- ビルド環境: Ubuntu 18.04 on EC2 (AMI: ami-0ef85cf6e604e5650)
- 実機環境
-
ASUS ZenBook UX310UQ
- CPU: Intel Core i5-7200U
- GPU: NVIDIA GeForce 940MX
- Memory: 8 GB (DDR4-2133)
- Storage: SSD 256 GB
-
ASUS ZenBook UX310UQ
1 章 (2021/03/25)
- バイナリエディタ Hex Friend をインストール
- 「Disk Utility」から USB を「MS-DOS (FAT)」にフォーマットし、BOOTX64.EFI をコピー
- 1.1 ハローワールド
- 実機で動作確認
- 1.4 エミュレータでのやり方
- QEMU で動作確認
$ git clone https://github.com/uchan-nos/mikanos-build.git
$ MIKANOS_BUILD=<mikanos-build へのパス>
$ qemu-img create -f raw disk.img 200M
$ hdiutil attach -nomount disk.img
/dev/disk3
$ newfs_msdos /dev/disk3
$ mkdir mount
$ mount -t msdos /dev/disk3 mnt/
$ mkdir -p mnt/EFI/BOOT
$ cp BOOTX64.EFI mnt/EFI/BOOT
$ hdiutil deatch disk3
$ qemu-system-x86_64 -drive if=pflash,file=$MIKANOS_BUILD/devenv/OVMF_CODE.fd -drive if=pflash,file=$MIKANOS_BUILD/devenv/OVMF_VARS.fd -hda disk.img
- 1.9 C 言語でハローワールド
-
Ubuntu 18.04 上に開発環境構築
- Mac 環境でやってらっしゃる方 もいらっしゃいましたが、私のような初心者はとりあえず環境を合わせてやることに。
- 実機と QEMU で動作確認
-
Ubuntu 18.04 上に開発環境構築
2 章 (2021/03/26)
- EDK II による
build
時にNo module named 'distutils.util'
エラーが出たら、python3-distutils をインストール
$ sudo apt install python3-distutils
- 3.3 初めてのカーネル
-
3.4 ブートローダからピクセルを描く
- 実機だと "Kernel: " の行だけじゃなく、左上の部分が大きく黒くなった。推測でしかないが、別のフレームバッファが存在していて、何らかの更新があった場合に、そのフレームバッファ全体が描画されてそう。
- 3.5 カーネルからピクセルを描く
-
3.6 エラー処理をしよう
-
kernel_file_size
に大きな値を入れて、わざとページ割り当てに失敗するようにして、エラー処理ができていることを確認。
-
- 4.2 ピクセルを自在に描く
-
4.3 C++ の機能を使って書き直す
- C++ のクラスと継承の復習
- 配置 new の勉強
- 6.1 マウスカーソル (2021/04/01)
- 6.2 PCI デバイスの探索 (2021/04/01)
- 6.4 ポーリングでマウス入力
- USB 関連のドライバーも理解したくて、uchan さんの「USB 3.0 ホストドライバ自作入門 - Hello uchan world - BOOTH」を購入
- なぜか QEMU でも、実機でもマウスが動いれくれず。。。 (2021/04/04)
- uchan さんがアドバイスをくださいました! (2021/04/05)
- 色々あって途中で挫折してしまったが、2021 年のやり残したこと No.1 なので、再開することを決意。
- とりあえず写経は諦めて読破を目標とし、一度読破した後に、写経したり、気になったところを深掘りしていく。
- 気になった点・深掘りしたい点
- コンパイラやリンカのオプションがそれぞれどういう意味なのか。
- 気になった点・深掘りしたい点
- AppPkg 配下のアプリケーションの例を通して、UEFI に慣れたい。
- OVMF の実装を読みたい。
- 気になった点・深堀りしたい点
- 名前修飾 (name mangling) の規則を調べる。
-
-fno-rtti
の動的型情報とは何か。なぜ必要か。 -
-z norelro
でリロケーション情報を read only にしてはいけない理由は何か。 -
reinterpret_cast
を含むキャスト周りとしっかりと勉強しておきたい。https://en.cppreference.com/w/cpp/language/reinterpret_cast -
alignas
とalignof
を使ってみる。
- 気になった点・深堀りしたい点
- C++ の純粋仮想関数や継承、メソッドオーバーライド周りを復習しておきたい。
- 配置 new を定義するときのシンタックスを確認しておきたい。https://en.cppreference.com/w/cpp/language/new
- 「リンカ・ローダ実践開発テクニック」も積読にしてしまってるので、読んでおきたい。
- 気になった点・深掘りしたい点
-
makefont.py
の中身を読んでおきたい。 - Newlib の中身が気になる。
- Newlib を使わずに標準ライブラリの関数を自前実装してみたい。
-
- 気になった点・深堀りしたい点
- USB ドライバーの実装を読む。
- PCI / PCIe について理解を深める。
- 気になった点・深堀りしたい点
- 「30 日でできる!OS 自作入門」でやった割り込みと違って PIC の初期化とかがなかったが、UEFI がやってくれてるのだろうか。
- 「30 日でできる!OS 自作入門」でやった割り込みでは、IRETD 命令を使って割り込み処理から抜けていて、EOI への通知は明示的に実行してなかったが、この辺がどうなってるのか。