Qemu简介
Qemu是一款开源免费的仿真软件,跟VMware station类似,可以仿真一台虚拟的电脑,然后在这个电脑上安装各种操作系统、运行各种应用程序。Qemu和VMware station不同的是,除了可以仿真一台电脑外,它还支持仿真一系列嵌入式开发板(支持ARM、MIPS、RISC-V等各种架构),模拟的开发板支持各种外设:串口、LCD、网卡、USB、SD卡等,可以在这个开发板上运行U-boot+Linux+Rootfs。对于缺少开发板学习嵌入式、研究U-boot、Linux内核的朋友,可以考虑使用qemu来搭建一块虚拟的开发板,方便快捷、经济实惠。
开发环境介绍
操作系统环境为Windows11+wsl2+Ubuntu22.04子系统
Qemu版本为6.2.0
交叉编译工具链版本为11.4.0
Linux内核版本为5.10.186
U-boot版本为2022.07-rc3
busybox版本为1.36.1
wsl子系统迁移
在应用商城安装好Ubuntu22.04子系统后,该系统默认安装在C盘,可能造成C盘空间紧张,于是将其迁移至其他空闲分区。
使用管理员身份打开powershell,输入命令查看wsl2发行版本:
wsl -l -v
命令显示结果如下,不同环境下NAME可能会有所不同,记住这个NAME:
输入命令关闭发行版:
wsl --shutdown
导出到D盘:
wsl --export Ubuntu D:\ubuntu.tar
注销原发行版:
wsl --unregister Ubuntu
在D盘根目录下新建wsl文件夹,用于存放新的发行版,然后使用如下命令将D:\ubuntu.tar导入到D:\wsl文件夹下:
wsl --import Ubuntu D:\wsl\Ubuntu D:\ubuntu.tar --version 2
等待一段时间导入成功后,输入如下指令修复默认登陆用户(ubuntu可改为自己的用户名):
Ubuntu config --default-user ubuntu
Ubuntu22.04切换软件源
修改软件源指令(这里推荐使用清华源):
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vi /etc/apt/sources.list
# 将sources.list替换为以下内容
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 更新软件源列表并升级已安装的软件包
sudo apt update
suto apt upgrade
配置安装交叉编译环境
sudo apt install gcc-arm-linux-gnueabi
sudo apt install g++-arm-linux-gnueabi
sudo apt install build-essential openssh-server vim net-tools flex bison libncurses-dev libssl-dev u-boot-tools
搭建qemu运行环境
# qemu依赖包
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install libtool
sudo apt-get install libsdl1.2-dev
sudo apt-get install libpixman-1-0
sudo apt-get install libpixman-1-dev
sudo apt-get install autoconf
# 安装qemu
sudo apt install qemu-system
检验环境搭建是否成功
交叉编译工具链:
$ arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/11/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --without-target-system-zlib --enable-multiarch --disable-sjlj-exceptions --with-specs='%{mfloat-abi=hard:-march=armv7-a -mcpu=generic-armv7-a -mfloat-abi=hard}' --with-arch=armv5t --with-float=soft --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
虚拟开发板QEMU:
$ qemu-system-arm --version
QEMU emulator version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6.12)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers