本文讲述在mac os x下编译freebsd内核源码的整个过程,为调试内核源码打下基础.
1. 编译环境介绍
- 1.1 操作系统环境如下图:
- 1.2 编译的文件夹结构如下图:
2. 编译过程分三步
2.1 编译交叉编译用的工具链
1
2
3
4
5export BASEDIR=$(pwd)
export MAKEOBJDIRPREFIX=$BASEDIR/obj
cd $BASEDIR/src
make buildworld TARGET_ARCH=amd64 -j42.2 编译内核
1
2
3
4
5export BASEDIR=$(pwd)
export MAKEOBJDIRPREFIX=$BASEDIR/obj
cd $BASEDIR/src
make buildkernel TARGET_ARCH=amd64 KERNCONF=GENERIC -j42.3 打包出相应的内核
1
2
3
4
5export BASEDIR=$(pwd)
export MAKEOBJDIRPREFIX=$BASEDIR/obj
cd $BASEDIR/src
make installkernel TARGET_ARCH=amd64 KERNCONF=GENERIC DESTDIR=$BASEDIR/kernel
3. QEMU虚拟机验证运行
这里首先需要安装qemu,mac os x中使用brew install qemu,记得更换源.
- 3.1 创建虚拟机文件
1
qemu-img create -f qcow2 freebsd.qcow2 20G
- 3.2 安装虚拟机
下载freebsd的镜像文件,也可以直接使用qcow2文件,官网上有下载安装完成以后使用硬盘启动,并将虚拟机的22端口映射到2222端口1
2qemu-system-x86_64 -smp 2 -hda freebsd.qcow2 \
-m 2048M -cdrom ./freebsd.iso -boot d1
2qemu-system-x86_64 -smp 2 -hda freebsd.qcow2 \
-m 2048M -boot cd -net user,hostfwd=tcp::2222-:22 -net nic4. 验证新的内核
将kernel/boot/kernel目录打包拷贝到虚拟机中.将虚拟机中原先的内核更改为kernel.old,并将新的内核解压到/boot中.1
scp -P 2222 ./kernel.zip root@127.0.0.1:~
如下图所示: 重启内核,如果编译的内核有问题,记得换回原来的内核.1
2
3mv /boot/kernel /boot/kernel.old
cd /boot
unzip kernel.zip