src/allocator.rs
内src/x86.rs
内src/x86.rs
内src/x86.rs
内src/uefi.rs
内locate_loaded_image_protocol()
関数内src/init.rs
内本書に下記のとおり誤りがございました。お詫びして訂正いたします。
aync/awaitを使えるようにする
async/awaitを使えるようにする
鍵となるのは、このprinln!
です。
鍵となるのは、このprintln!
です。
うまくいったら正常に終了し、そうでなければpanic()
するような関数を書けばよいです。
うまくいったら正常に終了し、そうでなければpanic!()
するような関数を書けばよいです。
もし想定と違えばpanic()
するような
もし想定と違えばpanic!()
するような
今回はエミューレーターを使用して
今回はエミュレーターを使用して
src/allocator.rs
内 assert_eq!(round_up_to_nearest_pow2(9), Ok(16));
assert_eq!(round_up_to_nearest_pow2(9), Ok(16));
assert_eq!(round_up_to_nearest_pow2(9), Ok(16));
(注: テストケースの最後の2つが冗長でしたので片方を削除しました。残っていても間違いではありませんが、削除したほうがより適切です。)
最上部のコードブロックと、ページ中央のコードブロックの2箇所について:
0x0XAC_TUWP
0b0XAC_TUWP
Identity mapping
Identity Mapping
src/x86.rs
内struct FPUContenxt {
struct FPUContext {
src/x86.rs
内 fpu_context: FPUContenxt, // used by FXSAVE / FXRSTOR
fpu_context: FPUContext, // used by FXSAVE / FXRSTOR
src/x86.rs
内pub const BIT_CS_READABLE: u64 = 1u64 << 53;
pub const BIT_CS_READABLE: u64 = 1u64 << 41;
src/uefi.rs
内#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[must_use]
#[repr(u64)]
descriptor_size: *mut usize,
descriptor_version: *mut u32,
) -> EfiStatus,
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[must_use]
#[repr(u64)]
// << 中略 >>
pub struct EfiBootServicesTable {
// << 中略 >>
descriptor_size: *mut usize,
descriptor_version: *mut u32,
) -> EfiStatus,
locate_loaded_image_protocol()
関数内ここではgraphic_output_protocol
という名前の変数が宣言・使用されていますが、実際にはloaded_image_protocol
に相当する値を格納する変数となっています。したがって、これに即した変数名とするのがより適切でした。プログラム自体の動作には影響ありませんが、混乱を招いたことをお詫びいたします。
src/init.rs
内pub fn init_basic_runtime(
image_handle: EfiHandle,
ALLOCATOR.init_with_mmap(&memory_map);
memory_map
}
pub fn init_basic_runtime(
image_handle: EfiHandle,
// << 中略 >>
ALLOCATOR.init_with_mmap(&memory_map);
memory_map
}
aync/awaitを使えるようにする
async/awaitを使えるようにする
各デバイスに対応するConfiguration間
各デバイスに対応するConfiguration空間
$ qemu-system-x86_64 -machine ? | grep q35 | head -n 1
$ qemu-system-x86_64 -machine '?' | grep q35 | head -n 1