你是否被 GNU/Linux 的图形化界面 X11 所困扰,架构老旧,配置复杂,bug多。以Gentoo为例,启用X会导致安装很多库,依赖复杂不说,要是使用独显的话,开源的nouveau体验很糟糕,发挥不出显卡性能;使用官方闭源驱动nvidia-drivers,它对非x86机器支持很差 Raspberry Pi support (arm64)?,你不光要接受EULA,而且每次编译安装kernel的时候都要用nVidia那一套闭源工具重新编译和内核对应的nvidia.ko。这就太不优雅了!我想如果没有X,那么 Linux 新手的问题可能会减少90%。
windows 10 就不存在这个问题,用户基础巨大,上游官方支持完善。对于非Linux图形开发者来说,抛弃X11可能是一个更理智的选择。
把 Linux 和 windows 10 融合在一起呢?虚拟化技术使windows10虚拟机有接近原生的体验
- 得益于intel vt-x(amd-v) 技术,qemu+kvm的效率已经非常高了
- PCIe passthrough 以及各种直通技术允许linux kernel把设备直接呈现给虚拟机,就像虚拟机直接使用一样
既然微软可以拥抱开源社区,推出WSL,把 Linux 子系统集成到 windows。那我们为什么不把 windows子系统 集成到 Linux 呢?
这样,一方面我们拥有定制kernel的自由,另一方面我们不需要折腾X11来满足日常使用
主板 firmware 设置
打开主板 bios/efi 的 VT-d 和 IOMMU 选项,此时从 /proc/cpuinfo 能看到 vmx(intel) 或者 svm(amd) 。arm64需要打开 smmu。
内核配置
1 | enable iommu: |
host os可以不安装任何显卡/PCIe设备驱动。编译安装kernel
内核启动参数
1 | iommu=pt intel_iommu=on |
给系统对应的bootloader,例如grub、lilo增加内核参数
我这里没有安装bootloader,使用的 EFI stub 直接启动内核,所以需要更新 efi boot entry
1 | efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Gentoo 6.13.0-rc4" --loader " \EFI\Gentoo_testing\bzImage-6.13.0-rc4.efi" -u "root=/dev/nvme0n1p2 intel_iom |
配置 PCIe passthrough 设备
编辑 /etc/modprobe.d/vfio.conf,让Linux对直通设备使用vfio驱动而非设备驱动
1 | options vfio-pci ids=xxxx:xxxx,xxxx:xxxx,xxxx:xxxx |
当然也可以手工卸载设备,绑定vfio驱动
1 | gpu="0000:01:00.0" |
启动虚拟机qemu
我这里用qemu 9.2.3
自己编译的话建议打开 io-uring、usb passthrough、vhost-net、virtfs 选项
创建虚拟硬盘
1 | qemu-img create -f qcow2 win11.qcow2 1024G |
启用嵌套虚拟化
为了在windows10中可以正常使用wsl或者hyper-v,需要打开kvm嵌套虚拟化
1 | cat /sys/module/kvm_intel/parameters/nested |
启动虚拟机
1 | qemu-system-x86_64 \ |
- cpu 使用host会导致 windows guest系统开启虚拟机功能无法进入系统,所以选择Skylake-Client-noTSX-IBRS
- hypervisor=off 避免kvm向windows报告它本身运行在虚拟化环境 forum.proxmox.com,否则systeminfo hyperv会返回 已检测到虚拟机监控程序。将不显示 hyper-v 所需的功能
- vmx=on 为虚拟机打开vt-x功能,默认应该就是打开的
- mpx=off 禁用后提高兼容性,否则可能进不去windows10系统 superuser.com
- vfio-pci 配置 pcie 直通
- usb-host 配置 usb键盘鼠标 直通,把host的键鼠给guest用
- hostfwd=tcp::4444-:22 映射localhost:4444 到windows10 openssh端口
安装windows10
1 | <qemu command line> -boot d -cdrom /path/to/windows10.iso |
正常安装win10即可,微软会自动下载nVidia显卡驱动,接下来安装ubuntu 24.04 Linux子系统
- 从Linux子系统登录到host系统可以直接ssh 10.0.2.2
- 如果想从host登录到Linux子系统,需要给windows10安装 Win32-OpenSSH,再从powershell进入wsl
安装pytorch
按照官方教程,在wsl安装pytorch非常容易
1 | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 |
值得注意的是,安装pytorch不需要安装cuda和cudnn!编译pytorch的时候才需要。很多人以讹传讹,给新手造成了困扰。仅仅是跑pytorch,pytorch+driver足够了
总结
最后,就是配置一下windows10了,安装好自己喜欢的软件 vscode、Termius/xshell/MobaXterm、steam、modelsim、vivado,远离x11,流畅的游戏,开心的使用电脑吧
refer
GPU passthrough Gentoo wiki
PCI_passthrough_via_OVMF archlinux wiki
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章