1 準備工作
1.1 安裝qemu
在ubuntu系統中使用以下命令安裝qemu。
sudo apt install qemu-system-arm
安裝完畢后,在終端輸入: qemu- 后按TAB鍵,彈出下列命令證明安裝成功。
1.2 安裝arm交叉編譯工具鏈
sudo apt install gcc-arm-linux-gnueabihf
安裝之后,在終端輸入arm-linux- gnueabihf- 后按TAB鍵,出現下列命令,表示安裝成功。
1.3 下載linux kernel和buildroot
下載需要的linux kernel和build root源碼,這里以linux-6.14.2.tar.xz和buildroot-2024.02.tar.gz為例。
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.14.2.tar.xz wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
進入下載目錄,分別解壓
tar -xvf linux-6.14.2.tar.xz tar -xvf buildroot-2024.02.tar.gz
解壓后如下:
2 配置和編譯linux內核
2.1 配置內核
進入解壓后的linux-6.14.2目錄,對于 vexpress-ca9 開發板,執行如下默認配置。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_defconfig
為了后續能正確使用ttyAMA0,需要進入meunconfig進行如下配置。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
注意,如果這里沒有按照上圖配置,后續使用qemu加載內核和根文件系統后,無法進入系統,會報下面的錯誤。
2.2 編譯內核
執行編譯命令,生成內核鏡像zImage和設備樹dtb文件。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs -j8
編譯完成后,zImage
文件會生成在 arch/arm/boot
目錄下,設備樹文件(如 vexpress-v2p-ca9.dtb
)會生成在 arch/arm/boot/dts/arm
目錄下。
3 使用buildroot制作根文件系統
3.1 配置buildroot
進入解壓后的buildroot-2024.02目錄,使用vexpress-ca9開發板默認配置。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- qemu_arm_vexpress_defconfig
進入menuconfig,配置支持mdev。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
3.2 編譯buildroot
編譯buildroot,生成根文件系統。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
編譯完成后,根文件系統會生成在 output/images/rootfs.ext2
。
4 啟動qemu模擬vexpress-ca9
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel "/home/cat/work/drv/linux-6.14.2/arch/arm/boot/zImage" -dtb "/home/cat/work/drv/linux-6.14.2/arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb" -sd "/home/cat/work/drv/buildroot-2024.02/output/images/rootfs.ext2" -append "console=ttyAMA0,115200 root=/dev/mmcblk0 rw" -nographic ?
參數說明:
-
-M vexpress-a9
:指定模擬的開發板為 VExpress - CA9。 -
-m 512M
:分配 512MB 內存。 -
-kernel
:指定內核鏡像文件(zImage)。 -
-dtb
:指定設備樹文件(dtb)。 -
-sd:指定根文件系統(rootfs.ext2)。
-
-append
:傳遞內核啟動參數。 -
-nographic
:以非圖形化模式啟動。
成功加載內核和根文件系統:
完畢。