ป้องกันไม่ให้ไดรเวอร์ Radeon ติดกับอุปกรณ์ PCI ที่ระบุหรือไม่


13

ฉันมีไพ่ Radeon สองใบในเครื่องนี้Radeon HD 6570และRadeon HD 6950 :

lspci | grep VGA

01: 00.0 ตัวควบคุมที่รองรับ VGA: อุปกรณ์ Micro ขั้นสูง [AMD] nee ATI Turks [Radeon HD 6570]
02: 00.0 ตัวควบคุมที่รองรับ VGA: อุปกรณ์ Micro ขั้นสูง [AMD] nee ATI Cayman PRO [Radeon HD 6950]

ฉันพยายามทำให้ VGA passthrough ทำงานร่วมกับKVMบนDebian 7 (Wheezy) ผ่าน 6950 ในฐานะการ์ดแสดงผลรองไปยังแขก Windows 7 นี้ทำงานได้ดีถ้าฉันบัญชีดำเคอร์เนลโมดูลผ่านradeon/etc/modprobe.d/

หากฉันลบบัญชีดำเพื่อเรียกใช้ X11 (หรือแม้แต่คอนโซลKMS ) ใน 6570 radeonโมดูลดูเหมือนว่าจะแนบกับการ์ดทั้งสอง :

dmesg | egrep "01: 00.0 | 02: 00.0 | radeon"

pci 0000: 01: 00.0: [1002: 6759] ประเภท 0 คลาส 0x000300
pci 0000: 01: 00.0: reg 10: [mem 0xe0000000-0xefffffff 64 บิต pref]
pci 0000: 01: 00.0: reg 18: [mem 0xf7e20000-0xf7e3ff 64 บิต ]
pci 0000: 01: 00.0: reg 20: [io 0xe000-0xe0ff]
pci 0000: 01: 00.0: reg 30: [mem 0xf7e00000-0xf7e1ffff pref]
pci 0000: 01: 00.0: รองรับ D1 D2
pci 0000: 02 : [1002: 6719] ประเภท 0 คลาส 0x000300
pci 0000: 02: 00.0: reg 10: [mem 0xd0000000-0xdfffffff 64 บิต pref]
pci 0000: 02: 00.0: reg 18: [mem 0xf7d20000
pci 0000: 02: 00: 64 00.0: reg 20: [io 0xd000-0xd0ff]
pci 0000: 02: 00.0: reg 30: [mem 0xf7d00000-0xf7d1ffff pref]
pci 0000: 02: 00.0: รองรับ D1 D2
vgaarb: เพิ่มอุปกรณ์: PCI: 0000: 01: 00.0, ถอดรหัส = io + mem, เป็นเจ้าของ = io + mem, ล็อค = none
vgaarb: เพิ่มอุปกรณ์: PCI: 0000: 02: 00.0, ถอดรหัส = io + mem, เป็นเจ้าของ = none , ล็อค = none
vgaarb: การควบคุมสะพานเป็นไปได้ 0000: 02:
00.0 vgaarb: การควบคุมสะพานเป็นไปได้ 0000: 01: 00.0
pci 0000: 01: 00.0: อุปกรณ์บูตวิดีโอ
[DRM] โหมดเคอร์เนล radeon เปิดใช้งานการตั้งค่า
Radeon 0000: 01: 00.0: ตั้งค่าตัวจับเวลาแฝงเป็น 64
Radeon 0000: 01: 00.0: VRAM: 1024M 0x00000000000000000000 0M00000000000000000000 - 0x0000000000000000FFFFF (1024M ใช้แล้ว)
Radeon 0000: 01: 00.0: GTT: 512M 0x0000000040000000 - 0x00000000500FFFFF
[DRM ของ 1024] หน่วยความจำพร้อม
[DRM] radeon: 512M ของหน่วยความจำ GTT พร้อม
radeon 0000: 01: 00.0: irq 46 สำหรับ MSI / MSI-X
radeon 0000: 01: 00.0: radeon: ใช้ MSI
[drm] radeon: irq เริ่มต้นได้
radeon 0000: 01: 00.0: เปิดใช้งาน WB
[drm] radeon: ib pool พร้อม
[drm] radeon: การจัดการพลังงานเริ่มต้น
fbcon: radeondrmfb (fb0) เป็นอุปกรณ์หลัก
fb0: อุปกรณ์บัฟเฟอร์เฟรม radeondrmfb
[drm] radeon เริ่มต้น 2.12.0 20080528 สำหรับ 0000 0: 00.0: รองจาก 0 0
radeon 0000: 02: 00.0: อุปกรณ์ที่เปิดใช้งาน (0000 -> 0003)
Radeon 0000: 02: 00.0: ตั้งเวลาแฝงถึง 64
Radeon 0000: 02: 00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M ใช้)
Radeon 0000: 02: 00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[DRM ] radeon: พร้อมหน่วยความจำ VRAM 2048M
[drm] radeon: 512M ของหน่วยความจำ GTT พร้อม
Radeon 0000: 02: 00.0: irq 49 สำหรับ MSI / MSI-X
Radeon 0000: 02: 00.0: radeon: ใช้ MSI
[drm] radeon: irq เริ่มต้นได้
radeon 0000: 02: 00.0: เปิดใช้งาน WB
[drm] radeon: ib pool พร้อม
[drm] radeon: การจัดการพลังงานเริ่มต้น
fb1: อุปกรณ์บัฟเฟอร์เฟรม radeondrmfb
[drm] radeon เริ่มต้น 2.12.0 20080528 สำหรับ 0000: 02: 00.0 สำหรับรอง 1
[drm] radeon: อุปกรณ์ตกแต่ง
radeon 0000: 02: 00.0: ffff88041a941800 unpin ไม่จำเป็น
[DRM] Radeon: ttm สรุป
pci-stub 0000: 02: 00.0: อ้างสิทธิ์โดย stub
pci-stub 0000: 02: 00.0: irq 49 สำหรับ MSI / MSI-X

ทำให้ Windows 7 VM เป็น bluescreen เมื่อบูต

ฉันจะกำหนดค่าสิ่งต่าง ๆ ได้อย่างไรเพื่อให้โมดูลradeonเชื่อมต่อกับ 6570 และไม่ใช่ 6950 เท่านั้น

คำตอบ:


14

ฉันมีบางpci_stubบรรทัดที่เกี่ยวข้องในของฉันrc.localแต่นี่ก็สายเกินไปในกระบวนการบูตเพื่อช่วยให้ทำงานหลังจากradeonเริ่มเล่นซอกับสิ่งต่าง ๆ

ฉันแก้ไขสิ่งต่าง ๆ โดยการย้ายสิ่งpci_stubเคอร์เนลโมดูลไปที่initramfs:

  1. lspci -nn | grep Caymanเพื่อค้นหาvendor:deviceตัวเลข (ที่ส่วนท้ายสุดของบรรทัด) สำหรับ 6950 และพอร์ต HDMI:

    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950] [1002:6719]
    02:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
    
  2. เปิดป๊อป/etc/initramfs-tools/modulesและเพิ่มบรรทัดใหม่:

    pci_stub ids=1002:6719,1002:aa80
    
  3. สร้างใหม่initramfs:

    sudo update-initramfs -u
    
  4. รีบูตและสังเกตการpci_stubเต้นradeon:

    dmesg | egrep "pci-stub|radeon"
    
    pci-stub: add 1002:6719 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.0: claimed by stub
    pci-stub: add 1002:AA80 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.1: claimed by stub
    [drm] radeon kernel modesetting enabled.
    radeon 0000:01:00.0: setting latency timer to 64
    radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M used)
    radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
    
  5. เพลิดเพลินไปกับ passthrough VGA ที่ไม่มี bluescreen!


3
ข้างต้นไม่ได้ผลสำหรับฉัน แต่ฉันเพิ่มลงpci_stub.ids=1002:6719,1002:aa80ในตอนท้ายของบรรทัดคำสั่งเคอร์เนลในไฟล์ config ด้วง ฉันสงสัยว่าเป็นเพราะpci-stubโมดูลนั้นถูกสร้างขึ้นในเคอร์เนลในการตั้งค่าของฉัน
Mansour

1
อ้างอิงในการเล่นเกม NVIDIA แบบหลายเฮดโดยใช้ Ubuntu 14.04 + KVM (ขั้นตอนที่ 2)
Peter Mortensen

5

การใช้คำตอบ genpfault เป็นข้อมูลอ้างอิงฉันสร้างคำตอบอื่นขึ้นมาฉันคิดว่าง่ายกว่ามาก

ขั้นตอนแรกเหมือนกับขั้นตอนข้างต้น:

จากนั้นฉันสร้างไฟล์ชื่อ /lib/modprobe.d/pci-stub.conf ด้วย args ที่ฉันพบ:

options pci-stub ids=1002:9715,1002:970f

จากนั้นฉันสร้างไฟล์ชื่อ /lib/modprobe.d/drm.conf พร้อม softdep:

softdep drm pre: pci-stub

วิธีนี้เมื่อกระบวนการบูตพยายามโหลด drm อันดับแรกโหลด pci-stub ซึ่งสำรองฮาร์ดแวร์ของการ์ดวิดีโอหนึ่งการ์ดและป้องกัน drm เพื่อเชื่อมต่อกับอุปกรณ์บางอย่าง

หลังจากนั้นคุณสามารถลบการสำรองห้องพักใน modprobe -r pci-stubrc.local,

คุณสามารถเลือกโหลดโมดูลอื่นmodprobe another-moduleสำหรับการ์ดนั้นได้

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