如果你使用的是 Mac 系统,就需要些步骤。一旦我们使用高级语言(C 语言) 就需要跨平台编译,具体参见。
我们使用 GCC 来进行编译,请参考教程 GCC Cross-Compiler。因为 Mac 系统中 gcc 已经被 clang 所取代,所以我们需要自己安装 gcc, 并设置环境。
首先安装 brew 工具, 然后使用 brew install 安装如下包
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
我的安装目录设置为 /usr/local/i386elfgcc, 然后把需要安装的 gcc 和 binutils 工具的命令都加上前缀i386-elf-, 避免跟系统的起冲突。
export PREFIX="/usr/local/i386elfgcc"
export TARGET=i386-elf
export PATH="$PREFIX/bin:$PATH"
创建目录 mkdir /tmp/src
cd /tmp/src
curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz
tar xf binutils-2.24.tar.gz
curl -O https://ftp.gnu.org/gnu/gcc/gcc-13.3.0/gcc-13.3.0.tar.xz
tar xzf gcc-13.3.0.tar.xz
cd /tmp/src
mkdir binutils-build
cd binutils-build
../binutils-2.24/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log
make all install 2>&1 | tee make.log
cd /tmp/src
mkdir gcc-build
cd gcc-build
../gcc-13.3.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-languages=c --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
i386-elf-gcc -ffreestanding -c kernel/main.c -o kernel/main.o
使用 i386-elf-objdump -d main.o 来检查编译出来的机器码
使用命令 i386-elf-ld -o kernel.bin -Ttext 0x0 -e main main.o 来链接

ndisasm -b 32 kernel.bin