Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.1. 型定義の追加

自作プロトコルスタックで多用しているビット幅指定の数値型(uint8_tuint32_t)などの型定義を追加しておきます。xv6では型定義をkernel/types.hに集約しているので、このファイルに追加します。

📝 kernel/types.h

...

typedef uint64 pde_t;
+
+#if defined(_STDIO_H)
+#define MKFS
+#endif
+
+#if !defined(MKFS)
+
+#define NULL ((void*)0)
+
+typedef char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+typedef long int64_t;
+typedef unsigned long uint64_t;
+
+typedef int64_t ssize_t;
+typedef uint64_t size_t;
+
+typedef int64_t intptr_t;
+typedef uint64_t uintptr_t;
+
+#endif

Note

xv6を起動するためにmake qemuを実行すると、ユーザランドの実行ファイルなどを格納したディスクイメージ(fs.img)を作製するプログラム(mkfs)がコンパイルおよび実行されます。

このmkfsは、xv6ではなくホストで実行するプログラムであるため、コンパイル時にはホスト環境のヘッダファイルが読み込まれます。ホスト環境のヘッダファイルが読み込まれると、ここで追加している型定義との衝突が発生してしまうため、mkfsのコンパイル時のみ追加した型定義が読み込まれないようにしています。