QEMU 搭建arm linux开发环境

Qemu 作为一款强大的开源虚拟化软件,为我们提供了一个便捷且经济实惠的方式来模拟各种硬件环境,从而在上面安装和学习 Linux 系统。本文将详细介绍如何使用 Qemu 搭建 Linux 学习环境,

环境准备

  • 操作系统:建议使用 Ubuntu 20.04 及以上版本,本文以 Ubuntu 20.04 为例进行介绍。因为 Ubuntu 系统拥有丰富的软件源和开发工具,方便我们进行后续的操作。
  • 硬件配置:至少 4GB 内存,以确保 QEMU 模拟的 ARM 系统能够稳定运行。20GB 以上可用磁盘空间,用于存储内核源码、根文件系统等文件。推荐使用双核及以上处理器,以提高编译和模拟的性能。
  • 网络连接:确保主机能够正常访问互联网,因为我们需要从网络上下载内核源码、工具链、根文件系统构建工具等资源。

1. 安装 QEMU

1.1 Ubuntu LTS版本与QEMU版本对照(APT方式)

在 Ubuntu 系统中,打开终端并执行以下命令来安装 QEMU 相关工具:

bash 复制代码
sudo apt-get update
sudo apt-get install qemu-system-arm
Ubuntu版本 QEMU版本 更新状态 ARM支持特性
18.04 LTS 2.11.1 停止维护 基础VExpress支持
20.04 LTS 4.2.1 安全更新 支持Cortex-A9完整外设
22.04 LTS 6.2.0 长期支持 支持TPM、安全启动
24.04 LTS 8.1.2 最新版本 支持RISC-V、LoongArch
1.2 指定版本安装
wget https://download.qemu.org/qemu-6.2.0.tar.xz
tar xvf qemu-6.2.0.tar.xz
cd qemu-6.2.0

# 2. 配置编译选项
./configure --target-list=arm-softmmu --prefix=/opt/qemu-6.2.0

# 3. 编译安装
make -j12
sudo make install

安装完成,查看版本号

2. 选择合适的 Linux 内核和 BusyBox 版本

  • Linux 内核:建议选择 4.x 或 5.x 系列的内核版本,因为这些版本对 ARM 架构有较好的支持,并且稳定性和性能都比较不错。例如,Linux 内核 5.15 版本是一个广泛使用且稳定的版本。
  • BusyBox:可以选择较新的稳定版本,如 1.33.x 或 1.34.x 系列,这些版本包含了丰富的工具,能满足根文件系统的基本需求。

3. 编译 Linux 内核

3.1 下载内核源码

可以从 Linux 内核官方网站(https://www.kernel.org/)下载所需版本的内核源码,以 5.15.18 版本为例:

bash 复制代码
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.18.tar.xz
tar xvf linux-5.15.18.tar.xz
cd linux-5.15.18
3.2 安装交叉编译工具链
bash 复制代码
sudo apt-get install gcc-arm-linux-gnueabi
3.3 配置内核
bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig

此命令使用 VExpress 开发板的默认配置。如果需要自定义配置,可以执行:

bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
3.4 编译内核
bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage dtbs -j$(nproc)

编译完成后,在 arch/arm/boot 目录下会生成 zImage 内核镜像文件,在 arch/arm/boot/dts 目录下会生成设备树文件 vexpress-v2p-ca9.dtb

4. 准备根文件系统(使用 BusyBox)

4.1 下载 BusyBox 源码

从 BusyBox 官方网站(https://busybox.net/downloads/)下载所需版本的源码,以 1.36.1 版本为例:

bash 复制代码
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar xvf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
4.2 配置 BusyBox
bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig

同样,如果需要自定义配置,可以执行:

bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig

在配置界面中,确保选择 "Build BusyBox as a static binary"(将 BusyBox 编译为静态二进制文件),这样可以避免动态链接库的依赖问题。

4.3 编译并安装 BusyBox
bash 复制代码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

编译完成后,会在 _install 目录下生成根文件系统的基本结构和工具。

4.4 完善根文件系统

创建必要的目录和文件:

bash 复制代码
cd _install
mkdir -p dev proc sys etc etc/init.d
sudo mknod -m 666 dev/null c 1 3  
sudo mknod -m 666 dev/console c 5 1  # 控制台设备

创建 /etc/init.d/rcS 启动脚本:

bash 复制代码
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "Welcome to QEMU VExpress-A9!"
exec /bin/sh

赋予脚本执行权限:

bash 复制代码
chmod +x etc/init.d/rcS
4.5 生成initramfs
find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio
cd ..
gzip initramfs.cpio

5. 启动模拟环境

使用以下 QEMU 命令启动 VExpress - A9 模拟环境:

bash 复制代码
qemu-system-arm \
    -M vexpress-a9 \
    -m 512M \
    -kernel linux-5.15.18/arch/arm/boot/zImage \
    -dtb linux-5.15.18/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
    -append "console=ttyAMA0 root=/dev/ram rdinit=/sbin/init" \
    -initrd busybox-1.36.1/initramfs.cpio.gz \
    -nographic
  • -M vexpress-a9:指定模拟的开发板型号为 VExpress - A9。
  • -m 512M:为虚拟机分配 512MB 的内存。
  • -kernel:指定内核镜像文件的路径。
  • -dtb:指定设备树文件的路径。
  • -initrd :初始内存文件系统 需使用gzip压缩的cpio归档
  • -nographic:以无图形界面模式启动。
  • -append:传递内核启动参数,指定控制台设备和根文件系统的挂载信息。

启动成功后,你将看到 Linux 系统的启动信息,最终会进入一个简单的 shell 环境。

成功显示:Welcome to QEMU VExpress-A9! 恭喜,环境搭建成功!

相关推荐
seu他山之石42 分钟前
插爆区域引小buf搬出去
linux·ic
niuTaylor1 小时前
【Linux和RTOS简析】
linux·运维·服务器·macos·macbook air·换硬盘·扩内存
什么半岛铁盒1 小时前
【Linux系统】进程状态:一个进程的轮回史
linux·服务器·编辑器
落——枫1 小时前
操作系统知识点23
linux·运维·服务器
誓约酱1 小时前
(每日一题) 力扣 860 柠檬水找零
linux·c语言·c++·算法·leetcode·职场和发展
学编程的小程1 小时前
无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
linux·windows·tcp/ip
Arbori_262151 小时前
linux 命令sed
linux·运维·服务器
ZhifeiDlut1 小时前
ubuntu 安装 Zotero
linux·ubuntu·zotero
獨枭1 小时前
Ubuntu 22.04 升级到 Ubuntu 24.04 全流程指南
linux·运维·ubuntu
me8322 小时前
【Linux docker】关于Docker 守护程序配置远程访问,安全认证以及idea连接。
linux·安全·docker