Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Uruchamianie komputera z WinXP bez karty graficznej

Gelip 07 Gru 2011 20:26 17776 2
  • #1
    Gelip
    Poziom 28  
    Ostatnio natrafiłem na kilka tematów na elektrodzie gdzie spierano się o możliwość uruchomienia komputera bez karty graficznej: Link, Link
    Prawdą jest, że zależy to od płyty głównej a dokładnie od jej BIOS'u. Nie wiem jak w BIOS'ach AMI i innych ale na płytach z BIOS'em AWARD 6.00PG działa. Dokładnie chodzi o moduł VGA ROM w BIOS'ie np. Intel i815.vga. Różni producenci płyt dodają swoje moduły. Ja robiłem testy z modułem i815.vga który standardowo jest w BIOS'ie AWARD w płycie głównej Clayton CVOAT217 (BIOS-I-2M (2K010924) for CLAYTON). Ta płyta standardowo pozwala na uruchomienie komputera bez karty graficznej. Początkowo myślałem, że chodzi tu o chipset NB (i815E) ale po wielu testach okazuje się, że nie :-). Sprawdziłem to z inną płytą główną Soltek SL-75DRV4 (chipset VIA KT266A). Wystarczy dodać wspomniany moduł do BIOS'u za pomocą np. CBROM:
    Code:
    cbrom bios.bin /vga i815.vga

    Nie zależy to od chipsetu mobo a od sposobu działania BIOS'u (przynajmniej AWARD 6.00PG). Po uruchomieniu komputera zostają uruchomione programy diagnostyczne sprzętu (POST) a następnie jest skanowana zawartość obszaru BIOS'u na obecność modułów i jeśli zostanie jakiś znaleziony to zostaje on uruchomiony. W naszym przypadku chodzi o moduł VGA ROM i815.vga - jest to tak jakby emulator ekranu pracujący tylko w trybie VGA (640x480, 8-bit, 60Hz). Dowodem działania jest zdalny pulpit Remote Administrator 3.4
    Uruchamianie komputera z WinXP bez karty graficznej
    Nie wiem jak w innych systemach (DOS, Linux) ale to działa z WinXP SP2. Najważniejszą rzeczą jest wolne miejsce we Flash ROM BIOS'u na dodanie skompresowanego modułu i815.vga. W niektórych BIOS'ach można usunąć niektóre moduły np. LOGO (pełnoekranowe logo), VRS (antywirus)
    Code:
    CBROM V2.07 (C)Award Software 2000 All Rights Reserved.                         
    
                                                                                   
                  ********  clayton.bin BIOS component ********                     
                                                                                   
     No. Item-Name         Original-Size   Compressed-Size Original-File-Name       
    ================================================================================
      0. System BIOS       20000h(128.00K) 130A2h(76.16K)  80924IAG.BIN             
      1. XGROUP CODE       0E190h(56.39K)  09929h(38.29K)  awardext.rom             
      2. CPU micro code    03000h(12.00K)  01B55h(6.83K)   CPUCODE.BIN             
      3. ACPI table        038E2h(14.22K)  01692h(5.64K)   ACPITBL.BIN             
      4. EPA pattern       0168Ch(5.64K)   002AAh(0.67K)   AwardBmp.bmp             
      5. GROUP ROM[ 0]     030E0h(12.22K)  01738h(5.80K)   _EN_CODE.BIN             
      6. VGA ROM[1]        0A000h(40.00K)  05F82h(23.88K)  i815.vga                 
      7. VRS ROM           02280h(8.62K)   014BBh(5.18K)   ANTI_VIR.BIN             
      8. LOGO BitMap       4B30Ch(300.76K) 01E8Dh(7.64K)   clayton2.bmp             
                                                                                   
      Total compress code space  = 35000h(212.00K)                                 
      Total compressed code size = 2A85Eh(170.09K)                                 
      Remain compress code space = 0A7A2h(41.91K)                                   
                                                                                   
                              ** Micro Code Information **                         
    Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID
    ------------------+--------------------+--------------------+-------------------
    PPGA   03   0665|  PPGA   11   0681|  PPGA   14   0683|  PPGA   08   0686       
    PPGA   01   068A|  PPGA   04   06B0|  PPGA   1C   06B1|

    Jeśli uda nam się wstawić moduł VGA, to po wgraniu BIOS'u należy wykonać jeszcze następujące czynności:
    - na dysku instalujemy system WinXP SP2 wraz ze sterownikami obecnej karty graficznej
    - instalujemy serwer Remote Administrator 3.4 domyślnie w trybie automatycznego uruchamiania na starcie i ustawiamy prawa dostępu (login i hasło)
    - restartujemy komputer i sprawdzamy działanie radmina np. za pomocą drugiego komputera podłączonego do tej samej sieci lokalnej
    - w BIOS'e zmieniamy wartość Halt on: NO ERRORS
    - wyjmujemy kartę graficzną AGP
    - uruchamiamy komputer i czekamy sporą ilość czasu ok. 1 minuty obserwując diody od dysku twardego
    - logujemy się do serwera Radmin za pomocą klienta Remote Administartor 3.4

    UWAGI:

    - BIOS AWARD przy braku karty graficznej standardowo robi beeeep, beep beep beep ale po dodaniu modułu i815.vga nie wydaje już żadnych dźwięków
  • #2
    Gelip
    Poziom 28  
    Wykonałem kolejne testy. Tym razem z BIOS'em innej karty graficznej a mianowicie PCI S3Trio64V2/DX 86C775 która posiada Flash ROM 28-pinowy umieszczony w podstawce.
    - najpierw podłączyłem kartę S3 do płyty CLAYTON i w WinXP zrzuciłem do pliku vga.bin pamięć biosu S3 od adresu C000 o wielkości 32KB (8000h) (w tym momencie w BIOS'ie Clayton jest moduł i815.vga ale w WinXP pod adresem C000 jest zawartość ROM'u karty S3). Wielkość ROM'u określa jego trzeci bajt i jest to ilość 512-bajtowych bloków. W tym przypadku 3 bajt to 40h więc ROM ma długość 40x200=8000h (32768 bajtów = 32KB)
    Code:
    C:\DOCUME~1\USER>debug
    
    -d c000:0 l 3
    C000:0000 55 AA 40  <- trzeci bajt to 40h
    -n vga.bin
    -r bx
    BX 0000
    :0000
    -r cx
    CX 0000
    :8000
    -m c000:0 8000 0100
    -w 0100
    Zapisywanie 08000 bajtów
    -q

    C:\DOCUME~1\USER>

    - sprawdziłem poprawność zrzuconej zawartości VGA ROM w hex edytorze czy zaczyna się od bajtów 55 AA i czy suma kontrolna jest równa 0 (znalazłem też BIOS do tej karty w internecie ale w dalszych testach użyłem tego zrzuconego do pliku)
    - za pomocą CBROM'a usunąłem moduł i815.vga i wstawiłem vga.bin od S3 i zaprogramowałem BIOS Clayton
    - po wyjęciu karty S3 system uruchomił się tak samo jak w przypadku z modułem i815.vga do którego jest dostęp przez Radmin 3.4

    P.S. Przy okazji sprawdziłem jeszcze jedną rzecz. Wyjąłem Flash ROM z karty S3 i zamontowałem kartę do slotu PCI. Podłączyłem monitor i włączyłem komputer. System uruchomił się normalnie korzystając z modułu vga.bin umieszczonego w BIOS'ie AWARDA płyty Clayton w rozdzielczości 800x600 16-bit :-)
    Wygląda na to iż wystarczy umieścić VGA ROM (32KB) z pierwszej lepszej karty graficznej w BIOS'ie płyty głównej aby uruchomić komputer z systemem WinXP. ROM każdej karty graficznej ma oprócz zaawansowanego firmware również standardowe VGA o wielkości 32KB zaczynające się od 55 AA. Dla systemu nie ma znaczenia gdzie jest umieszczony ten ROM, ważne aby był pod adresem C000 co jest równoznaczne z obecnością prawdziwej karty VGA zainstalowanej w slocie AGP, PCI lub zintegrowanej z płytą główną.
    Prawdopodobnie ten sam efekt można osiągnąć ładując do pamięci plik binarny ROM VGA z dysku, dyskietki lub płyty CD zamiast z BIOS'u płyty głównej. Może dałoby się za pomocą DOS i CONFIG.SYS i AUTOEXEC.BAT.

    Ciekawe rzeczy na temat organizacji pamięci Link
  • #3
    Gelip
    Poziom 28  
    Wykonałem kolejne testy tym razem z biosem IBM-VGA.ROM z 1986 roku. BIOS w przeciwieństwie do i815.vga (40KB) jest mniejszy - ma tylko 24KB, nie posiada nagłówka PCI (PCIR) i dzięki niemu komputer startuje od razu. W przypadku i815.vga komputer uruchamia się dopiero po ok. 2 min 15 sek. od momentu testu napędu dyskietek zaraz po teście RAM. Po prostu i815 to BIOS typu PCI z dodatkowymi funkcjami a ten IBM to standardowy VGA PnP bez udziwnień i dlatego działa lepiej. IBM-VGA.ROM po kompresji CBROM zajmuje tylko 12.70KB dzięki czemu łatwiej jest zmieścić go w BIOS'ie mobo :-).
    A teraz UWAGA! - Nie trzeba nawet Remote Administrator - działa systemowy Pulpit zdalny nawet 1024x768 16bit i do tego stabilniej niż Radmin oraz nie potrzebuje żadnego sterownika lustrzanego wideo:
    Uruchamianie komputera z WinXP bez karty graficznej
    Moduł IBM-VGA.ROM jest potrzebny prawdopodobnie tylko do startu komputera z poziomu BIOS i/lub WinXP a Pulpit zdalny w WinXP nie korzysta z tego modułu - podkreślam - prawdopodobnie. Bez modułu VGA w BIOS jest tak:
    1. Komputer uruchamia się
    2. Napęd FDD odzywa się czyli test z BIOS'u
    3. Chwilowo słychać start z dysku twardego i mignie dioda dysku twardego

    Wynika z tego iż BIOS uruchomił się bez karty graficznej i bez modułu VGA i przekazał bootowanie dla systemu operacyjnego. Czyli to WinXP marudzi i zatrzymuje bootowanie. Debugowanie przez kabel RS-232 nic nie daje bo nie działa serwer debug.
    Wykonałem pebuilder.iso z automatyczną konfiguracją sieci (IP statyczny) + automatycznie uruchamiany serwer TightVNC (testowałem na VMware, MSVPC i na prawdziwym sprzęcie z kartą graficzną - działa OK). Niestety bez karty graficznej jest ta sama sytuacja co z WinXP z dysku - zatrzymuje się zaraz po chwilowym odczycie CD w napędzie :-(. Bez modułu VGA.ROM w BIOS - WinXP nie chce ruszać i już.

    Znalazłem program DOS DISPDUMP.EXE do zdalnego sterowania. Odpowiednik Pulpitu zdalnego dla WinXP. Przygotowałem bootowalnego pendrive'a z AUTOEXEC.BAT:
    Code:
    dispdump c 0

    Połączyłem komputery kablem nullmodem RS-232, uruchomiłem terminal Putty na porcie COM1 19200. Niestety brak obrazu, program działa ale zamiast znaków są same kropki:
    Uruchamianie komputera z WinXP bez karty graficznej
    Skoro DOS działa wykonałem kolejny test. Przygotowałem bootowalnego pendrive'a z GRUB4DOS (grldr+grub.exe+menu.lst) oraz obraz dyskietki DOS.vfd z AUTOEXEC.BAT.
    MENU.LST
    Code:
    serial --unit=0 --speed=19200
    
    terminal --timeout=5 serial console
    timeout 60
    default 0

    title Find and load NTLDR of Windows NT/2K/XP
    map (hd0) (hd1)
    map (hd1) (hd0)
    map --hook
    root (hd1,0)
    find --set-root --ignore-floppies /ntldr
    chainloader /ntldr

    title MS-DOS
    map --mem /images/DOS.vfd (fd0)
    map --hook
    chainloader (fd0)+1
    rootnoverify (fd0)

    AUTOEXEC.BAT
    Code:
    mode com1:19,n,8,1,p
    
    ctty com1

    Połączyłem komputery kablem nullmodem RS-232, uruchomiłem terminal Putty na porcie COM1 19200. Tym razem wszystko OK - bez karty graficznej działa GRUB i DOS:
    Uruchamianie komputera z WinXP bez karty graficznej Uruchamianie komputera z WinXP bez karty graficznej Uruchamianie komputera z WinXP bez karty graficznej
    Dzięki takiej konfiguracji komputer uruchamia się automatycznie z menu GRUB i mamy zdalne sterowanie przez kabel RS-232. Można zdalnie uruchomić MSDOS, system Windows NT/2K/XP z dysku lub ponownie GRUB. W GRUB'ie po wciśnięciu 'c' można przełączyć się do linii poleceń. Klawisz TAB wyświetla wszystkie dostępne polecenia. Jest jedno ciekawe polecenie vbeprobe które testuje BIOS Video. Poniżej screeshoty terminala z wykonanym poleceniem vbeprobe gdy 1 - Podłączona karta graficzna AGP GeForce2 MX400, 2 - komputer bez karty i bez IBM-VGA.ROM (przy obecności IBM-VGA.ROM polecenie vbeprobe pokazuje to samo co w przypadku jego braku :-(. Podobnie zachowuje się program VESATEST.EXE:
    Uruchamianie komputera z WinXP bez karty graficznej Uruchamianie komputera z WinXP bez karty graficznej Uruchamianie komputera z WinXP bez karty graficznej
    No tak wszystko fajnie ale mimo tego iż wiem jak wystartować WinXP to ten jednak nie startuje jeśli nie ma BIOS'u video. Program NTDETECT.COM robi test Video ale nie VESA test :-(. Istnieje wersja programu NTDETECT debug (NTDETECT.CHK) która wyświetla szczegółowe informacje na ekranie ale nie wiem jak zmusić aby program wyświetlał te informacje przez kabel RS-232 na terminalu :-(.
    Po przeczytaniu tych informacji na temat procesu bootowania doszedłem do wniosku iż podczas startu bez karty graficznej nie dochodzi do momentu przetwarzania pliku boot.ini - który włącza debugowanie przez RS-232 - albo przetwarzanie pliku zostaje przerwane.

    Znalazłem jeszcze mniejszy bios wideo dzięki któremu WinXP tak samo startuje: IBM-EGA.ROM (16KB) a po kompresji CBROM 8.35KB.

    Jest jeszcze jeden (niższy) tryb graficzny - CGA. Przykładowy dump 8K karty graficznej CGA IBM_5788005_AM9264_1981_CGA_CARD.BIN (niezła kolekcja ROM'ów IBM PC :-)). W trybie tym BIOS korzysta z dwóch tabel:
    1. Zestaw znaków od 0-127 dostępny w ROM'ie płyty głównej pod adresem F000:FA6E
    2. Zestaw znaków od 128-255 dostępny w lokalizacji wskazanej przez wektor przerwań 1F dostępny w pamięci pod adresem 0000:007C. W terminalu podłączonym do komputera bez karty graficznej widać iż tabela CGA jest załadowana do pamięci co świadczy o tym iż znajduje się ona w ROM'ie mobo a nie w ROM'ie karty graficznej:
    Uruchamianie komputera z WinXP bez karty graficznej
    Normalnie drugi zestaw znaków jest nieobecny ale można go wczytać za pomocą programu GRAFTABL (dostępny na dyskietce MS-DOS 6.22 Supplemental Disk - aby działał w MS-DOS 6.22 należy zmienić wersję za pomocą polecenia setver graftabl.com 6.22 i zrestartować komputer).

    Kombinowałem jeszcze z tabelą ACPI FACP zmieniając wartości dwóch znaczników z 0 na 1:
    VGA Not Present (V4) : 0 i Headless - No Video (V3) : 0 ale to nic nie pomogło niestety.

    Można zainteresować się Linuksem i takimi pojęciami jak: Headless system, VESA BIOS Extension, Framebuffer, Virtual Framebuffer, Linux framebuffer (fbdev), X Virtual Framebuffer (Xvfb), X Window System

    Testowałem w Linuksie z X Window + Xvnc i komputer uruchamia się bez problemu bez karty graficznej a dostęp mamy przez VNC :-)