quickpassthrough/README.md

53 lines
3.6 KiB
Markdown
Raw Normal View History

# QuickPassthrough
2022-03-11 02:54:16 -05:00
A project to simplify setting up GPU passthrough on your Linux host for [QuickEMU](https://github.com/quickemu-project/quickemu)(vfio support not developed yet) and libvirt/virt-manager
2022-02-25 07:29:08 -05:00
2023-04-09 20:10:12 -04:00
You can use it by simply downloading the latest release and run it inside a terminal/shell or by downloading and compiling it yourself with the commands below.
2022-02-27 13:56:39 -05:00
```bash
git clone https://github.com/HikariKnight/quickpassthrough.git
cd quickpassthrough
2023-04-09 20:10:12 -04:00
go mod download
CGO_ENABLED=0 go build -o quickpassthrough cmd/main.go
2022-02-27 13:56:39 -05:00
```
2022-02-27 11:20:09 -05:00
2023-04-09 20:10:12 -04:00
## Features
* Show general warning to user and inform about making a backup and general expectations
* Detect if user has an amd or intel CPU and provide the correct IOMMU kernel args based on that
2023-04-12 20:00:29 -04:00
* Configure 2nd GPU for GPU Passthrough (1 for host, 1 for VM)
2023-04-09 20:10:12 -04:00
* Use [ls-iommu](https://github.com/HikariKnight/ls-iommu) to find PCI devices like graphic cards, usb controllers, etc and see what IOMMU group they are in
2023-04-12 20:00:29 -04:00
* Enable and configure vfio modules (initramfs-tools, dracut, modprobe and mkinitcpio)
2023-04-09 20:10:12 -04:00
* Generate the correct kernel arguments for grub and systemd-boot~~
2023-04-12 20:00:29 -04:00
* Generate script to use for dumping the vbios rom (as some cards require a romfile for passthrough to work), however no rom patching support planned.
* Configure kernel arguments for systemd-boot (using kernelstub or grubby)
* Configure kernel arguments for grub2 (editing /etc/default/grub or using grubby)
2023-04-09 20:10:12 -04:00
* A system you can navigate through, built using [Bubble Tea](https://github.com/charmbracelet/bubbletea) (Help appreciated to make this menu better!)
* ~~Coloured highlight/text for important information?~~ (not implemented yet)
* Make sure [vendor-reset](https://github.com/gnif/vendor-reset) module is loaded before vfio, check the repository for the list of cards that require it!
2023-04-12 20:00:29 -04:00
* Provides you with the correct kernel arguments to add to your bootloader entry if a supported bootloader is not found
2023-04-09 20:10:12 -04:00
## Features now handled by [ls-iommu](https://github.com/HikariKnight/ls-iommu)
* Automatically handle GPUs where parts of it might be in separate IOMMU groups (ex: RX6600XT)
* Fetch the ID and PCI Address of devices
* Locate the vbios rom path on the system
* Tell the user to enable IOMMU (VT-d/AMD-v) on their motherboard and bootloader
* Get a list of devices, their IOMMU groups and various other information
2022-02-27 13:56:39 -05:00
2023-04-12 20:00:29 -04:00
## Contributing
<img src="https://user-images.githubusercontent.com/2557889/156038229-4e70352f-9182-4474-8e32-d14d3ad67566.png" width="250px">
This project originally started out as a bash only project, upon completing the proof of concept it became very clear that bash would become very messy with all the weird quirks and regex and inline editing of files. <br>
So the project moved over to golang, this lets us utilize TUI toolkits like [Bubble Tea](https://github.com/charmbracelet/bubbletea) to build a proper menu system for the project. <br>
If you know golang, bubbletea, passthrough or qemu, you are welcome to help! Just make a pull request to the [dev branch](https://github.com/HikariKnight/quickpassthrough/tree/dev) with your changes!<br>
Just remember to add comments to document the work and explain it for people who are less familiar with the bash syntax or anything else you use. 😄
Also if you know English, you can help by just proof reading. English is not my native language, plus I have dyslexia so I often make spelling mistakes.
Proof reading is still contribution!
----
2022-02-27 13:56:39 -05:00
2023-04-09 20:10:12 -04:00
### Why GO?
2022-02-28 13:57:10 -05:00
2023-04-09 20:10:12 -04:00
I wanted to learn it, while also using a language that would potentially not create system dependencies. GO fits this criteria when you compile using CGO_ENABLED=0 as this will statically link the libraries and still produce a fairly small (when compressed with upx) binary.