内核调试 之 搭建qmeu 调试环境

本文的目的是为了让你快速搭建一个内核的验证环境,以快速验证你修改的代码。鉴于我在自己通常会使用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.下载armarm64的交叉编译工具链– 到linaro网址上下载吧,这里连接就不贴出来


c.直接下载我的弄好的一些配置文件,这样就可以直接按照下面的步骤来操作了,会省去很多不必要的麻烦。

git clone https://github.com/ethan1986/minifs.git


e.设置CROSS_COMPILE环境变量:

armexport CROSS_COMPILE=arm-none-linux-gnueabi-

arm64: exportCROSS_COMPILE=aarch64-linux-gnu-

d. 拷贝对应的配置文件到busybox目录:

cptests/common/busybox/busybox-_defconfig/.config

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/fstab ./_install/etc/fstab

- cp -f/rcS ./_install/etc/init.d/rcS

- cp -f/motd ./_install/etc/motd

- cp -f/logo_linux_clut224.ppm./_install/etc/logo_linux_clut224.ppm

- cp -f/logo_linux_vga16.ppm./_install/etc/logo_linux_vga16.ppm


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包,作为一个开源开发者,你就好直接下载源码树,这样方便看内核的提交记录,下面是linusgit仓库:

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


- 欢迎转载,但请注明出处。

你可能感兴趣的:(开发环境相关)