วิธีแชร์ไดเรกทอรีกับโฮสต์ที่ไม่มีระบบเครือข่ายใน QEMU


10

ปัญหาของฉันคืออุปกรณ์เครือข่ายในทรีอุปกรณ์ของฉันไม่เสถียรดังนั้นฉันคิดว่าวิธีที่ดีที่สุดในการแชร์โฟลเดอร์ระหว่าง qemu และระบบโฮสต์นั้นเชื่อมต่อกับ img โดยไม่มีแคชทั้งสองด้าน แต่ตัวเลือก -hda บน qemu ไม่ได้สร้าง hd มีอยู่ใน / dev /

นี่คือคำสั่งที่ฉันเรียกใช้

./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb resources/devicetree.dtb -kernel resources/zImage -initrd resources.qemu/ramdisk.img -nographic -s

ดังนั้นคำถามคือ: มีวิธีที่จะหลีกเลี่ยงเครือข่ายและยังมีไดเรกทอรีที่ใช้ร่วมกันระหว่าง qemu และโฮสต์หรือไม่

แก้ไข: ฉันรวบรวม

./configure --target-list="arm-softmmu,microblazeel-softmmu" --enable-fdt --disable-kvm --enable-virtfs

ซึ่งควรเปิดใช้งานสิ่งที่จำเป็น อย่างไรก็ตามเมื่อฉันวิ่ง

./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources/devicetree.dtb -kernel /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources/zImage -initrd /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources.qemu/ramdisk.img -nographic -s -fsdev local,path=/homes/cperivol/Sandbox/xilinx-zynq-bootstrap/qemu-sandbox/,security_model=passthrough,id=host0 -device virtio-9p-pci,fsdev=host0,mount_tag=host_tag0

หรือ

./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb resources/devicetree.dtb -kernel resources/zImage -initrd resources.qemu/ramdisk.img -nographic -s -virtfs local,path=/homes/cperivol/Sandbox/xilinx-zynq-bootstrap/qemu-sandbox/,mount_tag=host0,security_model=passthrough,id=host0

ฉันเข้าใจ

No 'PCI' bus found for device 'virtio-9p-pci'

บางทีฉันควรจะพูดถึงว่าในarm-softmmu/config-devices.makนั้นมีCONFIG_PCI=yและไฟล์วัตถุของ pci อยู่ที่นั่นhw/pciด้วย

EDIT2: ดูที่แผนผังอุปกรณ์ตามที่ทิ้งโดย qemu ระบบที่จำลองจะไม่รวมบัส PCI

(qemu) info qtree
bus: main-system-bus
  type System
  dev: xlnx.ps7-dev-cfg, id ""
    irq 1
    mmio 00000000f8007000/000000000000011c
  dev: pl330, id ""
    gpio-in 32
    num_chnls = 8
    num_periph_req = 4
    num_events = 16
    mgr_ns_at_rst = 0
    i-cache_len = 4
    num_i-cache_lines = 8
    boot_addr = 0
    INS = 0
    PNS = 0
    data_width = 64
    wr_cap = 8
    wr_q_dep = 16
    rd_cap = 8
    rd_q_dep = 16
    data_buffer_dep = 256
    irq 17
    mmio 00000000f8003000/0000000000001000
  dev: generic-sdhci, id ""
    capareg = 0x5780080
    maxcurr = 0x0
    irq 1
    mmio 00000000e0101000/0000000000000100
  dev: generic-sdhci, id ""
    capareg = 0x5780080
    maxcurr = 0x0
    irq 1
    mmio 00000000e0100000/0000000000000100
  dev: cadence_gem, id ""
    mac = 52:54:00:12:34:56
    vlan = 0
    netdev = hub0port0
    bootindex = -1
    irq 1
    mmio 00000000e000b000/0000000000000640
  dev: cadence_ttc, id ""
    irq 3
    mmio 00000000f8002000/0000000000001000
  dev: cadence_ttc, id ""
    irq 3
    mmio 00000000f8001000/0000000000001000
  dev: cadence_uart, id ""
    irq 1
    mmio 00000000e0001000/0000000000001000
  dev: cadence_uart, id ""
    irq 1
    mmio 00000000e0000000/0000000000001000
  dev: xlnx.ps7-qspi, id ""
    num-busses = 2
    num-ss-bits = 1
    num-txrx-bytes = 4
    irq 3
    mmio 00000000e000d000/0000000000000100
    mmio 00000000fc000000/0000000002000000
    bus: spi1
      type SSI
      dev: n25q128, id ""
        gpio-in 1
    bus: spi0
      type SSI
      dev: n25q128, id ""
        gpio-in 1
  dev: xlnx.ps7-spi, id ""
    num-busses = 1
    num-ss-bits = 4
    num-txrx-bytes = 1
    irq 5
    mmio 00000000e0007000/0000000000000100
    bus: spi0
      type SSI
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
  dev: xlnx.ps7-spi, id ""
    num-busses = 1
    num-ss-bits = 4
    num-txrx-bytes = 1
    irq 5
    mmio 00000000e0006000/0000000000000100
    bus: spi0
      type SSI
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
      dev: n25q128, id ""
        gpio-in 1
  dev: xlnx,ps7-usb, id "zynq-usb-1"
    maxframes = 128
    irq 1
    mmio 00000000e0003000/0000000000001000
    bus: zynq-usb-1.0
      type usb-bus
  dev: xlnx,ps7-usb, id "zynq-usb-0"
    maxframes = 128
    irq 1
    mmio 00000000e0002000/0000000000001000
    bus: zynq-usb-0.0
      type usb-bus
  dev: xlnx.ps7-i2c, id ""
    irq 1
    mmio 00000000e0005000/000000000000002c
    bus: i2c
      type i2c-bus
      dev: pca9548, id ""
        chip-enable = 0
        address = 0
        address-range = 128
        reg = 0
        bus: i2c@7
          type i2c-bus
        bus: i2c@6
          type i2c-bus
        bus: i2c@5
          type i2c-bus
        bus: i2c@4
          type i2c-bus
        bus: i2c@3
          type i2c-bus
          dev: at.24c08, id ""
            size = 1024
            address = 84
            address-range = 4
            reg = 84
          dev: at.24c08, id ""
            size = 1024
            address = 80
            address-range = 4
            reg = 80
        bus: i2c@2
          type i2c-bus
          dev: at.24c08, id ""
            size = 1024
            address = 84
            address-range = 4
            reg = 84
          dev: at.24c08, id ""
            size = 1024
            address = 80
            address-range = 4
            reg = 80
        bus: i2c@1
          type i2c-bus
        bus: i2c@0
          type i2c-bus
  dev: xlnx.ps7-i2c, id ""
    irq 1
    mmio 00000000e0004000/000000000000002c
    bus: i2c
      type i2c-bus
      dev: pca9548, id ""
        chip-enable = 0
        address = 0
        address-range = 128
        reg = 0
        bus: i2c@7
          type i2c-bus
        bus: i2c@6
          type i2c-bus
        bus: i2c@5
          type i2c-bus
        bus: i2c@4
          type i2c-bus
        bus: i2c@3
          type i2c-bus
          dev: at.24c08, id ""
            size = 1024
            address = 84
            address-range = 4
            reg = 84
          dev: at.24c08, id ""
            size = 1024
            address = 80
            address-range = 4
            reg = 80
        bus: i2c@2
          type i2c-bus
          dev: at.24c08, id ""
            size = 1024
            address = 84
            address-range = 4
            reg = 84
          dev: at.24c08, id ""
            size = 1024
            address = 80
            address-range = 4
            reg = 80
        bus: i2c@1
          type i2c-bus
        bus: i2c@0
          type i2c-bus
  dev: arm_mptimer, id ""
    num-cpu = 1
    irq 1
    mmio ffffffffffffffff/0000000000000020
    mmio ffffffffffffffff/0000000000000020
  dev: arm_mptimer, id ""
    num-cpu = 1
    irq 1
    mmio ffffffffffffffff/0000000000000020
    mmio ffffffffffffffff/0000000000000020
  dev: a9-scu, id ""
    num-cpu = 1
    irq 0
    mmio ffffffffffffffff/0000000000000100
  dev: arm_gic, id ""
    gpio-in 96
    num-cpu = 1
    num-irq = 96
    revision = 1
    irq 1
    mmio ffffffffffffffff/0000000000001000
    mmio ffffffffffffffff/0000000000000100
    mmio ffffffffffffffff/0000000000000100
  dev: a9mpcore_priv, id ""
    gpio-in 64
    num-cpu = 1
    num-irq = 96
    irq 1
    mmio 00000000f8f00000/0000000000002000
  dev: xilinx,zynq_slcr, id ""
    irq 0
    mmio 00000000f8000000/0000000000001000
  dev: nand, id ""
    manufacturer_id = 32
    chip_id = 170
    drive = <null>
    irq 0
  dev: cfi.pflash02, id ""
    drive = <null>
    num-blocks = 512
    sector-length = 131072
    width = 1
    mappings = 1
    big-endian = 0
    id0 = 102
    id1 = 34
    id2 = 0
    id3 = 0
    unlock-addr0 = 2730
    unlock-addr1 = 1365
    name = "pl353.pflash"
    irq 0
    mmio ffffffffffffffff/0000000004000000
  dev: arm.pl35x, id ""
    x = 3
    irq 0
    mmio 00000000e000e000/0000000000001000
    mmio 00000000e2000000/0000000001000000
    mmio 00000000e1000000/0000000001000000

คำตอบ:


14

หากแขกมีการรองรับ 9p (เช่น Linux หรือแน่นอนว่า Plan 9) และ virtio ให้ลองเพิ่มสวิตช์ต่อไปนี้

-virtfs local,path=/path/to/share,mount_tag=host0,security_model=passthrough,id=host0

คุณอาจต้องการเปลี่ยนพารามิเตอร์ security_model ดู man page, qemu (1) สำหรับสิ่งนั้น ถ้าฉันจำได้ถูกต้อง mount_tag คือสิ่งที่แขกเห็นทำให้ id เป็นเหมือนหุ่น

ตรวจสอบให้แน่ใจว่าเส้นทางอยู่ภายใต้ chroot หากคุณกำลัง chrooting มันเป็นเส้นทางไปยังไดเรกทอรีบนโฮสต์

รายการ fstab บนแขกควรมีลักษณะเช่นนี้

host0   /wherever    9p      trans=virtio,version=9p2000.L   0 0

เพิ่มที่ fstab ของคุณหรือเรียกใช้คำสั่งที่เหมาะสมด้วยตนเองหรือใช้ระบบ init ของคุณไม่ว่ามันจะเป็นอะไร


/ path / to / share พา ธ ไปยังไดเร็กตอรี่หรืออิมเมจหรือไม่? นอกจากนี้ฉันคิดว่ามันไม่เกี่ยวข้อง: ฉันได้รับqemu-system-arm: -virtfs local,path=/path/to/share,mount_tag=host0,security_model=passthrough,id=host0: Parameter 'driver' expects device type
fakedrake

1
มันเป็นไดเรกทอรีที่คุณต้องการแบ่งปัน
pilona

1
นอกจากนี้คุณสามารถยืนยันได้ว่ารุ่น qemu ที่คุณใช้นั้นถูกสร้างขึ้นด้วยการสนับสนุน 9p / virtfs หรือไม่ ดูนี่สิ
pilona

1
เป็นคำถามที่ดีฉันจะตรวจสอบได้อย่างไร
fakedrake

ที่รันไทม์จากไบนารี qemu ของคุณฉันไม่รู้ คุณต้องตรวจสอบสคริปต์การสร้างของการแจกจ่ายของคุณ นั่นคือเฉพาะ distro ตัวอย่างเช่นบน Arch Linux มันเป็นแฟล็กที่มีอยู่และไม่แสดงผ่านเพื่อกำหนดค่าใน PKGBUILD
pilona

2

การติดตั้ง 9P Buildroot ที่เรียบง่ายใช้งานได้สำหรับ x86_64, arm และ aarch64

ฉันได้สร้างการตั้งค่าการทำงานอัตโนมัติของ Buildrootที่อาจช่วยให้คุณเข้าใจว่าทำไมวิธีการของคุณถึงไม่ทำงาน

ส่วนผสมหลักคือ:

  • การตั้งค่าเคอร์เนล:

    CONFIG_9P_FS=y
    CONFIG_9P_FS_POSIX_ACL=y
    CONFIG_9P_FS_SECURITY=y
    CONFIG_NETWORK_FILESYSTEMS=y
    CONFIG_NET_9P=y
    CONFIG_NET_9P_DEBUG=y
    CONFIG_NET_9P_VIRTIO=y
    

    สำหรับ aarch64 ให้เพิ่ม:

    CONFIG_PCI=y
    CONFIG_PCI_HOST_COMMON=y
    CONFIG_PCI_HOST_GENERIC=y
    CONFIG_VIRTIO_PCI=y
    CONFIG_VIRTIO_BLK=y
    CONFIG_VIRTIO_NET=y
    

    หากคุณลืมเพิ่มการกำหนดค่า aarch64 และmountล้มเหลวด้วย:

    mount: mounting host0 on /mnt/my9p failed: Invalid argument
    

    และ dmesg บ่นกับ:

    9pnet_virtio: no channels available for device
    

    จัดทำเอกสารที่: https://wiki.qemu.org/Documentation/9psetup

  • รายการ fstab ของฉันและคำสั่ง QEMU เป็นไปตามที่อธิบายไว้ที่: https://superuser.com/a/628381/128124

    คำสั่ง mount ด้วยตนเองคือ:

    mkdir /mnt/my9p
    mount -t 9p -o trans=virtio,version=9p2000.L host0 /mnt/my9p
    

    สำหรับการอ้างอิงบรรทัดคำสั่ง QEMU ทั้งหมดของฉันคือ: x86:

    ./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -virtfs local,path=9p,mount_tag=host0,security_model=mapped,id=host0  -M pc -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y' -device edu -device lkmc_pci_min -device virtio-net-pci,netdev=net0 -kernel ./buildroot/output.x86_64~/images/bzImage    -drive file='./buildroot/output.x86_64~/images/rootfs.ext2.qcow2,if=virtio,format=qcow2'
    

    แขน:

    ./buildroot/output.arm~/host/usr/bin/qemu-system-arm -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -virtfs local,path=9p,mount_tag=host0,security_model=mapped,id=host0  -M versatilepb -append 'root=/dev/sda nokaslr norandmaps printk.devkmsg=on printk.time=y' -device rtl8139,netdev=net0 -dtb ./buildroot/output.arm~/images/versatile-pb.dtb -kernel ./buildroot/output.arm~/images/zImage -serial stdio    -drive file='./buildroot/output.arm~/images/rootfs.ext2.qcow2,if=scsi,format=qcow2' 
    

    aarch64:

    ./buildroot/output.aarch64~/host/usr/bin/qemu-system-aarch64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -virtfs local,path=9p,mount_tag=host0,security_model=mapped,id=host0  -M virt -append 'root=/dev/sda nokaslr norandmaps printk.devkmsg=on printk.time=y' -cpu cortex-a57 -device virtio-net-device,netdev=net0 -kernel ./buildroot/output.aarch64~/images/Image -nographic -serial stdio    
    

ทดสอบบน QEMU 2.11 และเคอร์เนลลินุกซ์ของแขก 4.15

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.