本文的目的是爲了讓你快速搭建一個內核的驗證環境,以快速驗證你修改的代碼。鑑於我在自己通常會使用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-<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包,作爲一個開源開發者,你就好直接下載源碼樹,這樣方便看內核的提交記錄,下面是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
- 歡迎轉載,但請註明出處。