ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

ゼロからのOS自作入門(その2) メモリマップの取得

ゼロからのOS自作入門、その1の続き

natsutan.hatenablog.com

ゼロからのOS自作入門 | マイナビブックス

本を読みながら、メモリマップの取得プログラムを書き写してみた。 ブートしたらメモリマップを取得して、memmapという名前のファイルにメモリマップをCSVで出力します。

実行時にメモリマップを取得できるのは凄い。加えて、OSが立ち上がってないのにファイルシステムが動いているのが凄い。Qemuと実機ではメモリマップがだいぶ違う事が分かったことが収穫です。

Qemuのメモリマップ

Index, type, Type(name), PhysicalStart, NumberOfPages, Attribute
0, 3, EfiBootServicesCode, 00000000, 1, F
1, 7, EfiConventionalMemory, 00001000, 9F, F
2, 7, EfiConventionalMemory, 00100000, 700, F
3, A, EfiACPIMemoryNVS, 00800000, 8, F
4, 7, EfiConventionalMemory, 00808000, 8, F
5, A, EfiACPIMemoryNVS, 00810000, F0, F
6, 4, EfiBootServicesData, 00900000, B00, F
7, 7, EfiConventionalMemory, 01400000, 3AB36, F
8, 4, EfiBootServicesData, 3BF36000, 20, F
9, 7, EfiConventionalMemory, 3BF56000, 270C, F
10, 1, EfiLoaderCode, 3E662000, 2, F
11, 4, EfiBootServicesData, 3E664000, 219, F
12, 3, EfiBootServicesCode, 3E87D000, B7, F
13, A, EfiACPIMemoryNVS, 3E934000, 12, F
14, 0, EfiReservedMemoryType, 3E946000, 1C, F
15, 3, EfiBootServicesCode, 3E962000, 10A, F
16, 6, EfiRuntimeServicesData, 3EA6C000, 5, F
17, 5, EfiRuntimeServicesCode, 3EA71000, 5, F
18, 6, EfiRuntimeServicesData, 3EA76000, 5, F
19, 5, EfiRuntimeServicesCode, 3EA7B000, 5, F
20, 6, EfiRuntimeServicesData, 3EA80000, 5, F
21, 5, EfiRuntimeServicesCode, 3EA85000, 7, F
22, 6, EfiRuntimeServicesData, 3EA8C000, 8F, F
23, 4, EfiBootServicesData, 3EB1B000, 4DA, F
24, 7, EfiConventionalMemory, 3EFF5000, 4, F
25, 4, EfiBootServicesData, 3EFF9000, 6, F
26, 7, EfiConventionalMemory, 3EFFF000, 1, F
27, 4, EfiBootServicesData, 3F000000, A1B, F
28, 7, EfiConventionalMemory, 3FA1B000, 1, F
29, 3, EfiBootServicesCode, 3FA1C000, 17F, F
30, 5, EfiRuntimeServicesCode, 3FB9B000, 30, F
31, 6, EfiRuntimeServicesData, 3FBCB000, 24, F
32, 0, EfiReservedMemoryType, 3FBEF000, 4, F
33, 9, EfiACPIReclaimMemory, 3FBF3000, 8, F
34, A, EfiACPIMemoryNVS, 3FBFB000, 4, F
35, 4, EfiBootServicesData, 3FBFF000, 201, F
36, 7, EfiConventionalMemory, 3FE00000, 8D, F
37, 4, EfiBootServicesData, 3FE8D000, 20, F
38, 3, EfiBootServicesCode, 3FEAD000, 20, F
39, 4, EfiBootServicesData, 3FECD000, 9, F
40, 3, EfiBootServicesCode, 3FED6000, 1E, F
41, 6, EfiRuntimeServicesData, 3FEF4000, 84, F
42, A, EfiACPIMemoryNVS, 3FF78000, 88, F
43, 6, EfiRuntimeServicesData, FFC00000, 400, 1

実機(OneMix 2S)でのメモリマップ

Index, type, Type(name), PhysicalStart, NumberOfPages, Attribute
0, 7, EfiConventionalMemory, 00000000, 58, F
1, 0, EfiReservedMemoryType, 00058000, 1, F
2, 7, EfiConventionalMemory, 00059000, 45, F
3, 0, EfiReservedMemoryType, 0009E000, 2, F
4, 7, EfiConventionalMemory, 00100000, 7559A, F
5, 4, EfiBootServicesData, 7569A000, 40, F
6, 7, EfiConventionalMemory, 756DA000, E74B, F
7, 4, EfiBootServicesData, 83E25000, 302, F
8, 3, EfiBootServicesCode, 84127000, 1F, F
9, 4, EfiBootServicesData, 84146000, 30, F
10, 3, EfiBootServicesCode, 84176000, 2, F
11, 4, EfiBootServicesData, 84178000, 1388, F
12, 3, EfiBootServicesCode, 85500000, C, F
13, 4, EfiBootServicesData, 8550C000, 25, F
14, 3, EfiBootServicesCode, 85531000, 10, F
15, 4, EfiBootServicesData, 85541000, 21, F
16, 3, EfiBootServicesCode, 85562000, B, F
17, A, EfiACPIMemoryNVS, 8556D000, 1, F
18, 6, EfiRuntimeServicesData, 8556E000, 1, F
19, 4, EfiBootServicesData, 8556F000, 1, F
20, 3, EfiBootServicesCode, 85570000, 24, F
21, 4, EfiBootServicesData, 85594000, 81, F
22, 3, EfiBootServicesCode, 85615000, B, F
23, 4, EfiBootServicesData, 85620000, 10, F
24, 3, EfiBootServicesCode, 85630000, 13, F
25, 4, EfiBootServicesData, 85643000, 10, F
26, 3, EfiBootServicesCode, 85653000, 2, F
27, 4, EfiBootServicesData, 85655000, 18, F
28, 3, EfiBootServicesCode, 8566D000, 1D, F
29, 7, EfiConventionalMemory, 8568A000, D, F
30, 1, EfiLoaderCode, 85697000, 2, F
31, 4, EfiBootServicesData, 85699000, 5FE1, F
32, 7, EfiConventionalMemory, 8B67A000, 17A, F
33, 3, EfiBootServicesCode, 8B7F4000, 5E8, F
34, 0, EfiReservedMemoryType, 8BDDC000, C17, F
35, 9, EfiACPIReclaimMemory, 8C9F3000, 52, F
36, A, EfiACPIMemoryNVS, 8CA45000, 60, F
37, 6, EfiRuntimeServicesData, 8CAA5000, 4B7, F
38, 5, EfiRuntimeServicesCode, 8CF5C000, A3, F
39, 4, EfiBootServicesData, 8CFFF000, 1, F
40, 7, EfiConventionalMemory, 100000000, 16F000, F
41, 0, EfiReservedMemoryType, 000A0000, 60, 0
42, 0, EfiReservedMemoryType, 8D000000, 3000, 0
43, B, EfiMemoryMappedIO, E0000000, 10000, 0
44, B, EfiMemoryMappedIO, FE000000, 11, 1
45, B, EfiMemoryMappedIO, FEC00000, 1, 1
46, B, EfiMemoryMappedIO, FED00000, 1, 1
47, B, EfiMemoryMappedIO, FEE00000, 1, 100D
48, B, EfiMemoryMappedIO, FF000000, 1000, 100D