ฉันเคยออกแบบฮาร์ดแวร์ PCI-Express ที่ต้องการการสนับสนุน hot-plug แบบเต็มในฮาร์ดแวร์และซอฟต์แวร์และเป็นไปได้อย่างแน่นอน แต่มันค่อนข้างเกี่ยวข้องและต้องการการสนับสนุนซอฟต์แวร์ที่กว้างขวาง - ฮาร์ดแวร์นั้นค่อนข้างง่าย ฉันต้องออกแบบฮาร์ดแวร์จากนั้นใช้การสนับสนุน BIOS (UEFI) และเคอร์เนล (Linux) สำหรับอุปกรณ์ PCIe โดยพลการร้อนๆผ่านไฟเบอร์และทองแดง
จากมุมมองของซอฟแวร์เราต้องจำไว้ว่า PCIe ยังคงดำเนินต่อไปกับรุ่นซอฟต์แวร์ PCI รวมถึงแนวคิดของบัสอุปกรณ์การกำหนดหน้าที่การทำงาน เมื่อระบุ PCI บัสแล้วจะทำการค้นหาแบบกว้างก่อน:
โดยทั่วไปการแจงนับ PCIe จะกระทำสองครั้ง ก่อนอื่น BIOS ของคุณ (UEFI หรืออื่น ๆ ) จะทำเพื่อหาว่ามีใครอยู่และต้องการหน่วยความจำเท่าใด ข้อมูลนี้สามารถส่งผ่านไปยังโฮสต์ระบบปฏิบัติการที่สามารถใช้ตามที่เป็นอยู่ แต่ Linux และ Windows มักจะดำเนินการตามขั้นตอนการแจงนับของตัวเองเช่นกัน บน Linux สิ่งนี้ทำผ่านระบบย่อยหลัก PCI ซึ่งค้นหาบัสใช้สิ่งที่จำเป็นถ้าอิงตาม ID ของอุปกรณ์จากนั้นโหลดไดรเวอร์ที่มี ID ตรงกันในฟังก์ชันโพรบ อุปกรณ์ PCI คือ ID'd ผ่านการรวมกันของ ID ผู้ขาย (16- บิตเช่น Intel คือ 0x8086) และ ID อุปกรณ์ (อีก 16 บิต) - แหล่งอินเทอร์เน็ตที่พบมากที่สุดอยู่ที่นี่: http://pcidatabase.com / .
ส่วนซอฟต์แวร์ที่กำหนดเองเข้ามาในระหว่างกระบวนการแจงนับและนั่นคือคุณต้องจองล่วงหน้าหมายเลข PCI Bus และเซ็กเมนต์หน่วยความจำสำหรับอุปกรณ์ที่มีศักยภาพในอนาคต - ซึ่งบางครั้งเรียกว่า 'การเติมเต็มบัส ' นี่เป็นการหลีกเลี่ยงความจำเป็นในการระบุบัสอีกครั้งในอนาคตซึ่งมักจะไม่สามารถทำได้โดยไม่ทำให้ระบบหยุดชะงัก อุปกรณ์ PCI มี BARs (การลงทะเบียนที่อยู่พื้นฐาน) ซึ่งคำขอไปยังโฮสต์เท่าใดและหน่วยความจำประเภทอุปกรณ์ (หน่วยความจำหรือพื้นที่ I / O) ที่อุปกรณ์ต้องการ - นี่คือเหตุผลที่คุณไม่ต้องการจัมเปอร์เช่น ISA อีกต่อไป :) เช่นเดียวกันเคอร์เนล Linux ใช้ PCIe hotplug ผ่าน pciehp คนขับรถ Windows ทำสิ่งต่าง ๆ ตามรุ่น - รุ่นเก่า (ฉันคิดว่า XP) เพิกเฉยต่อสิ่งที่ BIOS บอกและทำด้วยตัวเอง รุ่นที่ใหม่กว่าฉันเชื่อว่ามีความเคารพ ACPI DSDT มากขึ้นโดยโฮสต์เฟิร์มแวร์ (BIOS / EFI) และจะรวมข้อมูลนั้น
นี่อาจดูเหมือนเกี่ยวข้องและสวย! แต่จำไว้ว่าแล็ปท็อป / อุปกรณ์ใด ๆ ที่มีสล็อต ExpressCard (ซึ่งใช้ PCIe เนื่องจากคุณมี ExpressCards แบบ USB เท่านั้น) ต้องทำสิ่งนี้แม้ว่าโดยทั่วไปช่องว่างภายในจะค่อนข้างเรียบง่าย - มีเพียงบัสเดียว ฮาร์ดแวร์เก่าของฉันเคยเป็นสวิตช์ PCIe ที่มีอุปกรณ์อีก 8 ตัวอยู่ด้านหลังดังนั้นการขยายจึงค่อนข้างซับซ้อน
จากมุมมองของฮาร์ดแวร์มันง่ายกว่ามาก หมุดของ GND ของการ์ดนั้นต้องทำการติดต่อก่อนและเราจะวางตัวควบคุม hot-swap IC จาก LTC หรือที่คล้ายกันบนการ์ดเพื่อให้ได้พลังงานตามลำดับเมื่อทำการเชื่อมต่อแล้ว ณ จุดนี้ ASIC หรือ FPGA แบบออนบอร์ดเริ่มขึ้นตามลำดับการเพิ่มพลังและเริ่มพยายามเชื่อมโยงการเชื่อมโยง PCI Express ของมัน สมมติว่าโฮสต์รองรับการเสียบฮอตและ PCI Express SLTCAP / SLTCTRLลงทะเบียน (ในสเปค: ลงทะเบียนความสามารถของสล็อต PCI Express, ลงทะเบียนควบคุมสล็อต PCI Express มี 1 และ 2 สำหรับสิ่งนี้เช่นกัน - บิตเพียงพอที่จะแบ่งออกเป็นสอง regs) สำหรับพอร์ตนั้นได้รับการกำหนดค่าให้ระบุว่าพอร์ตนั้นสามารถใช้งานได้กับฮอตปลั๊กซอฟต์แวร์สามารถเริ่มระบุอุปกรณ์ใหม่ได้ การลงทะเบียนสถานะสล็อต (SLTSTA, การลงทะเบียนสถานะสล็อต PCI Express) ประกอบด้วยบิตที่อุปกรณ์เป้าหมายสามารถตั้งค่าเพื่อระบุความผิดปกติของกำลังไฟฟ้า, สลักปลดแบบเชิงกล
รีจิสเตอร์ดังกล่าวอยู่ใน 'PCI (Express) Configuration Space' ซึ่งเป็นพื้นที่เล็ก ๆ ของแผนที่หน่วยความจำ (4K สำหรับ PCIe) ที่จัดสรรให้กับแต่ละ bdf ที่เป็นไปได้ (บัส: อุปกรณ์: ฟังก์ชัน) การลงทะเบียนจริงมักจะอยู่ในอุปกรณ์ต่อพ่วง
ในด้านโฮสต์เราสามารถใช้ PRSNT1 # / PRSNT2 # เป็นสัญญาณ DC แบบง่ายที่ป้อนการเปิดใช้งานของสวิตช์ไฟ IC หรือเรียกใช้ GPIO บนชิปเซ็ต / PCH เพื่อทำให้เกิด IRQ และเรียก SW 'เฮ้มีบางอย่างแทรกอยู่ ไปหามันแล้วตั้งค่ามัน! ' กิจวัตรประจำวัน
นี่เป็นข้อมูลจำนวนมากที่ไม่ได้ตอบคำถามของคุณโดยตรง (ดูด้านล่างสำหรับข้อมูลสรุปโดยย่อ) แต่หวังว่ามันจะช่วยให้คุณมีพื้นฐานที่ดีขึ้นในการทำความเข้าใจกระบวนการ หากคุณมีคำถามเกี่ยวกับส่วนต่าง ๆ ของกระบวนการแจ้งให้เราทราบในความคิดเห็นที่นี่หรือส่งอีเมลถึงฉันและฉันสามารถพูดคุยเพิ่มเติม + อัปเดตคำตอบนี้ด้วยข้อมูลนั้น
เพื่อสรุป - อุปกรณ์ต่อพ่วงจะต้องได้รับการออกแบบโดยใช้การสนับสนุน hot-plug ในใจจาก POV ฮาร์ดแวร์ โฮสต์ / สล็อตที่ออกแบบมาอย่างเหมาะสมนั้นมีความสามารถในการเสียบปลั๊กเช่นกันและบนเมนบอร์ดระดับไฮเอนด์ฉันคาดหวังว่ามันจะปลอดภัย อย่างไรก็ตามการสนับสนุนซอฟต์แวร์สำหรับคำถามนี้เป็นคำถามอื่นทั้งหมดและคุณโชคไม่ดีที่ BIOS ของ OEM ที่คุณให้มา
ในทางปฏิบัติคุณใช้เทคโนโลยีนี้ทุกครั้งที่คุณถอด / ใส่ PCIe ExpressCard จากคอมพิวเตอร์ นอกจากนี้ระบบเบลดประสิทธิภาพสูง (เทเลคอมมิฉะนั้นจะใช้เทคโนโลยีนี้เป็นประจำเช่นกัน
ความคิดเห็นสุดท้าย - บันทึก PDF ที่เชื่อมโยงกับข้อมูลจำเพาะพื้นฐาน PCI-SIG มักจะเรียกเก็บเงินสำหรับสิ่งนั้น :)