zoukankan      html  css  js  c++  java
  • kata virtio-9p-pci qemu-system-aarch64

    利用Qemu-4.0虚拟ARM64实验平台

    https://chasinglulu.github.io/2019/07/27/%E5%88%A9%E7%94%A8Qemu-4-0%E8%99%9A%E6%8B%9FARM64%E5%AE%9E%E9%AA%8C%E5%B9%B3%E5%8F%B0/

     

    How to launch ARM aarch64 VM with QEMU from scratch.

    The below instructions will allow for bringing up an ARM VM from scratch.

    It is worth mentioning that our work includes automating all of the below, resulting in a more streamlined option to building and launching the VM. See the article on QEMU aarch64 VMs for more details.

    To launch an aarch64 VM we first need to install a few dependencies, including QEMU and the qemu-efi-aarch64 package, which includes the efi firmware.

    apt-get install qemu-system-arm
    apt-get install qemu-efi-aarch64
    apt-get install qemu-utils
    

    Create the flash images with the correct sizes.

    dd if=/dev/zero of=flash1.img bs=1M count=64
    dd if=/dev/zero of=flash0.img bs=1M count=64
    dd if=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=flash0.img conv=notrunc
    

    Download the image you want to boot.

    For our example we use an Ubuntu installer.

    wget http://ports.ubuntu.com/ubuntu-ports/dists/bionic-updates/main/installer-arm64/current/images/netboot/mini.iso
    

    Create the empty Ubuntu image file we will install Ubuntu into.

    We will use 20 gigabytes for this file.

    qemu-img create ubuntu-image.img 20G
    

    Start QEMU with the installer.

    qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 
    -netdev user,id=vnet,hostfwd=:127.0.0.1:0-:22 -device virtio-net-pci,netdev=vnet 
    -drive file=ubuntu-image.img,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 
    -drive file=mini.iso,if=none,id=drive1,cache=writeback -device virtio-blk,drive=drive1,bootindex=1 
    -drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash 
    

    Follow the instructions to install Ubuntu to the ubuntu-image.img file.

    Once the install is finished you can exit QEMU with -a x.

    Then restart QEMU without the installer image with the following command.

    qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 
    -netdev user,id=vnet,hostfwd=:127.0.0.1:0-:22 -device virtio-net-pci,netdev=vnet 
    -drive file=ubuntu-image.img,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 
    -drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash 

    qemu启动参数需要添加:

    -fsdev local,security_model=passthrough,id=fsdev0,path=/tmp/share -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare


    然后提示:
    'virtio-9p-pci' is not a valid device model name


    需要重新编译qemu,编译时添加额外的configure参数:
    --enable-virtfs

    编译安装qemu后,再运行,可以了。


    在guest中挂载host共享的目录:

    mkdir /tmp/host_files
    mount -t 9p -o trans=virtio,version=9p2000.L hostshare /tmp/host_files

    提示:
    mount: unknown filesystem type '9p'

    需要在kernel中添加9p的支持:
    CONFIG_NET_9P=y
    CONFIG_NET_9P_VIRTIO=y
    CONFIG_NET_9P_DEBUG=y (Optional)
    CONFIG_9P_FS=y
    CONFIG_9P_FS_POSIX_ACL=y


    然后就可以使用了,如果再加上virtio console的支持,那么既有shell,又可以传输文件,基本可以代替adb的常用功能了。

    参考:

    qemu启动命令:http://www.linux-kvm.org/page/9p_virtio

    kernel配置:http://wiki.qemu.org/Documentation/9psetup

    qemu添加configure选项:https://groups.google.com/forum/#!topic/coreos-dev/MjhL3tOOAVM

    mkdir /tmp/host_files
    mount -t 9p -o trans=virtio,version=9p2000.L hostshare /tmp/host_files
    /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel"   -initrd /usr/share/kata-containers/binary/kata-containers.img   -fsdev local,security_model=passthrough,id=fsdev0,path=./nfsroot   -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare

    /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none

     https://futurewei-cloud.github.io/ARM-Datacenter/qemu/how-to-launch-aarch64-vm/

    root@ubuntu:/home/ubuntu# /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none  -device virtio-serial-pci,disable-modern=false,id=serial0,romfile= -device virtconsole,chardev=charconsole0,id=console0 -chardev socket,id=charconsole0,path=./mysock
    qemu-system-aarch64: -chardev socket,id=charconsole0,path=./mysock: Failed to connect socket ./mysock: Connection refused
    root@ubuntu:/home/ubuntu# ls
    dirA  dirB  dirC  mysock  nfsroot  qemu.sh  qemu.sh.bak  server.py  txt
    root@ubuntu:/home/ubuntu# 

    qemu-system-aarch64: root=/dev/pmem0p1: Could not open 'root=/dev/pmem0p1': No such file or directory
    root@ubuntu:/home/ubuntu# /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel  systemd.unit=kata-containers.target systemd.mask=systemd-networkd.service systemd.mask=systemd-networkd.socket scsi_mod.scan=none agent.log=debug agent.log=debug"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none  

    root@ubuntu:/home/ubuntu# /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/pmem0p1 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel  systemd.unit=kata-containers.target systemd.mask=systemd-networkd.service systemd.mask=systemd-networkd.socket scsi_mod.scan=none agent.log=debug agent.log=debug"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none  
    root@ubuntu:/home/ubuntu# ps -elf | grep 20462
    7 S root     20462 20399  4  80   0 - 801176 sys_po 20:25 ?       00:00:02 /usr/share/kata-containers/binary/qemu-system-aarch64 -name sandbox-3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc -uuid 2939253a-c41f-4b7d-bf0c-3fc4ca555d85 -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off -qmp unix:/run/vc/vm/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/qmp.sock,server,nowait -m 2048M,slots=10,maxmem=257176M -device pcie-pci-bridge,bus=pcie.0,id=pcie-bridge-0,addr=2,romfile= -device virtio-serial-pci,disable-modern=false,id=serial0,romfile= -device virtconsole,chardev=charconsole0,id=console0 -chardev socket,id=charconsole0,path=/run/vc/vm/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/console.sock,server,nowait -device nvdimm,id=nv0,memdev=mem0 -object memory-backend-file,id=mem0,mem-path=/usr/share/kata-containers/binary/kata-containers.img,size=184549376 -device virtio-scsi-pci,id=scsi0,disable-modern=false,romfile= -object rng-random,id=rng0,filename=/dev/urandom -device virtio-rng-pci,rng=rng0,romfile= -device virtserialport,chardev=charch0,id=channel0,name=agent.channel.0 -chardev socket,id=charch0,path=/run/vc/vm/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/kata.sock,server,nowait -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=/run/kata-containers/shared/sandboxes/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/shared,security_model=none -netdev tap,id=network-0,vhost=on,vhostfds=3,fds=4 -device driver=virtio-net-pci,netdev=network-0,mac=02:42:ac:11:00:02,disable-modern=false,mq=on,vectors=4,romfile= -rtc base=utc,driftfix=slew,clock=host -global kvm-pit.lost_tick_policy=discard -vga none -no-user-config -nodefaults -nographic --no-reboot -daemonize -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88 -append console=hvc0 console=hvc1 iommu.passthrough=0 root=/dev/pmem0p1 rootflags=dax,data=ordered,errors=remount-ro ro rootfstype=ext4 debug systemd.show_status=true systemd.log_level=debug panic=1 nr_cpus=64 agent.use_vsock=false systemd.unit=kata-containers.target systemd.mask=systemd-networkd.service systemd.mask=systemd-networkd.socket scsi_mod.scan=none agent.log=debug agent.log=debug agent.debug_console -pidfile /run/vc/vm/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/pid -D /run/vc/vm/3e1da8e133933ccda5b51f651591da44bd52646ffa6bd7e8f8fd47fded34fdfc/qemu.log -smp 1,cores=1,threads=1,sockets=64,maxcpus=64
    1 S root     20466     2  0  80   0 -     0 vhost_ 20:25 ?        00:00:00 [vhost-20462]
    0 S root     20513 20131  0  80   0 -  1097 pipe_w 20:26 pts/1    00:00:00 grep --color=auto 20462
    root@ubuntu:/home/ubuntu# pidof qemu
    root@ubuntu:/home/ubuntu# pidof qemu-system-aarch64
    20462
    root@ubuntu:/home/ubuntu# 

    root@ubuntu:/home/ubuntu# /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=3 --enable-kvm 
    qemu-system-aarch64: -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=3: device is modern-only, use disable-legacy=on
    root@ubuntu:/home/ubuntu# 
    qemu-system-x86_64 
          -nographic 
          -nodefaults 
          -L . 
          -machine virt,accel=kvm,kernel_irqchip,nofw 
          -smp sockets=1,cpus=4,cores=2,maxcpus=8 
          -cpu host 
          -m 2G,slots=3,maxmem=16G 
          -kernel /home/sebastien/workloads/linux_4_17/linux-4.17.14/arch/x86/boot/compressed/vmlinux.bin 
          -append 'console=hvc0 single iommu=false root=/dev/ram0 pci=lastbus=0' 
          -device virtio-serial-pci,id=virtio-serial0 -device virtconsole,chardev=charconsole0,id=console0 -chardev stdio,id=charconsole0 
          -device sysbus-debugcon,iobase=0x402,chardev=debugcon -chardev file,path=/tmp/debug-log,id=debugcon 
          -monitor telnet:127.0.0.1:55555,server,nowait 
          -qmp unix:/run/virtcontainers/pods/wH9OFIZOLD5jtSs3PNht/monitor.sock,server,nowait 
          -device pcie-root-port,id=rp1,addr=6,bus=pcie.0,multifunction=on
    root@ubuntu:/home/ubuntu# /usr/share/kata-containers/binary/qemu-system-aarch64  -machine virt,usb=off,accel=kvm,gic-version=host,nvdimm -cpu host,pmu=off  -smp 2 -m 4096M  -kernel /usr/share/kata-containers/binary/vmlinuz-5.4.34-88   -nographic   -append "root=/dev/pmem0p1 rw rootfstype=ext4 console=ttyAMA0  ignore_loglevel  systemd.unit=kata-containers.target systemd.mask=systemd-networkd.service systemd.mask=systemd-networkd.socket scsi_mod.scan=none agent.log=debug agent.log=debug"   -initrd /usr/share/kata-containers/binary/kata-containers.img    -device virtio-9p-pci,disable-modern=false,fsdev=extra-9p-kataShared,mount_tag=kataShared,romfile= -fsdev local,id=extra-9p-kataShared,path=./nfsroot,security_model=none  -device virtio-serial-pci,id=virtio-serial0    -monitor telnet:127.0.0.1:55555,server,nowait

    -monitor dev
    Redirect the monitor to host device dev (same devices as the serial port). The default device is vc in graphical mode and stdio in non graphical mode. Use -monitor none to disable the default monitor.
     
    -qmp dev
    Like -monitor but opens in ’control’ mode.
     
    -qmp-pretty dev
    Like -qmp but uses pretty JSON formatting.
     
    -mon [chardev=]name[,mode=readline|control][,pretty[=on|off]]
    Setup monitor on chardev name. pretty turns on JSON pretty printing easing human reading and debugging.
     
    -debugcon dev
    Redirect the debug console to host device dev (same devices as the serial port). The debug console is an I/O port which is typically port 0xe9; writing to that I/O port sends output to this device. The default device is vc in graphical mode and stdio in non graphical mode.
    # telnet 监听
    qemu-system-i386 -monitor telnet:127.0.0.1:55555,server,nowait;
    echo system_powerdown |telnet 127.0.0.1 55555
    # tcp 监听
    qemu-system-i386 -monitor tcp:127.0.0.1:55555,server,nowait;
    echo 'info kvm' |nc -N 127.0.0.1 55555
    echo system_powerdown |nc -N 127.0.0.1 55555
     
    # unix
    # -qmp JSON 协议
    qemu-system-i386 monitor unix:qemu-monitor-socket,server,nowai
    socat -,echo=0,icanon=0 unix-connect:qemu-monitor-socket
     
    echo "info status" | socat - unix-connect:qemu-monitor-socket
    echo "info status" | socat - unix-connect:qemu-monitor-socket | tail --lines=+2 | grep -v '^(qemu)'
    # 查看版本
    info version
     
    # qemu -vnc :1,password
    # 给 VNC 设置密码
    change vnc password
     
    # qemu -S
    # 默认不启动 cpu, 手动启动
    c
  • 相关阅读:
    Android开发 Android Studio2.0 教程从入门到精通Windows版
    SQLSERVER 执行过的语句查询
    通过身份证分析出生年月日、性别、年龄的SQL语句
    SQL 根据日期精确计算年龄
    SQL 语句转换格式函数Cast、Convert
    Delphi 单元
    【转】实现Ribbon风格的窗体
    Delphi的打开文件对话框-TOpenDialog
    Delphi数据类型转换
    深入理解javascript中的立即执行函数(function(){…})()
  • 原文地址:https://www.cnblogs.com/dream397/p/13804192.html
Copyright © 2011-2022 走看看