本文介绍在Windows10 上通过QEMU运行Ubuntu20.04 并搭建开发环境,在虚机环境学习Linux驱动开发。
-
安装QEMU
- 链接:QEMU for Windows – Installers (64 bit)
- 下载最新版安装包后双击运行安装,博主安装的是qemu-w64-setup-20250422
- 将QEMU安装目录添加进环境变量
-
下载Ubuntu镜像
- 链接:Get Ubuntu Server | Download | Ubuntu
- 博主安装的是20.04.6,得到镜像ubuntu-20.04.6-live-server-amd64.iso
-
在QEMU中安装Ubuntu
- 打开cmd,进入希望虚拟机安装的目录
- 创建系统盘:
qemu-img create -f qcow2 ubuntu-20.04.5-live-server-arm64.img 256G
- ubuntu-20.04.5-live-server-arm64.img:生成的系统盘文件名,可自定
- 256G:系统盘大小,按需设置,博主偏向设较大
- 安装镜像至系统盘
-
执行命令:
qemu-system-x86_64 -m 2048 -smp 16 ubuntu-20.04.5-live-server-arm64.img -cdrom ubuntu-20.04.6-live-server-amd64.iso
-
-m 2048:虚拟机内存大小,单位KB
-
-smp 16:虚拟机核数,并非直接使用物理核,可以设置较大,可以提升速度
-
ubuntu-20.04.5-live-server-arm64.img:第2步中创建的系统盘名称
-
-cdrom ubuntu-20.04.6-live-server-amd64.iso:下载的Ubuntu镜像
-
-
执行命令即会进入Ubuntu的installer节目,按指引完成安装
-
安装完成后关闭虚拟机
-
-
从系统盘启动
-
执行命令:
qemu-system-x86_64 -m 2048 -smp 16 ubuntu-20.04.5-live-server-arm64.img
- 即可从系统盘启动镜像
-
-
QEMU启用加速
- 上述启动命令未启用加速引擎,运行速度较慢,启用加速后可以较大提升速率
- QEMU支持多种加速引擎,如haxm、tcg、whpx,执行命令查看当前QEMU版本所支持的引擎
qemu-system-x86_64 -accel help
-
博主当前版本仅支持tcg和whpx,测试tcg加速效果不明显,遂采用whpx
-
whpx是基于hyper-v的,使用需开启hyper-v功能
-
- 博主启用后仍不可使用whpx,在pwershell中分别执行下述命令后重启才可使用
-
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All bcdedit /set hypervisorlaunchtype auto
- 至此whpx启用完成
- 更新命令,增加-machine accel=whpx表示启用whpx加速
-
qemu-system-x86_64 -m 2048 -smp 16 -machine accel=whpx ubuntu-20.04.5-live-server-arm64.img
- 本次启动即可发现运行速度有较大提升
-
主机连接虚拟机
- 上述启动的虚拟机会以nat模式共享主机网络实现上网,但是主机和虚拟机之间不可直接通信,导致开发困难
- QEMU支持直接映射虚拟机网络至主机loop back,如映射虚拟机的ssh端口22至本机127.0.0.1:2222,后续主机可通过该地址连接虚拟机ssh
- 更新启动命令增加参数-netdev user,id=net0,hostfwd=tcp::2222-:22 -device virtio-net-pci,netdev=net0
-
qemu-system-x86_64 -m 2048 -smp 16 -machine accel=whpx ubuntu-20.04.5-live-server-arm64.img -netdev user,id=net0,hostfwd=tcp::2222-:22 -device virtio-net-pci,netdev=net0
- -netdev user,id=net0设置网络模式为user,即nat模式,id=net0为索引名供后续参数使用
- hostfwd=tcp::2222-:22:映射虚拟机22端口至主机2222端口
- -device virtio-net-pci,netdev=net0:使用虚拟网卡设备virtio-net-pci,索引为之前的user模式网络接口
- 即可使用127.0.0.1:2222连接虚拟机ssh
-
VScode搭建远程开发环境
- 因虚拟机命令行使用不便,随通过VScode插件实现远程编写代码即命令行操作
- 安装remote ssh
- 配置ssh
- 之后点击连接
- 注意VScode上方搜索栏会弹出选项机输入密码操作
- 在文件栏可打开远程服务器的目录
- 终端也会自动连接远程ssh
- 配置密钥登陆
- powershell执行ssh-keygen.exe生成密钥,目录在user目录下.ssh
- 将公钥文件id_ed25519.pub上传服务器,直接在windows窗口将文件拖入vscode的文件栏即可上传文件
- 将公钥文件写入Linux home目录下.ssh中的
- 后续即可实现密钥登陆,无需填写密码
- 若虚拟机环境变化,如更换了虚拟机,即使再次配置了公钥也可能会无法连接,原因是本地已存在之前的ssh相关缓存文件,解决办法是删除known_hosts文件后重新连接
-
QEMU快照
- 运行虚拟机后在虚拟机界面执行atrl+art+2可切换至QEMU控制台,在该控制台可对当前虚拟机执行快照操作
- 快照命令如下
-
savevm snapshot_name # 创建快照 info snapshots # 查看快照列表 loadvm snapshot_name # 恢复快照
-
savevm可能报错
-
-
原因是开启了加速,可以先去掉加速启动参数-machine accel=whpx启动一次,报错快照后再重新启用加速启动
-
下载内核源码
- 安装依赖
-
sudo apt install build-essential libncurses-dev flex bison libssl-dev dpkg-dev dwarves libelf-dev
- 下载和当前系统版本匹配的源码
-
sudo apt source linux-image-unsigned-$(uname -r)
- 版本号并不一定完全相同,注意辨别
- 进入到下载的源码目录
- 获取当前内核配置写入.config
-
sudo make oldconfig -j16
- 编译
-
sudo make -j16
- 随后即可加载所需ko进行调试