0%

FreeBSD源码笔记05-内核交叉编译

本文讲述在mac os x下编译freebsd内核源码的整个过程,为调试内核源码打下基础.

1. 编译环境介绍

  • 1.1 操作系统环境如下图:
  • 1.2 编译的文件夹结构如下图:

2. 编译过程分三步

  • 2.1 编译交叉编译用的工具链

    1
    2
    3
    4
    5
    export BASEDIR=$(pwd)
    export MAKEOBJDIRPREFIX=$BASEDIR/obj
    cd $BASEDIR/src

    make buildworld TARGET_ARCH=amd64 -j4
  • 2.2 编译内核

    1
    2
    3
    4
    5
    export BASEDIR=$(pwd)
    export MAKEOBJDIRPREFIX=$BASEDIR/obj
    cd $BASEDIR/src

    make buildkernel TARGET_ARCH=amd64 KERNCONF=GENERIC -j4
  • 2.3 打包出相应的内核

    1
    2
    3
    4
    5
    export BASEDIR=$(pwd)
    export MAKEOBJDIRPREFIX=$BASEDIR/obj
    cd $BASEDIR/src

    make installkernel TARGET_ARCH=amd64 KERNCONF=GENERIC DESTDIR=$BASEDIR/kernel
完整的脚本[build.sh]下载

3. QEMU虚拟机验证运行

这里首先需要安装qemu,mac os x中使用brew install qemu,记得更换源.

  • 3.1 创建虚拟机文件
    1
    qemu-img create -f qcow2 freebsd.qcow2 20G
  • 3.2 安装虚拟机
    下载freebsd的镜像文件,也可以直接使用qcow2文件,官网上有下载
    1
    2
    qemu-system-x86_64 -smp 2 -hda freebsd.qcow2 \
    -m 2048M -cdrom ./freebsd.iso -boot d
    安装完成以后使用硬盘启动,并将虚拟机的22端口映射到2222端口
    1
    2
    qemu-system-x86_64 -smp 2 -hda freebsd.qcow2 \ 
    -m 2048M -boot cd -net user,hostfwd=tcp::2222-:22 -net nic

    4. 验证新的内核

    将kernel/boot/kernel目录打包拷贝到虚拟机中.
    1
    scp -P 2222 ./kernel.zip root@127.0.0.1:~
    将虚拟机中原先的内核更改为kernel.old,并将新的内核解压到/boot中.
    1
    2
    3
    mv /boot/kernel /boot/kernel.old
    cd /boot
    unzip kernel.zip
    如下图所示: 重启内核,如果编译的内核有问题,记得换回原来的内核.