本文的目的是为了让你快速搭建一个内核的验证环境,以快速验证你修改的代码。鉴于我在自己通常会使用arm/am64/x86种架构,而x86很简单步骤基本根arm64一样,唯一区别就是不用使用交叉编译工具。所以就以这个arm/arm64为例子,而如果你只是关注架构无关的软件调试,那么随意选择一种即可。废话不多说,直接看步骤吧:
1. 跟文件系统的搭建:
a. 下载busybox(我这里以1.25.1版本为例子)
https://busybox.net/downloads/busybox-1.25.1.tar.bz2
or 直接clone下他的源码也行(busybox也是开源代码–-暂时没有研究兴趣)
git clonegit://git.busybox.net/busybox
如果你想用1.25.1版本的就checkout到对应的分支
b.下载arm与arm64的交叉编译工具链– 到linaro网址上下载吧,这里连接就不贴出来
c.直接下载我的弄好的一些配置文件,这样就可以直接按照下面的步骤来操作了,会省去很多不必要的麻烦。
git clone https://github.com/ethan1986/minifs.git
e.设置CROSS_COMPILE环境变量:
arm:export CROSS_COMPILE=arm-none-linux-gnueabi-
arm64: exportCROSS_COMPILE=aarch64-linux-gnu-
d. 拷贝对应的配置文件到busybox目录:
cptests/common/busybox/busybox-
e. 然后找busybox对应的目录下如
- cd busybox
- make
- make install
- mkdir -p./_install/etc/init.d
- mkdir -p./_install/dev
- mkdir -p./_install/proc
- mkdir -p./_install/sys
- ln -sf /sbin/init./_install/init
- cp -f
- cp -f
- cp -f
- cp -f
- cp -f
f.好了,可以打包了(可以有多中文件的形式,这里不给选择了,直接是压缩的cpio形式了)
- cd ./_install;find ./ | cpio -o -H newc | gzip -9 > ../rootfs.img; cd -
g.随便说一下文件解包吧,这样如果你拿到一个上面做好的根文件系统。就可以把自己的测试程序打包进行了(当然你可以配置qemu的网络直接通过网络去传输,暂时我也没有这个需求,就不去弄了,后博友知道怎么配置的,可以直接跟我说一下)
[ethan@ubuntu:common]$mkdir fs
[ethan@ubuntu:common]$cd fs/
[ethan@ubuntu:fs]$zcat ./../rootfs_arm32.img | cpio -i -d -H newc--no-absolute-filenames
2. 编译内核与启动qemu-一种让内核源码树保持干净的编译做法
a. 下载内核,你可以直接到kernelorg下载tag包,作为一个开源开发者,你就好直接下载源码树,这样方便看内核的提交记录,下面是linus的git仓库:
git clonegit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
b. arm的编译– 我使用的versatilepb平台,大家直接拿我的config吧(默认的config没有试过,应该也能起的来)
- cpversatilepb_config_4.12 .confg
- make ARCH=armO=../build/arm zImage dtbs -j16
- run_qemu_arm32.shzImage rootfs.img
c. arm64 编译–arm64不需要那么多平台相关的东西,直接defconfig就可以了,所以我对arm32是很不爽的,搞那么多平台相关的东西,真是蛋疼。arm公司已经无力做一个统一的平台了,反观x86就好多了,怪不得人家linus喜欢x86.
- make defconfig
- make ARCH=arm64O=../build/arm64 Image
- run_qemu_arm64.sh
- 欢迎转载,但请注明出处。