內核調試 之 搭建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-<busybox_version>_defconfig<busybox_source_directory>/.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<filesys-ethan>/fstab ./_install/etc/fstab

- cp -f<filesys-ethan>/rcS ./_install/etc/init.d/rcS

- cp -f<filesys-ethan>/motd ./_install/etc/motd

- cp -f<filesys-ethan>/logo_linux_clut224.ppm./_install/etc/logo_linux_clut224.ppm

- cp -f<filesys-ethan>/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


- 歡迎轉載,但請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章