QEMU入门1:ubuntu22.04搭建QEMU运行环境

ops/2024/10/21 19:37:40/

文章目录

  • 前言
  • I 系统配置
    • 配置网络
      • 配ip
      • 配网关(有需要才配)
      • 配DNS
    • 配置系统服务
      • 配sshd
      • 改镜像源
  • II 搭建qemu8.1.5运行环境
    • 安装通用编译工具
    • 安装python
    • 下载qemu
    • 初次编译qemu
    • 安装qemu编译依赖
      • pip下载超时解决
      • git下载不了解决
      • 安装qemu需要的python包
      • 安装qemu需要的apt包
  • III 搭建aarch64内核编译环境
    • 安装交叉编译工具
    • 安装gdb-multiarch
    • 编译内核报错
    • 安装dtc工具
  • 下一篇

前言

我的环境经常被人搞坏掉😡,所以写篇文档记录下环境搭建的流程

I 系统配置

配置网络

ubuntu系统刚装好时可能没有ifconfig和nmtui工具,这里我们使用ip命令临时修改,有了网络之后喜欢什么工具自己装就是了

ip link show
# 如果网口状态是DOWN那么需要up
ip link set enp4s1 up

(很显然,这个enp4s1应该填你自己的网口名)

配ip

ip addr add 192.168.3.123/24 dev enp4s1
(如果是用vmware装的虚拟机, 他会自动分配ip不需要处理这步)

配网关(有需要才配)

ip route del default
ip route add default via 192.168.0.1

配DNS

/etc/resolv.conf
编辑内容 name server 192.168.54.44

配置系统服务

配sshd

PermitRootLogin yes

改镜像源

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
(不是改成这个,这是清华的帮助网页,进入这个网址,上面会告诉你怎么改)

II 搭建qemu8.1.5运行环境

安装通用编译工具

apt install gcc-9
apt install g++-9
apt install make
apt install cmake

安装python

apt install python3-venv
apt install python3-pip

下载qemu

qemu.org
太低版本的qemu不支持很多cpu
qemu-8.1.5就很可以
qemu-9.1.0新增了对aspeed公司的ast2700板卡的支持(目前似乎还不能用)

初次编译qemu

cd qemu-8.1.5;mkdir build;…/configure --target-list-aarch64-softmmu
(这个–target-list参数,意思是只编译一个aarch64的,我的虚拟机需要编译13分钟,如果全量编译估计要40分钟;如果你对自己电脑的cpu很自信,比如13/14代i7,就没必要加)
在这里插入图片描述
(全量编译需要编9000个文件)

失败
报错原因有很多,下面逐一解决

安装qemu编译依赖

pip下载超时解决

–default-timeout=100 手动配超时时间
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple 更换镜像源

git下载不了解决

给git配个代理

git config --global http.proxy http://proxy.xxx.com:8080
git config --global https.proxy http://proxy.xxx.com:8080

安装qemu需要的python包

pip install Sphinx
pip install Ninja
pip install meson
pip install spinx-rtd-theme

安装qemu需要的apt包

apt install pkg-config
apt install libglib2.0-dev (这玩意巨坑, 报错说依赖glib-2.0, 但包名叫glib2.0)
apt install libpixman-1-dev
apt install flex
apt install bison
apt install libfdt-dev

III 搭建aarch64内核编译环境

安装交叉编译工具

这里我要编译的是linux6.x版本的内核,所以我装9.x版本的gcc没问题;如果是4.x的内核,可能需要版本低一些的编译器,ubuntu22.04可能不支持,如果真的不行,我的建议是换ubuntu16或18

apt install gcc-9-aarch64-linux-gnu
apt install g++-9-aarch64-linux-gnu

(如果装完没软链接, 需要手动建, 不然指定交叉编译器的时候不好搞)

cd /usr/bin
ln -s aarch64-linux-gnu-cpp-9 /usr/bin/aarch64-linux-gnu-cpp
ln -s aarch64-linux-gnu-g++-9 /usr/bin/aarch64-linux-gnu-g++
ln -s aarch64-linux-gnu-gcc-9 /usr/bin/aarch64-linux-gnu-gcc
ln -s aarch64-linux-gnu-gcc-ar-9 /usr/bin/aarch64-linux-gnu-gcc-ar
ln -s aarch64-linux-gnu-gcc-nm-9 /usr/bin/aarch64-linux-gnu-gcc-nm
ln -s aarch64-linux-gnu-gcc-ranlib-9 /usr/bin/aarch64-linux-gnu-gcc-ranlib
ln -s aarch64-linux-gnu-gcc-gcov-9 /usr/bin/aarch64-linux-gnu-gcc-gcov
ln -s aarch64-linux-gnu-gcc-gcov-dump-9 /usr/bin/aarch64-linux-gnu-gcc-gcov-dump
ln -s aarch64-linux-gnu-gcc-gcov-tool-9 /usr/bin/aarch64-linux-gnu-gcc-gcov-tool

/etc/profile下添加如下内容

# AARCH64 CROSS_COMPILE
export CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-
export ARCH=arm64

安装gdb-multiarch

apt install gdb-multiarch

编译内核报错

apt install bc
make menuconfig报错:
apt install libncurses5-dev
opensslv.h missing报错:
apt install libssl-dev

安装dtc工具

实际上内核里面就有,但既然apt能装,那我也懒得给在PATH下建软链接了
apt install device-tree-compiler

下一篇

QEMU入门2:使用qemu简单的运行一个aarch64 linux内核


http://www.ppmy.cn/ops/127356.html

相关文章

python的特殊方法 str

特殊方法 str """ 特殊方法 __str____str__ 方法用于返回字符串形式,通常用于输出对象时使用这个方法返回的是一个字符串,用于描述对象的状态或者内容重写 __str__ 方法,可以用于定义输出对象的内容,使输出的内容…

docker如何建立本地私有仓库,并将docker镜像推到私有仓库

在 Docker 中,您可以通过 Docker Registry 创建本地私有仓库,并将 Docker 镜像推送到这个私有仓库。以下是具体步骤: 步骤 1:启动一个本地 Docker 私有仓库 拉取 registry 镜像: Docker 官方提供了一个 registry 镜像…

Web APIs - 第2天笔记(黑马笔记)

目录 Web APIs - 第2天 事件 事件监听 事件类型 事件处理程序 事件类型 鼠标事件 键盘事件 焦点事件 文本框输入事件 事件对象 环境对象 回调函数 Web APIs - 第2天 学会通过为DOM注册事件来实现可交互的网页特效。 能够判断函数运行的环境并确字 this 所指代的对象…

使用Spring Boot打造中小型医院网站

1 绪论 1.1研究背景 随着计算机技术的成熟、普及,现代信息技术革命的迅猛发展,正冲击并进而改变着经济和社会结构。信息化的程度已经成为一个国家,一个企业,一个组织仍至一个人发展的基础和竞争成败的关键。 在实际的生活中,用户都…

shell脚本实现批量请求

目录: 1、上脚本代码2、脚本解析3、执行脚本命令 1、上脚本代码 上述脚本使用循环来调用接口并记录每次接口的响应时间来定位接口的响应性能是否符合预期。 2、脚本解析 官方脚本介绍网址: https://www.w3cschool.cn/linux/linux-shell-passing-argume…

Android 第5种启动模式:singleInstancePerTask

Android 第5种启动模式:singleInstancePerTask 随着 Android 版本的更新,应用启动模式逐渐丰富。在 Android 12 中,新增了一种启动模式——singleInstancePerTask。它是继 standard、singleTop、singleTask 和 singleInstance 之后的第五种启…

【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式

上篇文章: 【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月18日20点56分 文章目录 基本…

R语言机器学习算法实战系列(四)随机森林算法+SHAP值 (Random Forest)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述特征选择数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型解释保…