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
:以非图形化模式启动。
成功加载内核和根文件系统:
完毕。