正誤表(最終更新日:2025/05/03)

本書に下記のとおり誤りがございました。お詫びして訂正いたします。

初版第1刷の正誤表

p.xv「第4章 マルチタスクを実装しよう」目次要素

aync/awaitを使えるようにする

async/awaitを使えるようにする

p.48「”Hello, world”はどこへ行く?」2段落目

 鍵となるのは、このprinln!です。

 鍵となるのは、このprintln!です。

p.161「OSのテストをRustで書く」3段落2行目

うまくいったら正常に終了し、そうでなければpanic()するような関数を書けばよいです。

うまくいったら正常に終了し、そうでなければpanic!()するような関数を書けばよいです。

p.161「OSのテストをRustで書く」3段落4行目

もし想定と違えばpanic()するような

もし想定と違えばpanic!()するような

p.162「シリアルポート出力の実装」4段落目

今回はエミューレーターを使用して

今回はエミュレーターを使用して

p.167 サンプルコード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つが冗長でしたので片方を削除しました。残っていても間違いではありませんが、削除したほうがより適切です。)

p.188 コードブロック内

最上部のコードブロックと、ページ中央のコードブロックの2箇所について:

0x0XAC_TUWP
0b0XAC_TUWP

p.194 「async/awaitを使えるようにする」4段落目

Identity mapping

Identity Mapping

p.204 サンプルコードsrc/x86.rs

struct FPUContenxt {
struct FPUContext {

p.205 サンプルコードsrc/x86.rs

    fpu_context: FPUContenxt, // used by FXSAVE / FXRSTOR
    fpu_context: FPUContext, // used by FXSAVE / FXRSTOR

p.214 サンプルコードsrc/x86.rs

pub const BIT_CS_READABLE: u64 = 1u64 << 53;
pub const BIT_CS_READABLE: u64 = 1u64 << 41;

p.219 サンプルコード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,

p.220 サンプルコード内 locate_loaded_image_protocol()関数内

ここではgraphic_output_protocolという名前の変数が宣言・使用されていますが、実際にはloaded_image_protocolに相当する値を格納する変数となっています。したがって、これに即した変数名とするのがより適切でした。プログラム自体の動作には影響ありませんが、混乱を招いたことをお詫びいたします。

p.224 サンプルコード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
}

p.245 「async/awaitを使えるようにする」見出し

aync/awaitを使えるようにする

async/awaitを使えるようにする

p.311「ECAM ―― Enhanced Configuration Access Method」3段落目

各デバイスに対応するConfiguration間

各デバイスに対応するConfiguration空間

p.312 ページ一番下のコマンド出力結果について

$ qemu-system-x86_64 -machine ? | grep q35 | head -n 1
$ qemu-system-x86_64 -machine '?' | grep q35 | head -n 1