IBM ThinkPad, niefirmowa karta miniPCI
i "Error 1802"
Część
sprzedawanych obecnie notebooków ThinkPad firmy IBM, nie
wyposażonych w
bezprzewodowe karty sieciowe WiFi (standard 802.11 a/b/g) określana
jest przez producenta jako "wireless upgradeable". Oznacza to, że
pomimo braku zainstalowanej fabrycznie karty WiFi posiadają one
zamontowany w obudowie monitora LCD zespół anten. Ich rozbudowa
do
standardu WiFi wymaga więc tylko umieszczenia w znajdującym się od
spodu
komputera slocie odpowiedniej karty WiFi wykonanej w standardzie
miniPCI.
W chwili obecnej na rynku dostępnych jest
wiele modeli takich kart, jednakże próby użycia kart nie
będących
wyrobami marki IBM kończą się zablokowaniem
komputera podczas jego uruchamiania i wyświetleniem dziwnie brzmiącego
komunikatu: ERROR
1802: Unauthorized
network card is plugged in. Power off and remove the miniPCI network
card.
Jakie
są
tego powody? Można tylko zgadywać. IBM twierdzi, że jest to
wymóg
prawny, stawiany m.in. przez FCC (tylko co ma FCC do rynku
europejskiego?).
Niepodważalnym faktem pozostaje jednak, że IBM nie jest w swym
postępowaniu wyjątkiem i blokada taka istnieje także w
komputerach innych producentów (np. HP/Compaq).
Co ciekawe oczywiście IBM sam nie produkuje żadnych kart WiFi, firmuje tylko swoją marką wyroby innych
producentów i sprzedaje je później za odpowiednio wyższą
cenę.
Przykładem
takiej karty może być Intel Wireless/Pro 2200BG, obsługująca
zarówno
standard 802.11b (11Mbit/s) jak i 802.11g (54Mbit/s). Jak się
należałoby spodziewać karta
ta, sprzedawana jako wyrób OEM (i dostępna tanio na
różnych serwisach aukcyjnych w cenie rzędu 100-200zł) nie
chce wspólpracować z ThinkaPadami, natomiast ta sama karta
sprzedawana
przez IBM-a współpracuje z ThinkPadami bezproblemowo.
Dlaczego tak jest?
Otóż w BIOS-ie
ThinkPadów zaszyta jest specjalna lista określająca z
którymi kartami
miniPCI komputer może współpracować, a z którymi nie. I
na liście tej
znajdują się
tylko i wyłącznie karty rozprowadzane i firmowane przez koncern IBM.
Tutaj pojawia się pytanie skąd komputer
wie jaką kartę ma włożoną?
Otóż każda karta zgodna ze standardem PCI
posiada w swojej pamięci konfiguracyjnej specjalny identyfikator
określający zarówno producenta, jak i model karty.
Przykładowo
identyfikatorem karty Intel 2200BG OEM przeznaczonej na rynek
europejski jest ciąg: VEN_8086&DEV_4220&SUBSYS_27028086
Ciąg "VEN_8086"
oznacza producenta, firmę Intel. "DEV_4220"
oznacza model karty (2200BG), zaś ciąg "2702"
oznacza wykonanie OEM przeznaczone na rynek europejski ("2701"
oznaczałoby wersję OEM przeznaczoną na rynek amerykański). Ta sama
karta, firmowana
przez IBM przedstawia się natomiast jako "2712"
(wersja europejska) lub "2711"
(wersja amerykańska) .
Pełny ciąg identyfikujący kartę Intel 2200BG, przeznaczoną na rynek
europejski i firmowaną przez IBM-a wygląda zatem następująco: VEN_8086&DEV_4220&SUBSYS_27128086
Czy można
jakoś ominąć to
zabezpieczenie?
Oczywiście :-)
Uwaga!
Wszelkie
informacje przedstawione poniżej są informacjami udostępnionymi w
celach edukacyjnych. Korzystając z nich czynisz to tylko i
wyłącznie
na własne ryzyko i własną odpowiedzialność, gdyż mogą one doprowadzić
do uszkodzenia
komputera
oraz utraty gwarancji.
Nie jest możliwe zapewnienie, że przedstawione poniżej rozwiązania
będą
działać one na wszystkich komputerach rodziny ThinkPad, aczkolwiek na
moim IBM ThinkPad R40 oraz kilku innych modelach ThinkPadów
osób
piszących na forum AnandTech metoda numer 3 okazała się być skuteczną.
1. Pierwszym z możliwych
rozwiązań jest przeprogramowanie pamięci karty tak, aby udawała
ona kartę firmowaną przez odpowiedni koncern. Cała procedura
i
używane w tym celu oprogramowanie zależą tutaj od modelu karty i jedyny
znany mi obecnie opis dotyczy kart Intel PRO/Wireless 2200BG (802.11
b/g) oraz Intel PRO/Wireless 2915ABG (802.11 a/b/g). Można go znaleźć na
forum Anandtech
(komputery IBM/HP/Compaq) oraz na stronie http://stachon.webpark.cz/ipw-eeprom.html
(komputery HP/Compaq). Niestety w przypadku komputerów IBM dioda
sygnalizująca działanie karty w dalszym ciągu nie będzie działać.
2.
Drugie z rozwiązań polega na zmodyfikowaniu listy
dozwolonych kart zawartej w BIOS-ie.
Niestety jest to rozwiązanie raczej dość skomplikowane, pracochłonne
i ryzykowne, wymagające w dodatku przeprowadzania go każdorazowo
przy uaktualnianiu BIOS-a komputera.
Dla
chcących
poeksperymentować polecam nastepujący adres: http://www.paul.sladen.org/thinkpad-r31/wifi-card-pci-ids.html
3. Trzecim
rozwiązaniem,
najprostrzym i najmniej ryzykownym, jest zmiana tylko jednego bitu w
pamięci
konfiguracyjnej CMOS, tak aby wyłączyć korzystanie z zawartej w BIOS-ie
listy. Do wykonania tego niezbędny jest mały programik, który
można
pobrać tutaj.
Uwaga: Program
ten
działa tylko z poziomu czystego DOS-a, nie działa uruchomiony
pod systemem Windows. Konieczne jest więc wystartowanie komputera z
bootowalnej dyskietki lub płyty CD z systemem DOS.
Używanie tańszych, niefirmowanych przez IBM-a kart powoduje
również inne
skutki uboczne:
Nie będzie działać
umieszczona pod wyświetlaczem komputera
dioda LED sygnalizująca działanie karty radiowej. W chwili obecnej
rozwiązanie tego problemu nie jest znane.
Oryginalne oprogramowanie
IBM Access Connection "nie zauważa"
faktu istnienia kart WiFi niefirmowanych przez IBM. Rozwiązanie tego
problemu jest stosunkowo proste, wymaga tylko wprowadzenia niewielkich
poprawek na zawarte w dwóch plikach (Qcon.dlloraz TpFnF5C.exe)
listy dozwolonego sprzętu. (UWAGA!
Poprawki te były skuteczne w przypadku wersji oprogramowania
AccessConnection <= 3.81. Dla wersji późniejszych z powodu
przeprogramowania pamięci EEPROM mojej karty i2200BG prób już nie
przeprowadzałem)
Do wprowadzania modyfikacji można użyc
np. darmowego edytora Hview2000. Oczywiście pamiętajmy o wykonaniu
na wszelki wypadek kopii bezpieczeństwa modyfikowanych plików.
Modyfikacja plików polega wprowadzeniu do nich ciągu
identyfikującego
naszą kartę. Najprościej można to wykonać poprzez wyszukanie najpierw
ciągu znaków
identyfikujących posiadaną przez nas model karty, ale firmowany przez IBM-a.
Nastepnie wystarczy zmienić go na ciąg identyfikujący naszą kartę.
Jak znaleźć jaki identyfikator ma nasza karta?
Informację te można znaleźć w rejestrze systemowym Windows
(klucze HKLM->System->CurrentControlSet->Enum->PCI
albo HKCC->System->CurrentControlSet->Enum->PCI)
lub też wykorzystując np. darmowy program diagnostyczny Everest.
Przykładowo posiadamy kartę
Intel 2200BG OEM, która identyfikowana jest podawanym już
wcześniej na
tej stronie ciągiem VEN_8086&DEV_4220&SUBSYS_27028086,
podczas gdy wersja
firmowana przez IBM identyfikowana jest jako VEN_8086&DEV_4220&SUBSYS_27128086
(ciąg ten najszybciej znajdziemy
przeglądając w dowolnym edytorze tekstowym plik .inf sterowników naszej
karty) Jak widać jedyną
różnicą
między oboma ciagami jest "2702"
oraz "2712".
Dlatego też
znajdujemy w
pliku wszystkie wystąpienia (w Qcon.dll
są dwa!) identyfikatora naszej karty
firmowanej
przez IBM (czyli 27128086)
i zmieniamy go na identyfikator naszej karty (27028086).
Ponieważ modyfikowane pliki mogą być zabezpieczone przed zmianami
obliczaniem
ich sumy kontrolnej, więc na wszelki wypadek modyfikujemy też
identyfikatory jakiejś innej karty tak, aby suma wszystkich
wprowadzonych przez nas zmian wyniosła zero.
Przykładowo zmieniliśmy w dwóch miejscach w pliku Qcon.dll ciąg "2712"
na "2702"
(odjęliśmy jeden), więc w sąsiednich
identyfikatorach ciąg "27118086"
zamieniamy na "27118186"
(dodajemy to, co wcześniej odjęliśmy). Nastepnie zapisujemy zmieniony
plik i restartujemy system. Po wprowadzeniu zmian w pliku Qcon.dll nasza karta powinna
być już widziana przez
oprogramowanie IBM Acces Connection, po wprowadzeniu modyfikacji w TpFnF5C.exe
powinno
być także możliwe
włączanie/wyłaczanie karty kombinacją klawiszy Fn + F5.