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

文章目录

前言

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

I 系统配置

配置网络

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

bash 复制代码
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配个代理

bash 复制代码
git config --global http.proxy http://proxy.xxx.com:8080
git config --global https.proxy http://proxy.xxx.com:8080

安装qemu需要的python包

bash 复制代码
pip install Sphinx
pip install Ninja
pip install meson
pip install spinx-rtd-theme

安装qemu需要的apt包

bash 复制代码
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

bash 复制代码
apt install gcc-9-aarch64-linux-gnu
apt install g++-9-aarch64-linux-gnu

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

bash 复制代码
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下添加如下内容

bash 复制代码
# 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内核

相关推荐
Yupureki1 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp
楼田莉子1 小时前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
烛衔溟2 小时前
TypeScript 索引签名、只读数组与 keyof / typeof 入门
linux·ubuntu·typescript
笨笨饿3 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
fish_xk3 小时前
Linux的权限
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志4 小时前
Linux 驱动与应用开发核心自测题库(面试官问答完整版)
linux·运维·php
薛定谔的悦6 小时前
储能充放电状态机执行逻辑详解
linux·数据库·能源·储能·bms
嵌入式×边缘AI:打怪升级日志6 小时前
Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持).md
linux·运维·服务器
前端之虎陈随易7 小时前
为什么今天还会有新语言?MoonBit 想解决什么问题?
大数据·linux·javascript·人工智能·算法·microsoft·typescript
G.晴天7 小时前
Linux常用命令练习流程
java·linux·运维·服务器·tomcat