QEMU使用步骤

news2024/11/25 20:23:16

1、安装虚拟机环境:ubuntu-16.04.7-desktop-amd64.iso,下载地址:Index of /ubuntu-releases/16.04.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

2、安装gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz到/opt目录,下载地址:Linaro Releases

添加环境变量:

sudo gedit /etc/profile

在 profile 最后加入

export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin:$PATH

然后

source /etc/profile

(注意安装版本gcc-linaro-6.5.0-2018.12编译qemu时可能报错)

3、安装qemu-5.0.0.tar.xz,下载地址:

Index of / (qemu.org)

安装步骤:

a、tar xf qemu-5.0.0.tar.xz
b、cd qemu-5.0.0
c、./configure --prefix=/usr/local/qemu --target-list=arm-softmmu --audio-drv-list=
d、sudo make && sudo make install

安装成功后在/usr/local/qemu/bin目录下会生成如下文件:

安装时根据错误提示可能需要安装以下软件:

sudo apt-get install build-essential pkg-config zlib1g-dev libglib2.0-0 libglib2.0-dev  libsdl1.2-dev libpixman-1-dev libfdt-dev autoconf automake libtool librbd-dev libaio-dev flex bison -y

(注意:通过命令sudo apt-get install qemu安装的版本为2.11.1,后面价值内核镜像时可能报以下错误)

4、输入:qemu-system-arm -M help查看支持芯片仿真类型,这里选择:vexpress-a9

5、下载uboot,下载地址:可用于QEMU仿真的uboot源码资源-CSDN文库

uboot编译步骤:

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabihf-

make clean && make vexpress_ca9x4_defconfig # 不需要改配置

make -j4

加载运行uboot:

qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic

输入:ctrl + A 后按 X 退出 QEMU

(注意:https://gitlab.denx.de/u-boot/u-boot上下载的uboot源码用make vexpress_ca9x4_defconfig 配置编译报错)

6、下载内核linux-5.4.95,下载地址https://www.kernel.org

/arch/arm/configs 目录里的是各个厂商的内核配置文件

内核编译步骤:

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabihf-

make vexpress_defconfig 

make -j4

(注意:vexpress_defconfig 中设置了 CONFIG_CMDLINE="console=ttyAMA0",仿真运行内核时需要配置改启动参数)

加载运行内核:

qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

7、busybox 下载链接 BusyBox 解压并进入其根目录

编译文件系统:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make defconfig 
make menuconfig
#   勾选  Settings-> [*] Build static binary (no shared libs) 

Busybox Settings  --->
    Build Options  --->
       [*] Build BusyBox as a static binary (no shared libs) 

make -j6
make install

通过 make install 命令把生成的根文件创建在顶层目录(busybox-1.32.1根目录) _install 下,如果是通过 make defconfig O=…/output 导出配置的,则在相应的output目录下进入 _install 目录

在busybox-1.32.1根目录创建文件 make_rootfs.sh:

#    File Name:  make_rootfs.sh
##
#!/bin/sh
base=`pwd`
tmpfs=/_tmpfs

# 如果存在删除
sudo rm -rf rootfs
sudo rm -rf ${tmpfs}
sudo rm -f a9rootfs.ext3

sudo mkdir rootfs
# 拷贝 _install 中文件 到 rootfs
sudo cp _install/*  rootfs/ -raf

#sudo mkdir -p rootfs/{lib,proc,sys,tmp,root,var,mnt}
cd rootfs && sudo mkdir -p lib proc sys tmp root var mnt && cd ${base}

# 根据自己的实际情况, 找到并 拷贝 arm-gcc 中的 libc中的所有.so 库
sudo cp -arf /opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/*  rootfs/lib

#优化交叉编译工具链库文件
sudo arm-linux-gnueabihf-strip rootfs/lib/*

sudo cp examples/bootfloppy/etc rootfs/ -arf
sudo sed -r  "/askfirst/ s/.*/::respawn:-\/bin\/sh/" rootfs/etc/inittab -i
sudo mkdir -p rootfs/dev/
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2pro
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3
sudo dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=100
# 如果提示 "No space left on device" 证明 dd 命令中 count 的大小不够,可以先进行瘦身

sudo mkfs.ext3 a9rootfs.ext3
sudo mkdir -p ${tmpfs}
sudo chmod 777 ${tmpfs}
sudo mount -t ext3 a9rootfs.ext3 ${tmpfs}/ -o loop
sudo cp -r rootfs/*  ${tmpfs}/
sudo umount ${tmpfs}

运行make_rootfs.sh脚本生成a9rootfs.ext3文件系统文件。

加载运行文件系统:

qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd ../busybox-1.32.1/a9rootfs.ext3

参考博客:

https://blog.csdn.net/leacock1991/article/details/113703897

搭建linux调试环境 (一)-- qemu环境搭建vexpress开发平台 - Edver - 博客园 (cnblogs.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漫漫数学之旅020

文章目录 经典格言数学习题古今评注名人小传 - 尼尔斯玻尔 经典格言 专家就是这样一个人,在一个很狭小的领域里犯下一切可能犯的错误。——尼尔斯玻尔(Niels Bohr) 尼尔斯玻尔,这位量子物理界的巨头,以一句幽默且充满…

【Python】高级数据类型

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

几个经典金融理论

完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 一、预期效用理论 预期效用理论是描述人们在做出决策时如何考虑风险和不确定性的一种理论。该理论最初由经济学家冯诺伊曼(John von Neumann)和奥斯卡摩根斯坦恩(Oskar…

图像配准之HomographyNet

文章名称:Deep Image Homography Estimation,论文地址:https://arxiv.org/pdf/1606.03798.pdf,代码地址:GitHub - mazenmel/Deep-homography-estimation-Pytorch: Deep homography network with Pytorch 1、背景介绍 …

maven创建webapp+Freemarker组件的实现

下载安装配置maven Maven官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Maven最新版正式版官方版绿色版下载,Maven安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com/s/9QRqVv-TcUY.html链接为3.6.2-3.6.3的版本 下载解…

【C++】类和对象(四)

前言:在类和对象中,我们走过了十分漫长的道路,今天我们将进一步学习类和对象,类和对象这块荆棘地很长,各位一起加油呀。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量&a…

《小强升职记:时间管理故事书》阅读笔记

目录 前言 一、你的时间都去哪儿了 1.1 你真的很忙吗 1.2 如何记录和分析时间日志 1.3 如何找到自己的价值观 二、无压工作法 2.1 传说中的“四象限法则 2.2 衣柜整理法 三、行动时遇到问题怎么办? 3.1 臣服与拖延 3.2 如何做到要事第一? 3.…

【碎片知识点】安装Linux系统 VMware与kali

天命:VMware就是可以运行操作系统的载体,kali就是Linux的其中一个分支 天命:Linux有两个分支版本:centos与ubuntu,kali底层就是ubuntu(所有Linux用起来都差不多,没啥区别) 天命&…

linux系统zabbix自动发现主机

自动发现主机 新的主机浏览器配置创建发现规则创建发现主机后动作 新的主机 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm# yum clean allyum install zabbix-agentvim /etc/zabbix/zabbix_agentd.conf Server10.12.153.1…

C语言:内存分配---栈区、堆区、全局区、常量区和代码区

一、C语言内存分区 C语言内存分区示意图如下: 1. 栈区 栈区介绍 栈区由编译器自动分配释放,由操作系统自动管理,无须手动管理。栈区上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。栈区按内存…

微服务中台架构的设计与实现

本文将探讨微服务中台架构的设计与实现,介绍如何通过微服务的方式进行系统拆分和组合,构建灵活、可扩展且易于维护的中台架构,以加速企业的数字化转型和提升竞争力。 ## 1. 引言 随着企业规模的不断扩大和业务的日益复杂化,传统…

山西电力市场日前价格预测【2024-02-12】

日前价格预测 预测说明: 如上图所示,预测明日(2024-02-12)山西电力市场全天平均日前电价为127.42元/MWh。其中,最高日前电价为369.24元/MWh,预计出现在18:45。最低日前电价为0.00元/MWh,预计出…

库函数strlen的实现

目录 一、原理二、思路三、实现 一、原理 库函数strlen的功能是求字符串长度,统计的是字符串中 \0 之前的字符的个数。 函数原型如下: size_t strlen ( const char * str );二、思路 参数str接收⼀个字符串的起始地址,然后开始统计字符串中…

WEB APIs(1)

变量声明const(修饰常量) const优先,如react,基本const, 对于引用数据类型,可用const声明,因为储存的是地址 何为APIs 可以使用js操作HTML和浏览器 分类:DOM(文档对象…

C# Winform .net6自绘的圆形进度条

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;namespace Net6_GeneralUiWinFrm {public class CircularProgressBar : Control{private int progress 0;private int borderWidth 20; // 增加的边框宽度public int Progr…

全闭环直播推流桌面分享远控系统

直播推流涉及多协议,多端技术栈和知识点,,想要做好并不容易,经过几年时间的迭代,终于小有成就,聚集了媒体服务器,实时会议sfu,远控kvm等功能。可以做一个音视频应用的瑞士小军刀。主…

为什么说技术进步很慢? —— 技术的先进性与其当下价值的不匹配

一、背景 技术进步是否缓慢是一个相对的概念,需要在不同的领域和时间段内进行分析。以下是一些不同领域中可能造成技术进步看似缓慢的原因: 1. **基础研究瓶颈**:许多先进技术的发展依赖于基础科学的突破,而这些突破往往需要长时…

openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络

文章目录 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络219.1 查看网络状况 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络 获取openGauss节点的CPU、内存、I/O和网络资源使用情况,确认这些资源…

论文阅读-面向机器学习的云工作负载预测模型的性能分析

论文名称:Performance Analysis of Machine Learning Centered Workload Prediction Models for Cloud 摘要 由于异构服务类型和动态工作负载的高变异性和维度,资源使用的精确估计是一个复杂而具有挑战性的问题。在过去几年中,资源使用和流…

【机器学习笔记】3 逻辑回归

分类问题 分类问题监督学习最主要的类型,主要特征是标签离散,逻辑回归是解决分类问题的常见算法,输入变量可以是离散的也可以是连续的 二分类 先从用蓝色圆形数据定义为类型1,其余数据为类型2;只需要分类1次&#x…