ゼロからのOS自作入門、その1の続き
本を読みながら、メモリマップの取得プログラムを書き写してみた。 ブートしたらメモリマップを取得して、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