GithubHelp home page GithubHelp logo

doytsujin / run_qemu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pmem/run_qemu

0.0 1.0 0.0 87 KB

A script to create bootable OS images, and run qemu with a locally built kernel.

License: Creative Commons Zero v1.0 Universal

Shell 100.00%

run_qemu's Introduction

Requirements

  • mkosi
    • e.g. dnf install mkosi
  • qemu-system-x86_64
  • rsync
  • dracut
  • enabled virtualization (KVM)
  • nopasswd sudo preferred, or run as root, or enter passwords into the prompt several times
  • argbash to generate the argument parser lib (using parser_generator.m4)

Installation

  • symlink the run_qemu.sh script into somewhere in your PATH
    • e.g. ln -s ~/git/run_qemu/run_qemu.sh ~/bin/run_qemu.sh
  • Note: Supporting files in this repo are required to be in the same location as the script, after any symlink resolution. Copying just the script itself will not work.
  • Bash Completion
    • Copy or symlink the run_qemu file into the default bash completions dir
    • The completions directory can be found using: pkg-config --variable=completionsdir bash-completion

Usage Notes

  • Run this from the top level of a Linux kernel tree

    • e.g. run_qemu.sh --cxl --git-qemu
  • The script can/will:

    • Build the kernel with whatever .config is present (It is up to the user to manage the .config)
    • Create a rootfs image with the chosen distro using mkosi
    • Perform some basic setup on the rootfs, including installing the kernel, utilities (such as ndctl), and other convenience operations such as copying your ~/.ssh/id_rsa.pub for easy ssh access, and your ~/.bashrc etc.
    • Boot qemu with the newly compiled kernel provided on the qemu command line, and using the rootfs image above
    • Various options influence the qemu command line generated - there are options to select NUMA config, NVDIMMs, NVME devices, CXL devices etc.
  • More detailed CLI help is available with run_qemu.sh --help

  • Once qemu starts, in nographic mode, the Linux console 'takes over' the terminal. To interact with it, the following are useful:

    • Ctrl-a c : switch between the qemu monitor prompt (qemu) and console
    • Ctrl-a x : kill qemu and exit
  • mkosi creates a package cache in mkosi.cache/ If a cache is present, it will always use only that, and never go over the network even if newer packages are available. To force re-fetching everything, remove this directory, or --rebuild=wipe which removes the builddir entirely.

  • Which qemu to use can be overridden from the environment: qemu=/path/to/qemu/build/qemu-system-x86_64 ./run_qemu.sh [options]

  • List of variables that have overrides via env:

    • qemu
    • gdb
    • distro
    • rev
    • builddir
    • ndctl
  • To use the 'hostfwd' network, put this in your .ssh/config:

    Host rq
    Hostname localhost
    User root
    Port 10022
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    

    And then ssh rq. You may need to open port 10022 on any local firewalls.

  • The root password for the guest VM is root. The serial console automatically logs in, and a password isn't required.

CXL Usage

The script enables generating a sane QEMU commandline for instantiating a basic CXL topology. Since QEMU support for CXL isn't yet upstream, --git-qemu is additionally required. The CXL related options are:

  • --cxl: Enables a simple CXL topology with:
    • single host bridge
      • 512M window size at 0x4c00000000
      • Bus #52
    • single root port
    • single Type 3 device
      • Persistent 256M
    • simple label storage area
  • --cxl-debug: Add any and all flags for extra debug (kernel and QEMU)
  • --cxl-hb: Turn q35 into a CXL capable Host bridge. Don't use this option unless you're working on support for this.
  • --cxl-test-run: Attempt to do a sanity test of the kernel and QEMU configuration.

Kernel config

  • Make sure to Turn on CXL related options in the kernel's .config:
$ grep -i cxl .config
CONFIG_CXL_BUS=y
CONFIG_CXL_PCI=m
CONFIG_CXL_MEM_RAW_COMMANDS=y
CONFIG_CXL_ACPI=m
CONFIG_CXL_PMEM=m
CONFIG_CXL_MEM=m
CONFIG_CXL_PORT=y
CONFIG_CXL_SUSPEND=y

The following is a way to check basic sanity within the QEMU guest:

lspci  | grep '3[45]:00'
34:00.0 PCI bridge: Intel Corporation Device 7075
35:00.0 Memory controller [0502]: Intel Corporation Device 0d93 (rev 01)

readlink -f /sys/bus/cxl/devices/mem0
/sys/devices/pci0000:34/0000:34:00.0/0000:35:00.0/mem0

run_qemu's People

Contributors

stellarhopper avatar bwidawsk avatar alisonschofield avatar weiny2 avatar jonzhang-fb avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.