Uyarıyı kapat
PROFİL MESAJINDAN YARDIM TALEPLERİ, BUNDAN BÖYLE İSTİSNASIZ SİLİNECEKTİR!!

10.11 ve Sonrası USB değişiklikleri ve Olası Sorunların Çözümleri

'OS X INFO KÜTÜPHANESİ' forumunda montezuma tarafından 27 Nisan 2018 tarihinde açılan konu

Bu Sayfayı Paylaş

  1. 4252.jpg

    Genel Bakış


    Kimi zaman başarılı bir kurulum ardından USB portlarımızın çalışmadığı zamanlar olabiliyor. Bunları kimi zaman kolaylıkla kext yardımı yada clover'da bazı komutlar ile çözebilsek te, bazen bu işlemler işe yaramayabiliyor.
    Bunun da bir çok nedeni var elbette. Bunların sebeplerini bu yazının devamında görebilir ve olası çözümleri inceleyebilirsiniz. Bu sayede macOS kurulumundan sonra USB'lerin çalışma mantığını, port düzenlerini ve bunun için uygulanacak olası çözümlere daha iyi hakim olabilirsiniz.

    Yukarıda dediğim gibi USB portları ile ilgili yaşanan sorunların bir çok nedeni var. Bunun ilk sebeplerinden birisi macOS 10.11 sürümü ile Apple' ın USB sürücülerini tamamen yeniden düzenlemesi.
    Bu yeni sürücüler, ACPI ‘yı geçmişteki sürücülere göre çok daha fazla kullanmaktadır. Bu durum, ACPI (DSDT)'nin doğru olması için daha fazla baskı oluşturur. Zira bu dosyalar içindeki tanımlar doğru olmazsa, var olan bağlantı noktaları yeni sürücüler tarafından etkinleştirilemeyebilir.
    Aslında, Apple'ın kendi ürünlerinde dahi bununla ilgili hatalar görülmüştür. Bu yüzden Apple, DSDT'yi bir port injectorü ile geçersiz kılmak için bir yöntem geliştirmiştir. Bu sayede mevcut portları tanımlamak için ACPI tabloları yerine yukarıda bahsettiğimiz yöntem kullanılır.
    Belirli bir Mac modelinin USB topolojisi, Hackintosh kurulu PC’nizin USB topolojisi ile aynı değilse yerleşik olan bağlantı noktası enjektörleri USB’ye müdahele ederek USB portlarının doğru çalışmasını engelleyebilir. Bu gibi sorunlara gidermek için gerekli bazı adımlara bu rehberde değineceğiz.
    Not: Bu kılavuz Intel USB3 içindir. Desteklenmeyen USB3 denetleyicileri için (örneğin, Intel ya da Fresco Logic haricinde, Asmedia, NEC/Renasas gibi), güncel GenericUSBXHCI.kext dosyasını deneyebilirsiniz: GitHub - RehabMan/OS-X-Generic-USB3: Fork of Zenith432's GenericUSBXHCI USB 3.0 driver for OS X

    Araçlara/çözümlere genel bakış


    Yukarıda anlattığımız bu sorun-ların üstesinden gelmek için birkaç yöntem/ kext/ teknik bulunmaktadır.
    • Doğru BIOS seçeneklerini seçme
    • EHCx->EH0x olarak DSDT üzerinden yeniden adlandırma işlemi
    • USB2 aygıtlarını XHC'den EHCI'ye yönlendirmek için FakePCIID_XHCIMux'u kullanmak
    • USBInjectAll.kext için özel bir bağlantı noktası enjektörü veya özel SSDT ile bağlantı noktaları enjekte etmek
    • USBInjectAll.kext ile portları enjekte etme.
    • OS X çalıştırıldığında Windows’un bir versiyonunun çalıştırıldığını simule edilmesini sağlamak için DSDT dosyasında bunun için yama yapmak.
    USBInjectAll.kext ve diğer birkaç yararlı bilgiyi burada bulabilirsiniz:
    GitHub - RehabMan/OS-X-USB-Inject-All: Kext to inject all USB ports for the installed Intel EHCI/XHCI chipset automatically..
    Repoda çeşitli dosyalara ihtiyacınız varsa, ZIP dosyasını indirin:
    https://github.com/RehabMan/OS-X-USB-Inject-All/archive/master.zip.
    Not: USBInjectAll README'yi okumak iyi bir fikir olabilir, ancak bunun öncesinde bu konuyu incelerseniz, USBInjectAll mantığını daha iyi anlayabilirsiniz.
    Eğer ACPI uyguladığınızda sorun çözülmüyorsa USBInjectAll için özel bir SSDT oluşturmayı denemelisiniz. Bununla ilgili detaylı rehber, aşağıdaki bağlantıda anlatılmış.
    [Guide] Creating a Custom SSDT for USBInjectAll.kext | tonymacx86.com

    BIOS seçenekleri
    USB denetleyicilerin yapılandırması genellikle doğru BIOS ayarlarına bağlıdır. Çoğu PC için, XHCI "auto" veya "smart auto" kullanmalısınız.
    Bu ayarlar genellikle DSDT içindeki XHCI denetleyicisini başlatan, USB2 yönlendiren ve USB3 bağlantı noktası etkinleştiren kodları etkiler. Bazı DSDT’ler bu seçili seçeneklere (örneğin, BRIX) doğru bir şekilde tanımlayabilirken, bazıları bunu yapamaz.

    Varsayılan enjektörleri devre dışı bırakma
    İlk adım, varsayılan enjektörlerin etkin olmadığından emin olmaktır. İki sınıf enjektör vardır:
    • Kontrol enjektörleri: Bunlar Mac Sistem Kimliğinde (SMBIOS) ve ACPI'deki tanımlı kontrol adı (EHC1/EHC2/XHC1) ile eşleşir.
    • Merkez port enjektörleri: Bunlar da, Mac modeli ve locationID'ye (denetleyici ve portun adresine bağlı olarak) göre eşleşir.
    Port enjektörlerinin birinci sınıfını bir DSDT bandı ile devre dışı bırakmak kolaydır. Çoğu PC’de, XHCI denetleyicisi (USB 3) 'XHC' olarak adlandırılmıştır, bu yüzden 'XHC1' olarak tanımlı olan yerleşik enjektörlerle eşleşmeyecektir.
    EHC1 ve EHC2, tipik olarak mac ve PC’ler tarafından kullanılan, USB 2 kontrolcüsünü tanımlayan iki EHCI kontrollücüsüdür EHC1'i EH01 ve EHC2'yi EH02 olarak yeniden adlandırarak, kullanmakta olduğunuz SMBIOS ile eşleşen yerleşik port enjektörlerini etkin bir şekilde devre dışı bırakabilirsiniz.
    Yeniden adlandırma işlemi, yamalanmış DSDT'de bul/değiştir (find/replace) ile veya Clover config.plist/ACPI/DSDT/Patches üzerinden yapılabilir.
    Örneğin, Lenovo u430'da, EHCx-> EH0x’i yeniden adlandırmak için aşağıdaki patchler/yamalar kullanıldı.
    Kod:
    # rename EHC1 to EH01
    into device label EHC1 set_label begin EH01 end;
    into_all all code_regex EHC1\. replaceall_matched begin EH01. end;
    into_all all code_regex \.EHC1, replaceall_matched begin .EH01, end;
    # rename EHC2 to EH02
    into device label EHC2 set_label begin EH02 end;
    into_all all code_regex EHC2\. replaceall_matched begin EH02. end;
    into_all all code_regex \.EHC2, replaceall_matched begin .EH02, end;
    Not: Yukarıdaki yamalar, DSDT içindeki tüm EHC1/EHC2 tanımlamaları tespit edemeyebilir. Bu nedenle bazı referansları el ile değiştirmeniz gerekebilir.
    Yine örnek olarak Gigabyte BRIX için, DSDT yama yapmak gerekmez. Bunun için config.plist/ACPI/DSDT/Patches içine config.plist tabanlı yamalar kullanılabilir:

    Yama 1:
    • Comment: change EHC1 to EH01
    • Find: <45484331>
    • Replace: <45483031>
    Yama 2:
    • Comment: change EHC2 to EH02
    • Find: <45484332>
    • Replace: <45483032>
    Yamalara Xcode ile baktığımızda şöyle görünecektir:
    113978-2fa06c39fa9a9872cadf366e21709fad.jpg.png


    Yamaları kendi DSDT'lerinize USBInjectAll projesinde (yukarıda verilen bağlantı) verilen config_patches.plist dosyasından kopyala-yapıştır da yapabilirsiniz. Bu yamaları uygulamak için config.plist'in kullanılması en kolay yöntemdir.
    Not: Ayrıca, yukarıda ki örnek resimde “Item 0” olarak görünen bir yama daha var. Bu yama Windows emüle eden bir yama. Buna daha sona değineceğiz.

    Ayrıca XHCI'nin XHC1 olarak değil, XHC olarak tanımlandığını doğrulamanız gerekir. Geçmiş OS X sürümleri için "USB3 Multiplex" yamasını uygulamak yeterliydi. Ancak bu yama, 10.11 ve sonrası sürümlerde XHC'yi XHC1 olarak yeniden adlandırır, bu da dahili port enjektörlerine karşı uyumsuzluk yaratır. Dolayısıyla bu yama 10.11 ve sonrasında kullanılmamalıdır.
    USB2 port yönlendirmesini uygulamak için ise en kolay yöntem FakePCIID.kext ve FakePCIID_XHCIMux.kext kullanmaktır. Bunda daha sonra değineceğiz.
    Hub için ise yerleşik port enjektörlerini devre dışı bırakmanın kolay bir yolu yoktur. SMBIOS seçeneğiniz bunun için dahili bir enjektöre sahipse ve port enjektörü nedeniyle yerleşik bir hub’daki cihazlarla ilgili sorunlar varsa, varsayılanı geçersiz kılan kendi hub port enjektörünüzü oluşturmanız gerekir. ProBook 4540'lar için MacBookPro9,1-EH02-hub enjektörü gibi yüksek bir IOProbeScore ayarlayarak varsayılanı geçersiz kılabilirsiniz.
    Not: USBInjectAll.kext EH01 ve EH02 için iki adet hub portu enjektörü içerir (sadece port #1).

    Port enjektörlerine olan gereksinim
    Yerleşik bağlantı noktası enjektörleri yeniden adlandırılarak devre dışı bırakıldıktan sonra, sürücüler hangi bağlantı noktalarının uygun olduğunu belirlemek için ACPI'den (_UPC object) veri kullanır. ACPI özelliklerinde _UPC object hakkında daha fazla bilgi alabilirsiniz.
    Ioreg ile kontrol ederseniz hangi portların aktif olduğunu görebilirsiniz
    113980-234fbabc27d1accbf204c5a1d829fdbb.jpg.png
    Eğer DSDT ile yaptığınız düzenlemelerden sonra sizin kullanmak istediğiniz portlar aktif değilse bunun sebebi DSDT dosyasında yapmış olduğumuz düzenlemenin hatalı olması ve ba yüzden portların bağlanabilir olarak tanımlanması yerine bağlanamaz olarak işaretlenmiş olmasıdır ( _UPC zero’ nun ilk alanı).
    _UPC tarafından getirilen verileri değiştirmek için DSDT'ye patch yapabilseniz bile, eksik bağlantı noktalarını etkinleştiren bir enjektör oluşturmak daha kolaydır. Bunun avantajı ise denetleyici nesneleri yeniden adlandırıldığı için, yerleşik bağlantı noktası enjektörleriyle çakışma olasılığı yoktur.
    Aşağıdaki repolarda örnek port bağlantı enjektörleri bulabilirsiniz.
    Mevcut projelerde, enjektörler aslında kullanılmamaktadır. Bu projeler ayrıca özel USBInjectAll yapılandırmaları da içerir (SSDT-HACK'de, UIAC/RMCF aracılığıyla). USBInjectAll README'de USBInjectAll yapılandırması hakkında daha fazla bilgi edinebilirsiniz.
    Etkinleştirilmesi gerekebilecek bağlantı noktalarının belirlenmesinde IOACPIPlane içindeki veriler önemli olabilir.
    u430 cihaz için IOACPIPlane'deki XHC'sinden bir görüntü:
    xhc_acpi.png
    Port adresleri aslında tamamen XHCI cihaz kimliğine bağlıdır. USBInjectAll, her bağlantı noktasının uygun adresle enjekte edilmesi için bunu kullanır.
    Mac cihazlarda 15 bağlantı Portu sınırını unutmayın. Bu yüzden portları test etmeniz gerekebilir. Zira sizin cihazınızda kullanmak istediğiniz portlar bu 15 limitinin dışında olabilir. Bu da portunuzun çalışmayacağı anlamına gelir.
    Konuyu örneklendirmek gerekirse; sistemde tanımlı HS01-HS15 (USB 2) ve artı olarak SSP1-SSP6 (USB 3) portları olsun. Bunun toplamı 21 port olur (15+6) ki, mevcut yonga setleri ile 21 port imkansızdır. Zira 8/9 serisi yonga setleri, maksimum toplam 14 portu destekler.
    Her bir bağlantı noktasını test etmek için,iki port enjektörüne ihtiyacınız var. HS01-HS09 ve SSP1-SSP6'yı (toplamda 15 adet) için bir port enjektörüne (USB disk) ve HS10-15 ve SSP1-SSP6 için de ikinci bir port enjektörüne ihtiyacınız olacaktır. Ve ya USB3 portlarını ortadan kaldırabilir ve SSPx ve HSxx'yi bağımsız olarak test edebilirsiniz. Aktif olan gerçek bağlantı noktalarını belirledikten sonra, port enjektörünü özelleştirebilirsiniz.
    USBInjectAll, gruplarda bağlantı noktalarını devre dışı bırakmak için özel komutlara sahiptir. Yani, iki özel enjektör oluşturmak yerine, USBInjectAll.kext'i de kullanabilirsiniz.
    -uia_exclude_hs, tüm HSxx bağlantı noktalarının XHC'ye enjekte edilmesini engeller.
    -uia_exclude_ssp veya -uia_exclude_ss, SSPx veya SSxx bağlantı noktalarını hariç tutacaktır. Bu komutlar sayesinde, bağlantı noktası limiti yaması kullanmadan tüm bağlantı noktalarını test edebilirsiniz.
    Tüm USB bağlantı noktalarınız XHC'de ise, -uia_exclude_hs kullanımının USB mouse/klavyenizin çalışmasını engelleyeceğini unutmayın (USB3 klavye/Mouse) yaygın değildir). Yerleşik olarak PS2 trackpad ve klavye bulunduğundan, bu dizüstü bilgisayarda bir sorun değildir. Klavye ve mouse olmadan bilgi almak için ise LAN üzerindeki başka bir bilgisayardan cihazınıza uzaktan bağlanarak ta bu işlemi yapabilirsiniz.
    USB denetleyicileriniz için mümkün olan tüm bağlantı noktalarını enjekte etmek için USBInjectAll.kext kullanabilirsiniz. Enjekte edilen tüm bağlantı noktalarında, hangisinin daha önce kullanıldığını belirleyebilirsiniz. Port sınırını artırabilecek bir patch de vardır. Port enjektörünüze hangi portların gitmesi gerektiğini belirlemek için sadece kısa süreli kullanım sağlayın. USBInjectAll.kext için README'yi okuduğunuzdan emin olun.

    ÖNEMLİ!
    Bağlantı noktası limiti yaması kalıcı bir çözüm olarak kullanılmamalıdır. Zira port limiti aşıldığında USB sürücüleri normal olmayan bir davranış gösterebilir.

    Hub bağlantı noktası enjektörleri, yalnızca location-ID ve SMBIOS ile eşleşir. Location-ID, port numarası ve denetçinin adresinden (Mac'lerde ve PC'lerde aynıdır) türetildiğinden, eşleşen bir yerleşik bağlantı noktası enjektörünü yeniden adlandırarak devre dışı bırakmak mümkün değildir. Bunun yerine, port enjektörü kextinde daha yüksek bir IOProbeScore kullanılarak mevcut port enjektörünün geçersiz kılınması gerekir. U430 reposunda, FakePCIID_XHCIMux.kext kullanırken gerektiğinde bir hub port enjektörünün bir örneğine sahiptir. Ve ProBook reposunda da, daha yüksek bir IOProbeScore kullanarak yerleşik bir hub port enjektörünü geçersiz kılan hub port enjektörüne ilgili bir örnek bulunmaktadır.
    Unutmayın ki, her bir hub için 15 port sınırı vardır. Yani, her enjektöre yapı olarak toplamda sadece 15 port tanımlayabilirsiniz. Normalde, bu sınıra ulaşılmasının çok daha kolay olduğu XHCI denetleyicisi haricinde bir sorun değildir. Zira bu portların bir kısmını EHCI'ye taşımak için FakePCIID_XHCIMux kullanılabilir.
    Bir port enjektörü kext için Info.plist'deki girdilerin çoğu "sabittir". Örneklerden birini kullanmanızı ve kendi donanımınıza, SMBIOS'unuza vb. uyarlamanızı tavsiye ederiz.
    Bağlantı noktası enjektörü özellikleriyle ilgili bazı notlar:
    • port-count: kötü bir isim tercihidir, ortada bir 'sayım' olmadığı için. Bunun yerine maksimum port adresi tercih edilir ('port' olarak belirtildiği gibi).
    • UsbConnector: USB bağlantı noktasının bağlantı tipini belirtir. Ortak değerler 0, 3, ve 255, (0: USB2 type-A, 3: USB3 type-A, 255: tescilli). Daha fazla bilgi ACPI özelliklerinde belirtilmiştir (_UPC).
    • port: DSDTdeki port _ADR 'le eşleşmelidir. Bu değeri IOACPIPlane’de görebilirsiniz.
    _OSI ve Windows versiyonları kontrolü

    ACPI kodu, hangi Windows sürümünün çalıştığını kontrol etmek için _OSI yöntemini (ACPI host bilgisayarı tarafından uygulanır) kullanabilir. Çoğu DSDT uygulaması, mevcut Windows sürümüne bağlı olarak USB yapılandırmasını değiştirir.
    OS X'i çalıştırırken, DSDT'nin _OSI ("Windows <version>") için yapacağı kontrollerin hepsi, yalnızca "Darwin" e yanıt verdiği için geçerli olmayacaktır. DSDT ‘de "OS Check Fix” yamasının yapılmasının nedeni budur. DSDT'yi, Windows'un belirli bir sürümünü taklit etmek üzere yamalamak, Windows'un belirli bir sürümünü çalıştırırken normalde gerçekleşen davranışı elde etmemizi sağlar.
    10.11 için, doğru Windows sürüm simülasyonu sisteme bağımlıdır. Bazı bilgisayarlarda "Windows 8" ("Windows 2012”), bazılarında "Windows 7" ("Windows 2009") ve diğerleri için "Windows Vista" ("Windows 2006") gerekir.
    ACPI yaması burada açıklanmıştır: [Guide] Patching LAPTOP DSDT/SSDTs | tonymacx86.com
    DSDT için (masaüstü bilgisayarlar) yamaya gerek duymuyorsanız, bu düzeltmeyi config.plist/ACPI/DSDT/Patches ile gerçekleştirebilirsiniz.
    Örneğin;_OSI to XOSI:
    • Comment: change _OSI to XOSI
    • Find: <5f4f5349>
    • Replace: <584f5349>
    Xcode'un plist editöründe şöyle görünür:
    xosi.png
    Buna yönelik olarak, SSDT-HACK.dsl'den genel kullanımla ilgili kısmı aşağıya ekledim:
    (BRIX SSDT-HACK.dsl içinde birkaç şey daha var)
    Kod:
    DefinitionBlock ("", "SSDT", 1, "hack", "XOSI", 0)
    
    {
        // All _OSI calls in DSDT are routed to XOSI...
        // XOSI simulates "Windows 2009" (which is Windows 7)
        // Note: According to ACPI spec, _OSI("Windows") must also return true
        //  Also, it should return true for all previous versions of Windows.
        Method(XOSI, 1)
        {
            // simulation targets
            // source: (google 'Microsoft Windows _OSI')
            //  http://download.microsoft.com/download/7/E/7/7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2/WinACPI_OSI.docx
            Name(WINV, Package()
            {
                "Windows",              // generic Windows query
                "Windows 2001",         // Windows XP
                "Windows 2001 SP2",     // Windows XP SP2
                //"Windows 2001.1",     // Windows Server 2003
                //"Windows 2001.1 SP1", // Windows Server 2003 SP1
                "Windows 2006",         // Windows Vista
                "Windows 2006 SP1",     // Windows Vista SP1
                //"Windows 2006.1",     // Windows Server 2008
                "Windows 2009",         // Windows 7/Windows Server 2008 R2
                //"Windows 2012",       // Windows 8/Windows Server 2012
                //"Windows 2013",       // Windows 8.1/Windows Server 2012 R2
                //"Windows 2015",       // Windows 10/Windows Server TP
            })
            Return (Ones != Match(WINV, MEQ, Arg0, MTR, 0, 0))
        }
    }
    USBInjectAll.kext proje repo, ayrıca, yukarıda gösterilen XOSI kodunu içeren _OSI-> XOSI yamalarına ve SSDT-XOSI.dsl’ye sahiptir.
    Normalde, _OSI çağrıları OS X (ACPI host bilgisayarı) tarafından ele alınacaktır, fakat yama aracılığıyla, XOSI'ye yönlendirilen _OSI çağrıları, böylece Windows'un belirli bir sürümünü taklit edebilir.
    Yukarıda bahsedilen XOSI sürümü, BRIX ile iyi uyumlu bir "Windows 2009" (Windows 7) simülasyonunu kullanır. Siz de bu kodu, gerektiğinde değiştirerek (listelenen Windows sürümlerini yorumlayan veya yorumlamayan) başka herhangi bir Windows sürümünün benzerini elde edebilirsiniz.
    BRIX repo/config.plist/SSDT-hack.dsl, vb için bu linki inceleyin:
    GitHub - RehabMan/Gigabyte-BRIX-s-DSDT-Patch: DSDT patches for OS X on Haswell Gigabyte BRIX-s (GB-BXi5H-4200 and others)

    XWAK, XSEL, ve ESEL

    Çoğunlukla bu üç yöntem DSDT'de bulunur ve XCHI denetçisinden USB2 bağlantı noktası yönlendirme ile ilgili XHCI kayıtlarını manipüle edebilirler.
    Daha açık ifade etmek gerekirse; uygun XHCI sürücüleri olmadan işletim sistemlerinde geriye dönük uyumluluk sağlamak için USB2 portu yönlendirmesi oluşturulmuştu. Bunun amacı; XHCI üzerindeki USB2 bağlantı noktalarını EHCI kontrol ünitesine yönlendirmek ve sadece USB2 (EHCI) sürücüleri olan işletim sistemlerini, USB3 bağlantı noktalarına sahip bilgisayarlarda (tabii ki USB2 hızında) çalıştırmak.
    Bu yönlendirme genellikle XSEL ve ESEL'de kontrol edilir. Windows'un eski sürümleri algılandığında ESEL çağrılır ve Windows'un daha yeni sürümleri algılandığında XSEL çağrılır. Birinin diğerine tercih edildiği durumlar sisteme bağlıdır.
    XWAK ise sistem Uykudan uyandıktan sonra, _WAK'dan bulunur. Eğer bağlantı noktanızın uykudan uyandıktan sonra çalışmadığını fark ederseniz; XWAK, XCHI denetleyicisine 10.11 sürücülerinin beklemediği bir şey yapmıştır. Bu nedenle XWAK'ı devre dışı bırakmak faydalı olabilir.
    Örneğin, aşağıdakini sonrasında belirtilene değiştirin:
    Bunu;
    Kod:
    Method (XWAK, ...)
    {
        ... original code ...
    }
    Bununla değiştirin:
    Kod:
    Method (XWAK, ...)
    {
        Return(0)
        ... original code ...
    }
    Koda eklenen Return komutu, olası bir hatayı engellemek için yöntemden derhal çıkılmasını sağlar.

    USB2 bağlantı noktası yönlendirme: (multiplex) ve FakePCIID_XHCIMux

    10.11'den önce, bazı bilgisayarlarda ilk önce Mieze adlı geliştirici tarafından tanımlanan Multiplex yama kullanılmıştır. DSDT kodundaki farklılıklar nedeniyle, bu yama farklı bilgisayarlara uyum sağlaması kolay olmayan, karmaşık bir yama idi.
    BU bağlanda Multipleks yaması 10.11 ve sonrası için kullanılmamalıdır.
    Öncelikli olarak yukarıda anlatılan işlemi yapmak için, FakePCIID_XHCIMux.kext (FakePCIID.kext de gerekli) kullanılır. Zira bu kext, XHCI üzerindeki USB2 cihazlarını EHCI kontrol cihazına yönlendirilmeye zorlar.
    Bu, iki nedenden dolayı avantajlıdır:
    - Bazı cihazlar EHCI'ye bağlandığında daha iyi yanıt verir.
    - Yeni USB sürücülerinde bulunan 15 bağlantı noktası dahilinde çalışmayı sağlar
    Her ne kadar 15 bağlantı noktası limitinin EHCI kontrol üniteleri (EH01/EH02) ve hatta bir hub üzerinde bir etkisi olma ihtimali olmamasına rağmen (çoğu dahili hub 8 porttan oluşuyor gibi görünmektedir), XHCI denetçisinde bir sorun olabilir. XHCI kontrol cihazındaki her bir USB3 portu aslında iki port olduğundan, limite kolayca ulaşılabilir.
    XHCI'de altı (6) USB3 bağlantı noktasına sahip bir anakart düşünün. Her bir bağlantı noktası, toplam 12 bağlantı noktası olarak hem bir USB2 bileşenine hem de bir USB3 bileşenine sahiptir. Ek olarak, XHCI kontrol cihazında sadece birkaç USB2 portu (normalde anakarta dahil) olabilir. XHCI'de (toplam 14 gerçek port vardır) 6 adet USB3 portu ve 8 adet USB2 portu, toplamda 20 eder ve burada 5 port fazla olacaktır.
    Ancak, USB2 bağlantı noktaları XHCI kontrol cihazının bir özelliği kullanılarak XHCI'den EHC1'e yönlendirilebilir. FakePCIID_XHCIMux bu özellikten yararlanır ve bu yönlendirmeyi gerçekleştirmeye zorlar. OS X'deki XHCI sürücüsünün yönlendirme yapılandırmasını değiştirmesi için herhangi bir girişimi engelleyebilir.
    Yani FakePCIID_XHCIMux.kext 14 tane olan USB 2.0 portun bazılarını XHCI içindeki 15 port limiti içinde kalması için, XHCI’den EHCI içine taşır.
    BIOS tarafında ise: BIOS XHCIMux tarafından yapılan XHCI kayıtlarını (PR2M) ayarlayarak bu yönlendirme üzerinde sınırlamalar uygular. Bu sayede, taşınan bu portlar BIOS/anakart üzerinde de değişir.
    Ayrıca bu kext, yukarıda anlattığımız Multipleks yamasına göre uygulaması çok daha kolaydır: Sadece FakePCIID.kext ve FakePCIID_XHCIMux.kext'i kurun.
    Ancak yine de EH01'e (genellikle EH01'in 1 numaralı bağlantı noktasındaki bir hub) taşınan bağlantı noktalarını, DSDT’niz bu bağlantı noktaları (veya hub bağlantı noktaları) için doğru _UPC'yi bulamazsa, düzeltmek için bir enjektöre ihtiyacınız vardır.
    FakePCIID github'umdan erişilebilir. Her zaman olduğu gibi README'yi okuyun.
    GitHub - RehabMan/OS-X-Fake-PCI-ID: Allow returning Fake PCI ID from IOPCIDevice. Used to avoid patching kexts, such as needed for HD4600 Yosemite, WiFi and others.

    Sonuç:

    Kısaca gözden geçirmek gerekirse şunları söylemek mümkündür:
    • DSDT, USB bağlantı noktaları ve yerleşik USB hub'larındaki bağlantı noktaları hakkında bilgi içerir
    • DSDT yanlış olabilir.
    • Apple, birkaç Apple ürününde DSDT hatası buldu, bu yüzden DSDT'yi (port enjektörleri) geçersiz kılacak bir mekanizma uyguladılar.
    • Apple bağlantı noktası enjektörleri, SMBIOS ve denetleyicinin ACPI adıyla eşleştirilmiştir.
    • Apple bağlantı noktası enjektörleri, port enjektörleri eşleştiğinde DSDT'nizi (doğru veya değil) geçersiz kılacaktır.
    • Bir eşleşmeyi önlemek için denetleyicileri yeniden adlandırma, Apple tarafından sağlanan bağlantı noktası enjektörlerinden kaçınmak için kullanılabilir; bu durumda, sistem DSDT'ye geri yüklenir (yine de hala yanlış olabilir)
    • Bağlantı noktaları yeniden adlandırıldıktan sonra, DSDT'niz USB bağlantı noktası topolojisi hakkında yanlış bilgi verdiğinde, Apple'ın kendi bilgisayarları için yaptığı gibi bir bağlantı noktası enjektörü de oluşturabilirsiniz (DSDT _UPC'yi de düzeltebilirsiniz, ancak bir bağlantı noktası enjektörü yapmak daha kolay bir iştir.)
    • USBInjectAll.kext, her bir denetleyici/hub için mümkün olan tüm portları otomatik olarak enjekte etmek için kullanılabilir.
    • Buna karşın, her denetleyici ya da hub için 15 bağlantı noktası limiti vardır
    • Bir yama ile 15 bağlantı noktası sınırı artırılabilir. Yama tehlikeli olabilir, bu nedenle uzun süreli kullanım için uygun değildir.
    • USB2 ve USB3 bileşenleri XHC denetleyicisine yönlendirildiğinde USB3 bağlantı noktaları iki adet gibi kabul görür
    • USB2 portları XHC çipindeki kayıtlar aracılığıyla XHC'den EHC'ye yönlendirilebilir
    • Yerleşik sürücüler bu yönlendirmeyi destekler (çoğullama), ancak bu iyi anlaşılmamıştır (özel DSDT yöntemleri ve USB port enjektör verileri arasında bir ilişki vardır)
    • FakePCIID_XHCIMux.kext, XHC üzerindeki USB2 bileşenini EHC'ye zorlamak için kullanılabilir
    • FakePCIID_XHCIMux.kext, OS X USB sürücülerinde bu tür yazım gerçekleştiğinde, USB2 yönlendirme kayıtlarına yazımları engelleyebilir.
    • BIOS ayarları, FakePCIID_XHCIMux'un işlemesini etkiler (USB2 portu yönlendirme maskesinin BIOS ayarını kullanır)
    • FakePCIID_XHCIMux.kext, ACPI alanından kaynaklanan yazımları engelleyemez (AppleACPIPlatform.kext, bu yazılanları yapmak için IOPCIDevice'den geçmez)
    • Özellikle uykudan uyanmada DSDT USB 2 port yönlendirmesi ile alakalı olarak hataya neden olabilir.
    • ACPI yamaları ile veya bazen Windows'un belirli bir versiyonunu taklit ederek (_OSI-> XOSI yaması) yazılabilir.
    Bu yüzden... Kullanılan çözümler, aslında hangi koşulların gerçekleştiğine bağlıdır:
    • XHC'de USB2 bağlantı noktası yönlendirmesi için BIOS ayarları ("otomatik" ile "akıllı otomatik" ve "etkin")
    • Yerleşik port enjektörlerini önlemek için EHCx-> EH0x olarak yeniden adlandırır
    • FakePCIID_XHCIMux, XHC'de USB2 bağlantı noktası yönlendirmesini sağlar/ Zorlar
    • DSDT, Darwin'i çalıştırırken Windows'u (çeşitli sürümlerini) taklit etmek için yamalar kullanır
    • DSDT’ de XHC'de (XWAK, ESEL, XSEL'i geçersiz kılarak) bağlantı noktası yönlendirme komutu yazılmasını engellemek için yama yapılır.
    • Özel bağlantı noktası enjektörü (kexts)çekirdek uzantıları, gerçek bağlantı noktası yapılandırmasıyla eşleşir.
    • USBInjectAll.kext kullanarak, gerçek bağlantı noktaları belirlenebilir.
    Özel Tavsiyeler (7 serisinden daha eski olanlar)
    7 serisinden önce, Intel XHCI denetleyici yoktur. Sadece USB2 sorunları burada ele alındı.
    İlk olarak EHCx-> EH0x yeniden adlandırılırması yapılır. Bu yapılması gereken ilk adımdır.
    5 serisi için, configUSlist/ACPI/DSDT/Fixes içinde FixUSB_1000 kullanın.
    Hala çalışmayan bağlantı noktaları varsa, USBInjectAll.kext dosyasını yükleyin.
    Windows sürüm benzeşmesinin(emulasyon) önemsiz olması muhtemeldir, ancak yine de bir sorununuz varsa, denemek her zaman iyidir. _OSI->XOSI + SSDT yöntemi uygulanacak en kolay yöntemdir.

    Özel Tavsiyeler (7-serisi, 8- serisi, 9- serisi, X99)
    İlk olarak EHCx-> EH0x yeniden adlandırılırması yapılır. Bu yapılması gereken ilk adımdır.
    Versiyon 7, Versiyon 8, ve Versiyon 9 için, FakePCIID_XHCIMux.kext yükleyin (FakePCIID_XHCIMux, FakePCIID.kext olmadan çalışmaz ve sadece belirtilen chipset grupları için geçerlidir).
    Birçok boardda, _UPC'nin XHC'de doğru olduğu varsayılarak, her şeyin çalışacağı söylenebilir.
    Ancak bu noktada iki öğe sorunlara neden olabilir:
    • Yanlış Windows emulasyonu nedeniyle DSDT'niz USB3'ü devre dışı bırakıyor olabilir. Bunu ele almak için XOSI düzeltmesini uygulayın.
    • SMBIOS'unuz için dahili hub bağlantı noktası enjektörleri engel olabilir. USBInjectAll.kext yükleyin ve -uia_exclude_xhc komutunu kullanın. Bu, EH0x ve ilgili hub'lar için USBInjectAll port enjektörlerini, yerleşik hub bağlantı noktası enjektörlerini geçersiz kılar, ancak DSDT'nin XHC'yi kontrolünü sağlar.
    Eğer hala çalışmayan bazı bağlantı noktaları varsa, -uia_exclude_xhc komutunu kaldırın. XHC'niz 15'ten fazla bağlantı noktasına sahipse (aygıt kimliği 8086:8xxx), bağlantı noktası sınırlama ekine ihtiyacınız olacak veya testlerinizi aşamalara ayırmanız gerekecektir (-uia_exclude_hs, -uia_exclude_ss, -uia_exclude_ssp kullanarak).
    Not: X99 sistemlerinde, yerel Intel XHC sürücüleri 8086:8d31'i desteklemez. Bunu etkinleştirmek için bir enjektör kext)’e htiyacınız var. Ayrıntılar için USBInjectAll.kext README bölümüne bakınız.

    Özel Tavsiyeler (200 serisi)

    10.12.3 itibariyle, 200 serisi yonga setlerinde XHC kontrol cihazı için yonga seti desteği yoktur. Sonuç olarak, 100 serisinin sürücüsünü yüklemek için bir enjektör kext'e ihtiyacımız var. USBInjectAll README’de belirtildiğine göre, XHCI-200-series-injector.kext kullanın.
    Ayrıca, 100 serisi için ek bilgilere bakın (aşağıda)...

    Özel Tavsiyeler (100 serisi)

    100 serisinde EHCI denetçisi olmadığından 7/8/9 serisi için birçok çözüm (ve problem) 100 serisine uygulanmaz.
    USBInjectAll.kext'i yükleyin. 100 serisi enjeksiyonuna ek olarak port limit sınırına ihtiyacınız olacaktır.
    Buradan, USBInjectAll'i UIAC/RMCF'li bir SSDT kullanarak özelleştirin. USBInjectAll README'yi okuyun. Sizin sisteminiz için hazırlanmış bir SSDT’ de aramak iyi bir çözüm olabilir.
    Tüm portlar enjekte edildikten sonra, test edin, hangilerinin önemsiz olduğunu belirleyin ve bunları uia_exclude ile işaretleyin. uia_exlude komutu, RMCF aracılığıyla özel bir USBInjectAll yapılandırmasında bile bağlantı noktalarını hariç tutacaktır. Toplam portları 15'in altına getirmek için yeterli portlar tutulduktan sonra port limitini kaldırabilirsiniz.

    Sistem Bilgisi hakkında not

    OS X'deki Sistem Bilgisi uygulaması, USB cihazları ve bağlı oldukları kontrol cihazları hakkındaki bilgileri görüntüleyebilir (Sistem Bilgisi -> USB).
    Sistem, "USB 2.0 Veriyolu" olarak EHCI#1 veya ECHI#2'ye bağlı USB cihazları ve XHCI'ye "USB 3.0 Veriyolu" olarak bağlı herhangi bir cihaz görüntüler.
    "USB 3.0 Veriyolu" altındaki USB2 cihazlarını görüyorsanız şaşırmayın. FakePCIID_XHCIMux olmadan, XHCI tarafından işlenen bir bağlantı noktasına takılan USB2 aygıtları "USB 3.0 veriyolu" olarak gösterilir. XHCI hem USB3 hem de USB2 bağlantı noktalarını işleyebilir.
    USB2 aygıtlarının "USB 2.0 Veriyolu" altında USB3 bağlantı noktalarına takılı olduğunu görürseniz, yine şaşırmayın. FakePCIID_XHCIMux ile herhangi bir USB3 bağlantı noktasının USB2 bileşeni EHCI'ye yönlendirilir.

    Montezuma 2018®
    Kaynak: Rehabman
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Hepsini görmek için tıklayın...
    #1 montezuma, 27 Nisan 2018
    Son düzenleme: 5 Mayıs 2018
    linepower, melih_11, hasanC ve 5 kişi daha bunu beğendi.
Yükleniyor...
Yükleniyor...