kernel-crosscompiler.md 2.7 KB

目标: 创建开发环境,构建内核

如果你使用的是 Mac 系统,就需要些步骤。一旦我们使用高级语言(C 语言) 就需要跨平台编译,具体参见

我们使用 GCC 来进行编译,请参考教程 GCC Cross-Compiler。因为 Mac 系统中 gcc 已经被 clang 所取代,所以我们需要自己安装 gcc, 并设置环境。

安装步骤

0. 安装依赖包

首先安装 brew 工具, 然后使用 brew install 安装如下包

  1. gmp - GNU multiple precision arithmetic library
  2. mpfr - C library for multiple-precision floating-point computations
  3. libmpc - C library for the arithmetic of high precision complex numbers

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+

1. 设置安装目录及前缀

我的安装目录设置为 /usr/local/i386elfgcc, 然后把需要安装的 gcc 和 binutils 工具的命令都加上前缀i386-elf-, 避免跟系统的起冲突。

    export PREFIX="/usr/local/i386elfgcc"
    export TARGET=i386-elf
    export PATH="$PREFIX/bin:$PATH"

2. 下载 binutils 和 gcc 源码包

创建目录 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    

3. 编译和安装

    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

使用

使用的命令如下: cross-gcc

编译

  i386-elf-gcc -ffreestanding -c kernel/main.c -o kernel/main.o

使用 i386-elf-objdump -d main.o 来检查编译出来的机器码

comile-oper

链接

使用命令 i386-elf-ld -o kernel.bin -Ttext 0x0 -e main main.o 来链接 img

反汇编

ndisasm -b 32 kernel.bin