Donanım ve yazılımda tam hot-plug desteği gerektiren PCI-Express donanımı tasarlıyordum ve kesinlikle mümkün, ancak oldukça dahil ve kapsamlı yazılım desteği gerektiriyor - donanım aslında oldukça basit. Donanımı tasarlamak, ardından fiber ve bakır üzerine isteğe bağlı PCIe aygıtlarını çalışırken takmak için BIOS (UEFI) ve çekirdek (Linux) desteğini uygulamak zorunda kaldım.
Yazılım açısından bakıldığında PCIe'nin veri yolu, cihaz, işlev adresleme kavramları dahil PCI yazılım modeliyle devam ettiğini unutmamak gerekir. PCI veriyolu numaralandırıldığında, önce bir genişlik araması olarak yapılır:
PCIe numaralandırması genellikle iki kez yapılır. İlk olarak, BIOS'unuz (UEFI veya başka bir şekilde) kimin mevcut olduğunu ve ne kadar belleğe ihtiyaç duyduklarını bulmak için bunu yapacaktır. Bu veriler daha sonra olduğu gibi ana bilgisayar işletim sistemine aktarılabilir, ancak Linux ve Windows da genellikle kendi numaralandırma prosedürlerini uygular. Linux'ta, bu, veri yolunu arayan, gerekirse aygıt kimliğine bağlı olarak herhangi bir tuhaflık uygulayan ve daha sonra prob işlevinde eşleşen bir kimliği olan bir sürücüyü yükleyen çekirdek PCI alt sistemi aracılığıyla yapılır. Bir PCI aygıtı, Satıcı Kimliği'nin (16 bit, örneğin Intel 0x8086) ve Aygıt Kimliği'nin (başka bir 16 bit) birleşimi ile tanımlanır - en yaygın internet kaynağı burada: http://pcidatabase.com / .
Özel yazılım bölümü bu numaralandırma işlemi sırasında gelir ve bu, gelecekte PCI Veri Yolu numaralarını ve gelecekteki potansiyel cihazlar için bellek segmentlerini ayırmanız gerekir - buna bazen ' veri yolu dolgusu ' denir . Bu, gelecekte sistemi kesintiye uğratmadan yapılamayacak otobüsün yeniden numaralandırılması ihtiyacını ortadan kaldırır. Bir PCI cihazında BAR'lar ( temel adres kayıtları)) ne kadar ve hangi tip (bellek veya G / Ç alanı) belleğe ihtiyaç duyduğunu ana bilgisayara talep eder - bu yüzden artık ISA gibi jumper'lara ihtiyacınız yok :) Aynı şekilde, Linux çekirdeği PCiehp üzerinden PCIe hotplug uygular sürücüsü. Windows, sürüme göre farklı şeyler yapıyor - eski sürümler (sanırım XP) BIOS'un söylediği her şeyi yok sayar ve kendi problama işlemini yapar. Daha yeni sürümlerin, ana bilgisayar yazılımı (BIOS / EFI) tarafından sağlanan ACPI DSDT'ye daha saygılı olduğunu ve bu bilgileri içereceğini düşünüyorum.
Bu oldukça ilgili görünebilir ve öyle! Ancak, ExpressCard yuvalı (PCIe'yi sadece USB ExpressCard'lara sahip olarak uygulayan) herhangi bir dizüstü bilgisayarın / cihazın bunu yapması gerektiğini unutmayın, ancak genellikle dolgu oldukça basittir - sadece bir otobüs. Eski donanımımın arkasında başka 8 cihaz bulunan bir PCIe anahtarı vardı, bu yüzden dolgu biraz daha karmaşıklaştı.
Donanım açısından bakıldığında, çok daha kolay. Önce kartın GND pinleri temas eder ve bağlantı yapıldıktan sonra kartı sıralamak için LTC veya benzeri bir çalışırken değiştirilebilir kontrolör IC'si yerleştiririz. Bu noktada, yerleşik ASIC veya FPGA güç verme sırasına başlar ve PCI Express bağlantısını bağlamaya çalışmayı dener. Ana bilgisayarın çalışırken takmayı ve PCI Express SLTCAP / SLTCTRL'yi desteklediği varsayılarakkayıt (spec: PCI Express Yuvası Yeteneği Kayıt, PCI Express Yuvası Kontrol Kayıt. Bunun için 1 ve 2 de var - iki reg arasında bölünmek için yeterli bit). bu bağlantı noktası, bağlantı noktasının çalışırken takılabilir olduğunu gösterecek şekilde yapılandırılmışsa, yazılım yeni aygıtı numaralandırmaya başlayabilir. Yuva durumu (SLTSTA, PCI Express Yuvası Durum Kaydı) kaydı, hedef cihazın güç hatalarını, mekanik serbest bırakma mandalını ve elbette varlığını algılama + varlığını değiştirmeyi ayarlayabileceği bitler içerir.
Yukarıda belirtilen kayıtlar, her potansiyel bdf'ye (bus: device: function) tahsis edilen bellek haritasının (PCIe için 4K) küçük bir bölgesi olan 'PCI (Express) Yapılandırma Alanı' içinde bulunur. Gerçek kayıtlar genellikle çevresel aygıtta bulunur.
Ana bilgisayar tarafında, PRSNT1 # / PRSNT2 #, bir güç anahtarı IC'nin etkinliğini besleyen basit bir DC sinyali olarak kullanabiliriz veya bir IRQ'ya neden olmak ve bir SW 'hey tetiklemek için yonga seti / PCH'de GPIO'ya çalışabiliriz. , bul ve yapılandır! ' rutin.
Bu, sorunuza doğrudan cevap vermeyen (hızlı özet için aşağıya bakın) birçok bilgi, ancak umarım süreci anlamada size daha iyi bir arka plan sağlar. Sürecin belirli bölümleri hakkında herhangi bir sorunuz varsa, bir yorumda bana bildirin veya bana bir e-posta gönderin ve daha fazla tartışabilirim + bu cevabı bu bilgilerle güncelleyebilirim.
Özetlemek gerekirse - çevresel aygıt donanım POV'sinden çalışırken takılabilir destekle tasarlanmış olmalıdır. Düzgün tasarlanmış bir ana makine / yuva da çalışırken takılabilir ve üst düzey bir anakartta güvenli olmasını beklerim. Bununla birlikte, bunun için yazılım desteği tamamen başka bir soru ve maalesef OEM'inizin size sağladığı BIOS'a bakıyorsunuz.
Pratikte, bir PCIe ExpressCard'ı bir bilgisayardan her çıkardığınızda / taktığınızda bu teknolojiyi kullanırsınız. Ek olarak, yüksek performanslı blade sistemleri (telekom veya başka türlü) bu teknolojiyi düzenli olarak da kullanır.
Son yorum - Base Spec'e bağlı olan PDF'yi kaydedin, PCI-SIG genellikle bunun için dolar alır :)