Flashowanie BIOS spod Linuksa – flashrom.

Dla jasności: poniższy wpis nie ma charakteru poradnika, bardziej jest opisem geekowej zabawy i jako taki należy go traktować, chociaż parę porad też się znajdzie.

Przeczytałem wpis o flashowaniu BIOS bez użycia Windowsa i stwierdziłem, że brakuje tam opisu natywnego linuksowego rozwiązania, czyli programu flashrom. Przy okazji wyszło też na jaw, że grzejnik korzysta z BIOSu w wersji 1.90, jak go fabryka wypuściła, a na stronie producenta dostępna jest wersja 2.80. Co prawda don’t fix it, if it ain’t broken, ale ponieważ flashrom chwali się wsparciem dla płyty ASRock K7S41 a u mnie jest ASRock K7S41GX, to pomyślałem, że spróbować trzeba, bo nazwa podobna, a GX kojarzy się z grafiką. 😉 Do sprawdzania wersji BIOS, płyty itd. korzystamy oczywiście z programu dmidecode.

Na początek rozczarowanie – wersja flashrom ze Squeeze nie wspiera tej płyty. Ale na stronie projektu flashrom podany jest namiar na kanał IRC, gdzie w razie problemów można uzyskać pomoc. Od razu zaznaczę, że kanał jest bardzo pomocny, ale techniczny. Czyli chłopaki (znaczy: developerzy) chcą dużo paste’ów z verbose mode. 😉 Opisałem problem, dostałem sugestię, by skorzystać z wersji SVN, co uczyniłem.

Jest nieco lepiej, ale nadal nie działa, bo nie rozpoznaje płyty, ale jakiś postęp jest. Dostaję pytania o wersję chipa z BIOSem (wymaga otwarcia puszki, zdarcia nalepki i odczytania napisów z chipa), prośbę o użycie programu superiotool, zaczynam pomału orientować się w temacie, z grubsza kojarzyć co tam się przy tym flashowaniu tak naprawdę odbywa, jak wyglądają płyty (taaak, chipy z BIOSem drastycznie się zmieniły odkąd ostatnio grzebałem w sprzęcie, choć i ten nie jest najnowszy)…

Okazuje się, że super I/O chip jest obsługiwany, chip BIOSu też… Dłuższe przejrzenie stron z opisem płyt K7S41 i K7S41X oraz źródełek flashrom ujawnia, że to bardzo podobne konstrukcje, z tym samym super I/O chipem i tym samym chipem BIOS. Okazuje się też, że udaje się odczytać aktualny BIOS do pliku:

flashrom -c W49F002U/N -m Asrock:K7S41 -VV -r test.dmp -f

Co prawda wymuszając wszystko na sztywno i z wymuszeniem operacji, ale działa. Co prawda niewiele to daje – chłopaki twierdzą, że musi wykrywać automatycznie, inaczej o flashowaniu można zapomnieć.

W przypływie dobrego humoru i odwagi, postanawiam wziąć sprawy w swoje ręce, skoro już tyle wiem o sprzęcie. Lekka zabawa z linią odpowiedzialną za dopasowanie (skopiuj linię dla K7S41, zmień na K7S41GX, skompiluj, spaczkuj checkinstall, przerzuć na docelową maszynę, zainstaluj, uruchom) i… wykrywa bez błędów.

Calibrating delay loop... OK.
No coreboot table found.
Found chipset "SiS 741", enabling flash write... OK.
This chipset supports the following protocols: Non-SPI.
Disabling flash write protection for board "ASRock K7S41GX"... OK.
Found chip "Winbond W49F002U/N" (256 KB, Parallel) at physical address 0xfffc0000.

Szybki test – odczyt działa, md5sum identyczna jak poprzednio. Weryfikacja zawartości BIOS z plikiem – passed. No to zaryzykujmy i wrzućmy to, co wyciągnęliśmy z chipa:

Flash image seems to be a legacy BIOS. Disabling checks.
Erasing and writing flash chip... Done.
Verifying flash... VERIFIED.

Wygląda, że działa. Na koniec wrzuciłem najnowszą wersję BIOSu. Ponownie bez problemu. Odczyt dmidecode – nadal widzi starą wersję, ale może restart jest wymagany? No to jazda z restartem… Chwila prawdy czyli reboot.

No i tu dobre wiadomości się kończą – po reboocie maszynka nie wstała i piszczy nietypowo. Chłopaki z IRCa mówią, że powinno być niekrytycznie, skoro weryfikacja się powiodła, być może wymagane wyłączenie zasilania lub reset CMOS. Niestety, żadne z nich nie pomogło. Trzeba skołować monitor i klawiaturę i zobaczyć, co też on tam wyświetla (rada: nie polecam zabawy z flashowaniem bez dostępu do monitora i klawiatury). Może jakiś błąd typu No keyboard. Press F1 to continue?

Zobaczymy niebawem. Dramatu nie ma, bo od biedy mam dostęp do identycznej płyty, więc przy odrobinie zabawy przełoży się kość BIOSu i przeflashuje się tam. Wkrótce dam znać, co ostatecznie wynikło (mam nadzieję, że uruchomię sprzęt, a flashrom zyska obsługę nowej płyty).

Tak czy inaczej, zabawa przednia (stąd kategoria Rozrywka), a flashowanie z użyciem flashrom bardzo przyjemne, proste i wygodne. Oczywiście jeśli sprzęt jest wspierany. 😉

UPDATE: Wiele się nie pomyliłem. Faktycznie trzeba było nacisnąć F1, tyle, że dwa razy. Raz, aby przywrócić wartości domyślne BIOSu (nie wiem, czy reset zworką nie zadziałał, czy po prostu trzeba), drugi, aby ominąć błąd związany z MAC. Ten drugi jest poważniejszy i objawia się komunikatem Mac address are invalid in both APC and DMI Press F1 to Resume i raczej zasługuje na oddzielny wpis. W każdym razie grzejnik znów grzeje (na razie na starym BIOSie).

Reklama na Facebooku, czyli „zarabiane” przez granie w ruletkę.

Jakiś czas temu trafiłem na Facebooku na ciekawe zjawisko. Reklama jak reklama, serwis jak serwis. Po trzech słowach wiedziałem, że ściema i naciąganie, ale argumentacja była ciekawa i – na pierwszy rzut oka – nawet przekonująca.

Chodziło o „zarabianie” poprzez granie w kasynach. Konkretnie przy grze w ruletkę. Zarobek przedstawiony jako pewny dzięki systemowi, mówiącemu, że jeśli przegramy, to należy podwoić stawkę. W końcu, jeśli będziemy obstawiać za każdym razem dwukrotność poprzedniej stawki, to wygramy (zarobimy równowartość pierwszego zakładu).

Szybkie dogooglanie i wiadomo, że chodzi o coś znanego od dawna (od osiemnastego wieku) pod hasłem system Martingale. Dla tych, których nie przekonuje matematyka prezentowana na wiki, krótka tabelka (TBH, najpierw tabelkę zrobiłem, mając w pamięci szachownicę i ziarenka ryżu):

Ile z rzędu Stawka Prawd. z zerem Prawd. bez zera Raz na ile (z 0) Raz na ile (bez 0)
1 1 51,35000000% 50,00000000% 1,95 2
2 2 26,36822500% 25,00000000% 3,79 4
3 4 13,54008354% 12,50000000% 7,39 8
4 8 6,95283290% 6,25000000% 14,38 16
5 16 3,57027969% 3,12500000% 28,01 32
6 32 1,83333862% 1,56250000% 54,55 64
7 64 0,94141938% 0,78125000% 106,22 128
8 128 0,48341885% 0,39062500% 206,86 256
9 256 0,24823558% 0,19531250% 402,84 512
10 512 0,12746897% 0,09765625% 784,5 1024
11 1024 0,06545532% 0,04882813% 1527,76 2048
12 2048 0,03361131% 0,02441406% 2975,19 4096
13 4096 0,01725941% 0,01220703% 5793,94 8192
14 8192 0,00886270% 0,00610352% 11283,24 16384
15 16384 0,00455100% 0,00305176% 21973,2 32768
16 32768 0,00233694% 0,00152588% 42791,04 65536
17 65536 0,00120002% 0,00076294% 83332,11 131072
18 131072 0,00061621% 0,00038147% 162282,59 262144
19 262144 0,00031642% 0,00019073% 316032,31 524288
20 524288 0,00016248% 0,00009537% 615447,54 1048576

Objaśnienie kolumn:

  • Ile z rzędu – ile razy z rzędu przegramy.
  • Stawka – ile trzeba postawić, by wejść do gry.
  • Prawd. z zerem – prawdopodobieństwo, że przegramy i tym razem w serii (ruletka z jednym zerem). Dokładnie, prawdopodobieństwo serii o ilości ile z rzędu bez wygranej.
  • Prawd. bez zera – j.w. ale dla hipotetycznej ruletki bez zera.
  • Raz na ile (z 0)- raz na ile rozpoczętych serii zdarzy nam się taka sytuacja (ruletka z jednym zerem).
  • Raz na ile (bez 0) – j.w. ale dla hipotetycznej ruletki bez zera.

Jak widać, średnio raz na 207 gier zdarzy się, że trzeba będzie postawić 128 euro, by „zarobić” 1 euro. Mam nadzieję, że to skutecznie zniechęci naiwniaków. Na ruletkę nie ma – i być nie może – matematycznego sposobu. Statystycznie kasyno zawsze ma przewagę (w postaci zera, lub, w niektórych wariantach, dwóch zer).

Uprzedając ew. sceptyków – tak, ten system działa w 100%. Trzeba tylko pamiętać o założeniu, w którym działa w 100%, czyli o nieskończonych zasobach grającego. ;->