Open4
Rikan
day03a
Kernel部分をやるためにはカスタムターゲットが必要そう
- https://github.com/MiSawa/pomelo/blob/master/crates/kernel/x86_64-unknown-none-elf.json
- https://github.com/skoji/laranja-os/blob/0f574072dc3b69cae84304bb04be1d877f3201f2/kernel/x86_64-unknown-none-mikankernel.json
こういうふうに全部書くのついらいので、なんか楽したいなぁと思ったら
x86_64-unknown-none
をベースにできるのではと仮説
$ rustc +nightly -Z unstable-options --print target-spec-json --target x86_64-unknown-none
{
"arch": "x86_64",
"code-model": "kernel",
"cpu": "x86-64",
"data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128",
"disable-redzone": true,
"executables": true,
"features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float",
"is-builtin": true,
"linker": "rust-lld",
"linker-flavor": "ld.lld",
"llvm-target": "x86_64-unknown-none-elf",
"max-atomic-width": 64,
"panic-strategy": "abort",
"position-independent-executables": true,
"relro-level": "full",
"stack-probes": {
"kind": "call"
},
"static-position-independent-executables": true,
"target-pointer-width": "64"
}
ぽい。
そいや学び
env: day03c
QEMUでOVMFを用いてBOOTX64.efiを起動する際に、BOOTZ64.efiのstart addressに示しているアドレスロードされるとは限らない
デバッグの都合上、どこにロードされるかわかるといいのだが、これはログを出力することでできる。
QEMUに以下のようなオプションを渡しながら起動すると、ファイルにいい感じログが吐き出される
QEMU_OPTS="-debugcon file:debug.log -global isa-debugcon.iobase=0x402" make run
0x402の意味はわからない
ちなみにログを見るとこんな感じ
1762 │ FSOpen: Open '\EFI\BOOT\BOOTX64.EFI' Success
1763 │ [Bds] Expand PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0) -> PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0)/\E
│ FI\BOOT\BOOTX64.EFI
1764 │ [Security] 3rd party image[0] can be loaded after EndOfDxe: PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0)/\EFI\BOO
│ T\BOOTX64.EFI.
1765 │ InstallProtocolInterface: 5B1B31A1-9562-11D2-8E3F-00A0C969723B 3E7A8440
1766 │ ConvertPages: failed to find range 140000000 - 1402A5FFF
1767 │ Loading driver at 0x0003E138000 EntryPoint=0x0003E13BDB0
1768 │ InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF 3F2B0318
1769 │ ProtectUefiImageCommon - 0x3E7A8440
1770 │ - 0x000000003E138000 - 0x00000000002A6000
1771 │ FSOpen: Created new directory entry 'memmap'
1772 │ FSOpen: Open '\memmap' Success
1773 │ FSOpen: Open '\kernel' Success
env: day03c
linkerでmsvcを指定する場合、そのオプションは https://learn.microsoft.com/en-us/cpp/build/reference/linker-options?view=msvc-170 が参考になる
また、bootloader側で(つまり、uefi-unkownなやつ)でdebug symbolを出すためには、
https://github.com/bean1310/Rikan/pull/7/commits/83e57f1f924d04852c62ff66cd22b6ab9dd12094 のようなものを書く必要がある。
デフォルトだと出ないので、カスタムターゲットを作る感じ