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 相关工具:

sudo apt-get update
sudo apt-get install qemu-system-arm
Ubuntu版本QEMU版本更新状态ARM支持特性
18.04 LTS2.11.1停止维护基础VExpress支持
20.04 LTS4.2.1安全更新支持Cortex-A9完整外设
22.04 LTS6.2.0长期支持支持TPM、安全启动
24.04 LTS8.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 版本为例:

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 安装交叉编译工具链
sudo apt-get install gcc-arm-linux-gnueabi
3.3 配置内核
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig

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

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
3.4 编译内核
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 版本为例:

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
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig

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

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig

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

在这里插入图片描述

4.3 编译并安装 BusyBox
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

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

4.4 完善根文件系统

创建必要的目录和文件:

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 启动脚本:

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

赋予脚本执行权限:

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 模拟环境:

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! 恭喜,环境搭建成功!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

坐井说天阔---DeepSeek-R1

前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…

EasyExcel 复杂填充

EasyExcel ​Excel表格中用{}或者{.} 来表示包裹要填充的变量,如果单元格文本中本来就有{、}左右大括号,需要在括号前面使用斜杠转义\{ 、\}。 ​代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和Excel中被{}包裹的变量名称一致。 …

华为防火墙pppoe拨号接入互联网配置案例

目录 1.pppoe拨号背景2.网络拓扑3.网络需求4.网络配置4.1 网络基础配置4.2 pppoe配置4.2.1 pppoe服务端配置(现网环境可忽略)4.2.2 pppoe客户端配置4.2.3 结果验证 5.小结 1.pppoe拨号背景 PPPoE(Point-to-Point Protocol Over Ethernet)拨号产生的背景…

认识vue-admin

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最…

【16】思科AireOS:创建使用 LWA 认证的 WLAN

1. 概述 LWA(Local Web Authentication)是一种基于 Web 认证的方式,允许无线客户端在连接 WLAN 后,使用 Web 认证页面进行身份验证。该方法适用于访客网络或需要身份认证的场景。 本指南详细介绍如何在 Cisco AireOS 无线控制器(WLC)上配置 LWA 认证的 WLAN,并确保认证…

电解电容的参数指标

容量 这个值通常是室温25℃,在一定频率和幅度的交流信号下测得的容量。容量会随着温度、直流电压、交流电压值的变化而改变。 额定电压 施加在电容上的最大直流电压,通常要求降额使用。 例如额定电压是4V,降额到70%使用,最高施…

【C++】IO流

目录 一、C语言的输入与输出二、流是什么三、CIO流3.1 C标准IO流3.2 C文件IO流3.2.1 二进制读写3.2.2 文本读写 四、stringstream的简单介绍结尾 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据…

软件开发 | GitHub企业版常见问题解读

什么是GitHub企业版? GitHub企业版是一个企业级软件开发平台,专为现代化开发的复杂工作流程而设计。 作为可扩展的平台解决方案,GitHub企业版使组织能够无缝集成其他工具和功能,并根据特定需求定制开发环境,提高整体…

红黑树:高效平衡二叉树的奥秘

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 引言 在数据结构的奇妙世界里🧐,二叉搜索树就像一把神奇的钥匙,能高效地查找数据。但这把钥匙也…

[免费]SpringBoot公益众筹爱心捐赠系统【论文+源码+SQL脚本】

大家好,我是老师,看到一个不错的SpringBoot公益众筹爱心捐赠系统,分享下哈。 项目介绍 公益捐助平台的发展背景可以追溯到几十年前,当时人们已经开始通过各种渠道进行公益捐助。随着互联网的普及,本文旨在探讨公益事业…

【设计模式】03-理解常见设计模式-行为型模式(专栏完结)

前言 前面我们介绍完创建型模式和创建型模式,这篇介绍最后的行为型模式,也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配,以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…

DeepSeek 助力 Vue 开发:打造丝滑的卡片(Card)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

基于单片机的开关电源设计(论文+源码)

本次基于单片机的开关电源节能控制系统的设计中,在功能上设计如下: (1)系统输入220V; (2)系统.输出0-12V可调,步进0.1V; (3)LCD液晶显示实时电压&#xff…

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架,API文档和API定义同步更新,可以在线测…

Atlassian工具集:Jira与Confluence集成优势、使用技巧、更新功能等

本文由Atlassian全球白金合作伙伴-龙智翻译整理,深入探讨了Jira和Confluence最受欢迎的集成功能与技巧,期待为您新一年的团队协作开个好头。 此前,来自K15t 的Customer Advocate Matt Reiner 和Atlassian副产品经理David Olive在一场学习会议…

Qt QOpenGLShaderProgram详解

1. 概述 QOpenGLShaderProgram 是 Qt 框架中用于管理 OpenGL 着色器程序的类。它提供了一种方便的方式来创建、编译和链接着色器,以及管理着色器程序中的属性和统一变量。通过 QOpenGLShaderProgram,开发者可以轻松地将顶点着色器和片段着色器组合成一个…

小爱音箱控制手机和电视听歌的尝试

最近买了小爱音箱pro,老婆让我扔了,吃灰多年的旧音箱。当然舍不得,比小爱还贵,刚好还有一台红米手机,能插音箱,为了让音箱更加灵活,买了个2元的蓝牙接收模块Type-c供电3.5接口。这就是本次尝试起…

ESXi安装【真机和虚拟机】(超详细)

项目简介: ESXi(Elastic Sky X Integrated)是VMware公司开发的一种裸机虚拟化管理程序,允许用户在单一物理服务器上运行多个虚拟机(VM)。它直接安装在服务器硬件上,而不是操作系统之上&#xff…

本地通过隧道连接服务器的mysql

前言 服务器上部署了 mysql,本地希望能访问该 mysql,但是又不希望 mysql 直接暴露在公网上 那么可以通过隧道连接 ssh 端口的方式进行连接 从外网看,服务器只开放了一个 ssh 端口,并没有开放 3306 监听端口 设置本地免密登录 …

MyBatis-Plus模块扩展分页查询

文章目录 1.说明2.common-mybatis-plus-starter1.目录结构2.MybatisPLusAutoConfiguration.java 添加MyBatis Plus分页插件3.PlusPageResult.java MyBatis Plus 分页对象的增强版4.SunPlusPageHelper.java 分页工具类 3.EasyCode模板修改4.common-mybatis-plus-starter-demo 分…