Mam urządzenie PCIe, które działa poprawnie tylko wtedy, gdy komputer jest całkowicie wyłączony, a następnie włączony ponownie. Wydanie polecenia prostego reboot
lub reboot -p
polecenia nie wydaje się włączać zasilania karty PCIe, co powoduje, że nie działa ona po ponownym uruchomieniu.
Czy istnieje sposób, aby z systemu operacyjnego włączyć zasilanie urządzenia w gnieździe PCIe? Mogę to znaleźć /sys/bus/pci/devices/0000*/
, ale nie mogę wymyślić, jak poprawnie zresetować płytkę. Wydaje się, że przełączanie mocy jest jedynym sposobem.
Pomijając to, czy mogę zmienić ustawienie, które spowoduje pełny cykl zasilania reboot
polecenia?
Nawiasem mówiąc, używam Ubuntu 12.10.
devices
power-management
pci
zachd1_618
źródło
źródło
reboot -f
? Jest to podobne do naciskania przycisku zasilania procesora.reboot
nie działa. Twójreboot -f
nadal jest miękki restart.Odpowiedzi:
Potencjalna metoda nr 1
Myślę, że możesz to zrobić za pomocą następujących poleceń:
wyłączyć
włączyć
Gdzie
$NUMBER
jest numer gniazda PCI.lspci -vv
może pomóc w identyfikacji urządzenia. Nie jest to zbyt dobrze udokumentowane ...Potencjalna metoda nr 2
Natknąłem się na ten wątek na temat U&L , podobny problem: istnieją odpowiedzi na to pytanie, które mówią, że można zresetować za pomocą tego polecenia:
Jednak czytałbym tam odpowiedzi! Istnieją warunki do zrobienia tego w ten sposób! W szczególności przeczytałbym tę odpowiedź !
Potencjalna metoda nr 3
Istnieje komenda Unix
setpci
, która może dać ci metodę resetowania urządzenia w szynie PCI.Nie widziałem żadnych konkretnych przykładów z tym poleceniem, więc będziesz musiał znaleźć przykłady w Google i przejrzeć stronę podręcznika . Z tym poleceniem wykonałbym lekkie kroki, dopóki nie będziesz pewny co do jego użycia. Z tego, co o nim czytałem, bezpośrednio manipuluje sprzętem, więc zawsze jest ryzyko, że zrobisz to sam, a nie przy użyciu narzędzia, które ujawnia ten rodzaj funkcjonalności!
źródło
/sys/bus/pci/devices/$NUMBER/
. Ale nic nie wydaje się uzasadniać ustawienia 0 lub 1echo "1" > ...
.power
rzeczywiście wstawia go do D3.remove
irescan
pozwoli jądrze zasilać cyklicznie urządzenie PCI bezreboot
:gdzie DDDD.BB.DD.F = Domena: Magistrala: Funkcja urządzenia
źródło
Resetowanie w PCI Express jest nieco skomplikowane. Istnieją dwa główne typy resetowania - reset tradycyjny i reset na poziomie funkcji. Istnieją również dwa rodzaje resetu konwencjonalnego: resetowania podstawowego i resetowania nie fundamentalnego. Zobacz wszystkie szczegóły w specyfikacji PCI express.
„Zimny reset” to podstawowy reset, który ma miejsce po podłączeniu zasilania do urządzenia PCIe. Wydaje się, że nie ma standardowego sposobu wyzwalania zimnego resetu, z wyjątkiem wyłączenia i ponownego włączenia systemu. Na moich komputerach
/sys/bus/pci/slots
katalog jest pusty.„Ciepły reset” to podstawowy reset, który jest uruchamiany bez odłączania zasilania od urządzenia. Wydaje się, że nie ma standardowego sposobu wyzwalania ciepłego resetu.
„Hot reset” to konwencjonalny reset uruchamiany przez łącze PCI Express. Gorący reset jest uruchamiany albo wtedy, gdy łącze jest zmuszone do bezczynności elektrycznej, albo przez wysłanie zestawów TS1 i TS2 z zestawem bitów gorącego resetu. Oprogramowanie może zainicjować gorący reset poprzez ustawienie, a następnie wyczyszczenie bitu resetu wtórnej magistrali w rejestrze kontrolnym mostu w przestrzeni konfiguracyjnej PCI portu mostka przed urządzeniem.
„Reset na poziomie funkcji” (FLR) to reset, który wpływa tylko na jedną funkcję urządzenia PCI express. Nie może resetować całego urządzenia PCIe. Implementacja resetowania na poziomie funkcji nie jest wymagana przez specyfikację PCIe. Resetowanie na poziomie funkcji jest inicjowane przez ustawienie bitu inicjującego resetowanie na poziomie funkcji w rejestrze kontrolnym urządzenia funkcji w strukturze zdolności PCI express w przestrzeni konfiguracji PCI.
Linux udostępnia funkcję resetowania na poziomie funkcji w postaci
/sys/bus/pci/devices/$dev/reset
. Zapisanie 1 do tego pliku zainicjuje resetowanie poziomu funkcji dla odpowiedniej funkcji. Należy pamiętać, że wpływa to tylko na tę konkretną funkcję urządzenia, a nie na całe urządzenie, a urządzenia nie są wymagane do implementacji resetowania na poziomie funkcji zgodnie ze specyfikacją PCIe.Nie znam żadnej „ładnej” metody wyzwalania gorącego resetu (nie ma na to wpisu sysfs). Można jednak użyć do tego setpci:
Upewnij się, że wszystkie podłączone sterowniki są rozładowane przed uruchomieniem tego skryptu. Ten skrypt podejmie próbę usunięcia urządzenia PCIe, a następnie wyda polecenie przywrócenia portu przełącznika w celu wykonania gorącego resetu, a następnie spróbuje ponownie przeskanować magistralę PCIe. Ten skrypt został przetestowany tylko na urządzeniach z jedną funkcją, więc może wymagać przeróbki dla urządzeń z wieloma funkcjami.
źródło