Notebook Compaq EVO N400c

Compaq EVO N400c a N620c

      19.5.2018 Na pražském blešáku U Elektry jsem zahlédl tento malý notebook i s dokovací stanicí. Vizuálně byl ve velmi dobrém stavu a prodejce za něj chtěl jen stovku, tak se mi ho zželelo. Notebook má pro mě potřebné porty COM, LPT, USB (byť jen pomalé 1.1), takže jako přenosný terminál se může hodit. Oproti většímu bráškovi N620c je o poznání lehčí. Tenká konstrukce však neumožnila zabudování mechanik, které jsou tak dostupné pouze přes dokinu (ta má jiný konektor než řada N6xx). Původní CD-ROM mechaniku Teac CD-224E jsem vyměnil za DVD-ROM-RAM mechaniku Toshiba SD-C2612 z již nepoužívaného notebooku EVO N600c (má stejný konektor MultiBay). Také chybí touchpad (byť by se tam pod klávesnici vešel), má pouze trackpoint. Zde je servisní manuál a video s rozborkou.

Compaq EVO N400c v dokině dokina-předek dokina-zadek

Přehled parametrů:

CPU: Mobile Pentium III (180 nm) 700 MHz; H-PBGA495 (nevyměnitelný)
Chipset: intel 440ZX + 82371AB (PIIX4), TI PCI1211PGE PCMCIA řadič, smsc FDC37N971
FSB: 100 MHz
Paměť: 2x 144-pin SO-DIMM SDRAM 100 MHz, celkem max. 512 MB
(u 256MB modulů je nutno použít 16-čipové verze)
VGA: ATI Rage Mobility M1 (AGP 2x, 8 MB SDRAM, DX 6.0)
Display: 12,1" TFT XGA 1024 x 768 / 16,7M (4:3, matný)
Síťovka
a modem:
miniPCI type III combo modul 230338-001 s intel GD82559C -
10/100 Mbit Ethernet MAC+PHY a 56 kb/s (V.90) modem
WiFi: volitelný modul Wireless LAN MultiPort W200 IEEE 802.11b (11 Mb/s) 
Audio: ESS ES1988S Allegro AC'97
interní stereo repro, 3,5mm jacky pro sluchátka a mikrofon
HDD: UltraDMA 33 PATA 2,5", 20 GB, 4200 RPM
CD: ATAPI CD-ROM Compaq/Teac CD-224E 24x (jen v dokině)
FDD: 3,5" Citizen LR102061 (jen v dokině)
Sběrnice: interní AGP 2x
interní PCI 2.1
1 x 124-pin miniPCI slot typu III
1 x PCMCIA slot typu II nebo 1 x PCMCIA typu III(16/32-bit, CardBus)
Porty: 1 x konektor pro dokovací stanici
1 x D-SUB 15 VGA
1 x kompozitní video výstup PAL / NTSC
2 x USB 1.1 + 1 x interní USB pro Wi-Fi/BlueTooth modul ve víku displeje
(interní 4-portový USB 1.1 hub Alcor AU9254)
1 x SPP/ECP/EPP paralelní port
1 x sériový port RS232
2 x PS/2 klávesnicový a myší port (jen v dokině)
1 x IrDA 4 Mb/s
1 x RJ45 pro LAN
1 x RJ11 pro telefonní linku
1 x koaxiální napájecí konektor 18,5 V DC
Vstupy: 85-tlačítková klávesnice, trackpoint, 6 přídavných tlačítek
BIOS: Compaq, poslední verze: 2004.03.08, 1MB SST39VF080 FlashROM
Baterie: Li-Ion 14,8 V / 1,96 Ah / 28 Wh
Příkon: max. 50 W
Výdrž: cca 2 hodiny
Rozměry: 275 x 228 x 25 mm
Hmotnost: 1,6 kg

      Po zapnutí notebook normálně nabootoval Windows 2000 (což na pomalém disku a se 128 MB RAM chvilku trvalo) a bez hesla jsem se dostal bez problému k původním uživatelským datům. Akorát baterka byla úplně špatná, ani se nezačla nabíjet. Povedlo se mi ji nedestruktivně rozebrat (narozdíl od N620c tam jsou zácvaky a trochu lepidla) a přeměřil jsem články. Dva byly ještě celkem dobré (kolem 60% kapacity), jeden pouze 10% kapacity a jeden měl trvale napětí 0 V a nešel vůbec nabít. Články jsem vyměnil za vysokokapacitní typ LGDBHG21865 3,6 V, 3000 mAh a v SETUPu provedl rekalibraci baterie. Odhadovaná výdrž je nyní dle Windows asi 3,5 hodiny.

rozebraný akupack s články Sony Fukushima rozebraný akupack s články Sony Fukushima
rozebraný akupack-elektronika rozebraný akupack s novými články LGDBHG21865

      14.6.2018 Dále bych chtěl zkusit zrychlit provoz notebooku náhradou pevného disku za SSD. Jelikož se dnes už moc nedají koupit SSD s rozhraním IDE, zkusil jsem objednat na eBay redukci pro SSD formátu mSATA na 44-pin IDE za 66,- Kč. Je osazena SATA - IDE můstkem JMicron JM20330 a 3,3V LDO stabilizátorem. Teď ještě koupit nějaký levný mSATA SSD. Na eBay se nabízí cenově výhodné čínské mSATA SSD značek KingFast, KingSpec, KingDian, Vaseky a pod. (podle fotek jim zřejmě chybí DRAM cache), ale o nich jsem četl různé nářky uživatelů, jimž se z těchto SSD během pár měsíců vypařila všechna data. Takže radši bych koupil něco od důvěryhodnějších výrobců jako intel či Samsung, klidně starší a použité.

      2.7.2018 Na českých bazarech jsem moc nepochodil a na eBay zas většinu výhodných nabídek zazdilo poštovné, které nezřídka převyšovalo hodnotu SSD. Nakonec se mi ale přece jen podařilo najít jednoho maníka z Ázerbájdžánu, který se asi živí recyklací počítačů a prodejem dílů na eBay a hlavně nabízí free shipping. Měl tam zrovna v nabídce 32GB mSATA SSD Lite-On LMT-32L3M, prý vytažené z funkčního notebooku Dell za 350 Kč, tak jsem do něj šel. Komunikace s prodejcem byla dobrá a zboží dorazilo za necelé 2 týdny.
      Tento OEM SSD je založený na 4-kanálovém SATA řadiči Marvell 88SS9175-BJM2, kde jsou osazeny pouze 2 kanály 16GB 24nm MLC toggle NAND FlashROM BGA čipy Toshiba TH58TEG702HBA4C (na spodní straně je místo pro další 2 čipy v případě 64GB verze SSD). Řadič má k dispozici 128 MB rychlé DDR3 SDRAM cache Hynix H5TQ1G63DFR, čímž by se měl snížit nutný počet mazání a zápisů do paměti. Pak je tu na destičce ještě jedna malá 1MB SPI NOR FlashROM Winbond 25Q80BVIG pro uložení firmware.

mSATA redukce na 44-pin IDE Lite-On LMT-32L3M top Lite-On LMT-32L3M bottom

      Údaje o reálné spotřebě SSD jsem se nikde nedopátral, na štítku je pouze nějaký max. proud 0,95 A @ 3,3 V, což představuje příkon 3,1 W resp. s LDO v redukci 4,75 W. Klidový odběr jsem naměřil i s redukcí 0,18 A @ 5 V, čili 0,9 W. Pro porovnání jsem dohledal datasheet původního HDD IBM Travelstar DJSA-220 (20 GB, 4200 RPM, 2 MB cache), kde se uvádí nižší klidová spotřeba 0,65 W v režimu low power idle (zaparkované hlavy, motor se točí) a 0,85 W v režimu active idle (hlavy uprostřed plotny, motor se točí) a při čtení / zápisu je spotřeba 2 W resp. 2,3 W, takže tím jsem si moc nepolepšil. O něco málo jsem snížil hmotnost notebooku, SDD s redukcí váží 20 g a HDD 98 g. Další výhodou je mechanická odolnost SSD vůči otřesům, což se může v terénu hodit. Ale hlavní je rychlost. SSD sice dává kontinuální čtení nějakých 250 MB/s, což je mnohem více, než může procpat skrze PATA33 řadič. Při čtení / zápisu malých bloků ale rychlost klesá, takže spadne i pod limit PATA33. Přístupová doba je u SSD asi 100-násobně nižší, což se také velmi pozitivně projeví na rychlosti systému.
      Pro přístup k disku je třeba odšroubovat 4 šroubky na spodní straně označené šipkou, další 4 šroubky s odpovídajícím symbolem slouží k uvolnění klávesnice. Po vyndání modré plastové zarážky lze disk s tenkým kovovým rámečkem vysunout z konektoru a vyndat. Do rámečku jsem pak nacvaknul SSD v redukci a zasunul zpět do notebooku. BIOS SSD normálně detekoval, takže instalace proběhla bez problémů.

Lite-On LMT-32L3M v redukci Lite-On LMT-32L3M v notebooku Evo N400c

      Následně jsem prozkoumal informace ze S.M.A.R.T.u pomocí svého DOSového nástroje SMB a zjistil, že některé atributy jsou podezřele nízké - "Power On/Off Cycle Count" (počet zapnutí/vypnutí SSD) či vynulované - "Total LBAs Written" (počet celkově zapsaných sektorů), jako by někdo provedl low-level formát nějakou utilitou od výrobce, avšak žádný takový program od Lite-Onu ani Marvellu jsem na Internetu nenašel. Disk překvapivě nebyl prázdný, ale začátek obsahoval nějaké zbytky GPT a zhruba uprostřed bylo asi 2 GB nenulových dat, které jsem obnovil nástrojem QPhotorec. Jak jsem zjistil dále, RAW hodnota atributu "Total LBAs Written" není počítaná v 512B sektorech, ale nějakých mnohem větších jednotkách. Po zápisu cca 10 GB dat jsem se dostal z 0 na hodnotu 766 a RAW hodnota atributu "Wear Leveling Count" vzrostla z 641226 na 643040 (o 1814), taktéž netuším, co znamená...


Primary master IDE/SATA non-removable drive info:
Drive Geometry (C/H/S): 62037/16/63 (LBA sect. 62533296), size = 32017 MB
Drive Model: LITEONIT LMT-32L3M mSATA 32GB, S/N: TW04NG445508533S4957
Drive Firmware: LWDA, Cache Buffer: N/A, enabled, look-ahead
Max. Block Transfer: 16 sectors/IRQ, ECC: 0 B, DMA, LBA
Minimum MultiWord DMA/PIO/PIO&IORDY cycle time: 120 ns / 120 ns / 120 ns
Current Transfer Mode: Ultra DMA 2 (33 MB/s), max. supported Ultra DMA 8
AAM: supported, disabled (current/vendor's default: 0/254)
APM: unsupported, disabled (current APM level: 0)
Security: supported, disabled, unlocked, level = high
Security Erase: supported, frozen, time for sec. erase = 6 min
Features: packet cmds=no, LBA48, download uCode, TRIM (8 blks)
S.M.A.R.T: supported, enabled, self-test, error-logging

S.M.A.R.T. data rev. 1; 14 valid attributes found, ckecksum: OK
---- ATTRIBUTE NAME ---- VALUE - WORST - THRS ---- RAW --- (* IniVal. ! PFail.)
Reallocated Sector Count: 100* /  100* /   0  /          0
Power On/Off Cycle Count: 100* /  100* /   0  /         35
Program Fail Count:       100* /  100* /   0  /          0
Erase Fail Count:         100* /  100* /   0  /          0
Wear Leveling Count:      100* /  100* /   0  /     641226
Used Rsvd Block Count:    100* /  100* /   0  /          0
Used Rsvd Block Count:    100* /  100* /   0  /          0
Unused Rsvd Block Count:  100* /  100* /   5  /        436
Program Fail Count:       100* /  100* /   0  /          0
Erase Fail Count:         100* /  100* /   0  /          0
Uncorrectable Error Cnt:  100* /  100* /   0  /          0
Hardware ECC Recovered:   100* /  100* /   0  /          0
Total LBAs Written:       100* /  100* /   0  /          0 (0 GB)
Total LBAs Read:          100* /  100* /   0  /          0

      Disk jsem chtěl před použitím kompletně vymazat pomocí ATA příkazu Security Erase, abych měl všechny paměťové buňky FlashROM připravené pro zápis. Vyzkoušel jsem 2 DOSové programy HDDErase a CopyWipe, ale nepodařilo se, protože BIOS uvedl disk do stavu frozen a nepomohl ani fígl s uspáním a probuzením notebooku. Mazání jsem tedy musel provést na jiném PC. Problém je, že tento ATA příkaz korektně neprojde přes USB převodníky, takže jsem musel sestavit takový obskurní řetězec redukcí: mSATA-IDE44, IDE44-IDE40, IDE40-SATA, abych SSD připojil nativně na SATA port základní desky. Pak už Security Erase proběhlo korektně, trvalo to jen několik vteřin a všechna data byla fuč. V Linuxu lze provést Security Erase programem hdparm. Nejprve je nutné nastavit nějaké uživatelské heslo parametrem --security-set-pass a následně spustit mazání parametrem --security-erase-enhanced:


 $ hdparm --security-set-pass 123 /dev/sdX

 security_password="123"
 /dev/sdX:
  Issuing SECURITY_SET_PASS command, password="123", user=user, mode=high
 
 $ hdparm --security-erase-enhanced 123 /dev/sdX
 
 security_password="123"
 /dev/sdX:
  Issuing SECURITY_ERASE command, password="123", user=user

 $ hdparm -I /dev/sdX

 Security: 
          supported
      not enabled
      not locked
      not frozen
      not expired: security count
          supported: enhanced erase
 6min for SECURITY ERASE UNIT. 6min for ENHANCED SECURITY ERASE UNIT. 
 Integrity word not set (found 0x0000, expected 0xc0a5)
 kompletní výpis zde

      Na původní HDD jsem nainstaloval Windows 98SE s nSP a nUSB a potřebnými ovladači. Start OS (od boot loga po všechny ikony SysTray) trval 63 s a spuštění prohlížeče Mozilla Seamonkey 2.0.14 trvalo 18,8 s. Po přesunu OS na SSD se start zrychlil pouze na 48 s, ale to jen díky nějaké stupidní prodlevě v síťovém subsystému, kdy OS při bootu jen tak čeká asi 20 s bez jakékoliv diskové aktivity. Spuštění Mozilly se zrychlilo na 5,3 s. Dále jsem na SSD přesunul Windows XP SP3 (dříve nainstalované na notebooku EVO N600c po instalaci ovladačů a záplat), které naběhnou za 28 s a běží docela svižně. Později jsem ještě zkoušel Windows 95 OSR2 pouze s ovladači VGA a zvukovky a ty naběhly asi za 3 s. Zde jsou výsledky z ATTO Disk Benchmarku a HD Tune.

ATTO Disk Benchmark 2.34, Win2000, HDD benchmark ATTO Disk Benchmark 2.34, WinXP, SSD benchmark HD Tune 2.55, Win2000, HDD benchmark HD Tune 4.60, WinXP, SSD benchmark
HDD SSD HDD SSD


      14.7.2018 Zkusil jsem zprovoznit pod DOSem interní PCI zvukovku ES1988 Allegro, s níž mám už předchozí zkušenosti na notebooku EVO N600c. Zvukový čip je kompatabilní se Sound Blasterem (Pro) a podporuje DMA režimy DDMA / TDMA (na starších intel chipsetech bez problému funkční). Ovladač pro DOS je ke stažení zde. Pro svou funkci nevyžaduje žádný manažer paměti ani specifické nastavení. Po rozbalení stačí přidat do config.sys řádek:
DEVICE=C:\DOS\AUDIO\ESSAUDIO.SYS
a do autoexec.bat řádky:
C:\DOS\AUDIO\ESSAUDIO.COM
SET BLASTER=A220 I5 D1 P330 T4
Konfigurační soubor essaudio.ini je nutno nakopírovat do kořenového adresáře disku, aby ho ovladač našel. Tento soubor má binární formát (mění ho patrně nějaká utilita / ovladač pro Win9x), který je popsaný zde. V hexaeditoru jsem si upravil hodnoty ve svém essaudio.ini takto: SB IO: 220h, DMA: 1, FM IO: 388h, IRQ: 5, GAME IO: 201h a MPU-401 IO 330h. Po úspěšném zavedení ovladač vypíše hlášení:


 ESS PCI Audio DOS Device Setup Utility, Version 2.31S
 (c) ESS Technology,Inc. 1996-1999. All rights reserved.
 Allegro 1
 Current PCI IRQ: 11   PCI IO Base: 3000
 DMA Mode is DDMA

 SBPro Game Settings:
 SB IO=220h  IRQ=5  DMA=1
 MPU401 IO=330h
 Game Port IO=200h

Pokud jsem ale měl před tím na notebooku spuštěné Windows XP, z kterých jsem přebootoval do DOSu, tak se ovladač nezavedl a vypsal chybovou hlášku:


 ESS PCI Audio DOS Device Setup Utility, Version 2.31S
 (c) ESS Technology,Inc. 1996-1999. All rights reserved.
 Allegro 1
 Primary Codec Error.

Pro opětovné zprovoznění zvuku bylo nutné notebook natvrdo vypnout a zapnout. V případě Windows 98 se toto nestává. Pak jsem otestoval kompatabilitu na pár hrách (Doom, Blood, Quake) a v několika audio přehrávačích. Zvukové efekty byly bez problémů, ale hudbu se mi podařilo zprovoznit jen v režimu Sound Blaster (FM syntéza), nikoliv wavetable. Patrně tabulku nástrojů umí ovladač zavést a používat pouze pod Win9x. Novější verze přehrávače MPXPlay > 1.43 mi vždy zatuhly při spuštění. Úspěšně jsem rozběhnul až starou verzi MPXPlay 1.43. Dobře také fungovaly přehrávače Open Cubic Player, Fast Tracker II a MPlayer (s audio výstupem přes knihovnu WSS a video výstupem přes cvidix).

      25.8.2018 Na radioburze v Holicích jsem před sešrotováním zachránil dva 8-čipové paměťové moduly SO-DIMM 256 MB SDRAM PC133. Jenže jsem si neuvědomil, že starší chipsety intel 440BX/ZX nepodporují SDRAM čipy s vyšší hustotou. V lepším případě pak systém vidí takový modul s poloviční kapacitou. V horším případě, jako u tohoto notebooku, systém vůbec nenaběhnul (jen se zapnul, zůstala černá obrazovka a nešel vypnout ani zapínacím tlačítkem - musel jsem vyjmout baterii). Pokud jsem do notebooku strčil 2 moduly: původní 128MB a nový 256MB, tak sice naběhl, rozpoznal správně celkovou instalovanou kapacitu paměti, ale Memtest hlásil milióny chyb. Když jsem jako druhý modul zkusil nějaký starší PC66, tak zas BIOS nadával, že paměť není kompatabilní a mám ji odebrat. Dovtípil jsem se, že BIOS nějakým způsobem parsuje SPD (Serial Presence Data) uložené v EEPROMce na modulu a když se mu nelíbí, tak prostě zanadává nebo haltne. Už kdysi dávno jsem si napsal utilitu SMB, která mimo jiné umí SPD číst i zapisovat, takže nebyl problém udělat dumpy z obou modulů a porovnat je:


DIMM SPD EEPROM Size:                   0 Bytes, used 128 Bytes
DIMM SPD revision/checksum:             1.2 / A7h - OK
Memory Type:                            SD-RAM
Memory Row/Column Address bits:         12 / 9
Module Rows/Data Width:                 2 / 64
Module Interface Signal Levels:         LVTTL (not 5V tolerant)
Module ECC/EDC mode:                    None
SD-RAM Banks/Width/ECC Width:           4 / 16 / 0
SD-RAM Cycle/Access Time (1st Hi. CAS): 7.5 ns / 5.4 ns
SD-RAM Cycle/Access Time (2nd Hi. CAS): 10.0 ns / 6.0 ns
SD-RAM Cycle/Access Time (3rd Hi. CAS): 0.0 ns / 0.0 ns
Minimum Row Precharge Time:             20 ns
Minimum Row Active to Row Active Delay: 15 ns
Minimum RAS to CAS Delay:               20 ns
Minimum RAS Pulse Width:                45 ns
Refresh Period:                         Self Refresh, Normal (15.625 us)
Burst Length Supported:                 1, 2, 4, 8, page
CAS/CS/WE Latencies Supported:          2 3 / 0 / 0
Density of Each Row/Total:              2 x 64 MB / 128 MB
Intel Specification Frequency:          100 MHz or better, CL2, CL3
Manufacturer (JID: 98FFFFFFFFFFFFFFh):  Toshiba - www.toshiba.com
Assembly Serial Number:                 18554123
Assembly Date:                          Week 35, 2001
SPD modulu Toshiba 128MB SDRAM PC133 THLY12N01A75L


DIMM SPD EEPROM Size:                   0 Bytes, used 128 Bytes
DIMM SPD revision/checksum:             1.2 / BAh - OK
Memory Type:                            SD-RAM
Memory Row/Column Address bits:         13 / 9
Module Rows/Data Width:                 2 / 64
Module Interface Signal Levels:         LVTTL (not 5V tolerant)
Module ECC/EDC mode:                    None
SD-RAM Banks/Width/ECC Width:           4 / 16 / 0
SD-RAM Cycle/Access Time (1st Hi. CAS): 7.5 ns / 5.4 ns
SD-RAM Cycle/Access Time (2nd Hi. CAS): 10.0 ns / 6.0 ns
SD-RAM Cycle/Access Time (3rd Hi. CAS): 0.0 ns / 0.0 ns
Minimum Row Precharge Time:             20 ns
Minimum Row Active to Row Active Delay: 15 ns
Minimum RAS to CAS Delay:               20 ns
Minimum RAS Pulse Width:                45 ns
Refresh Period:                         Self Refresh, Reduced 1/2x (7.8 us)
Burst Length Supported:                 1, 2, 4, 8, page
CAS/CS/WE Latencies Supported:          2 3 / 0 / 0 
Density of Each Row/Total:              2 x 128 MB / 256 MB
Intel Specification Frequency:          100 MHz or better, CL2, CL3
Manufacturer (JID: 7F98000000000000h):  Kingston
Assembly Serial Number:                 1415584257
Assembly Date:                          Week 23, 2096
SPD modulu Kingston 256MB SDRAM PC133 KVR133X64SC3

      V podstatě jediná relevantní odlišnost je v počtu bitů adresních řádků paměti (13 vs 12) a řádkové/celkové kapacity (256 vs 128 MB). Také větší modul potřebuje rychlejší refresh (7,8 vs 15,6 µs). Tyto hodnoty jsem změnil v image souboru SPD EEPROM pomocí hexaeditoru (včetně opravy kontrolního součtu) a programem SMB nahrál do 256MB modulu. Pak už ho BIOS akceptoval a notebook normálně naběhnul. Memtest prošel bez chyby. Detekovaná kapacita byla podle předpokladu 128 MB, takže spolu s původním 128MB modulem se mi podařilo alespoň zdvojnásobit kapacitu RAM, což XPéčkům dosti prospělo.

      26.9.2018 Nakonec se mi podařilo na eBay od Číňana levně koupit 16-čipové 256MB moduly PC100 s čipy Samsung K4S280832B-NL v konfiguraci 4 M x 8 bit x 4 banks ( x 16 čipů = 256 MB), které na BX/ZX chipsetu fungují, Memtest prošel bez chyby. Dosáhl jsem tak maximální kapacity RAM, kterou lze osadit.

Instalace Debian Linuxu

      3.8.2021 Na nějaké hrátky s Wiresharkem a další síťoviny jsem se rozhodl na tento stroj nainstalovat také Linux. S ohledem na předchozí zkušenosti s Debianem jsem zvolil Debian 10.10 Buster (v současnosti stable). Jelikož jsem neměl zrovna po ruce dokinu a nechtělo se mi vypalovat instalační CD, zkusil jsem instalaci ze sítě pomocí netboot mini-CD ISO image, který jsem stáhl na disk a zavedl z DOSu pomocí GRUB4DOS, zde je položka v menu.lst:


title Debian Install CD ISO Image
map /MINI.ISO (0xFF)
map --hook
root (0xFF)
chainloader (0xFF)

To mělo ještě drobné úskalí v tom, že instalátor neobsahuje potřebný non-free firmware pro síťovou kartu, který jsem musel stáhnout na USB flešku a podstrčit mu ho během detekce síťovky (taktéž se ještě dožadoval i firmware zvukovky). Pak už jsem jen vybral síťový repozitář, vytvořil na zbylém místě SSD nový ext4 oddíl (na swap už nezbyl volný primární oddíl) a nechal nainstalovat základní systém s kernelem 4.19.0-17-686 (později jsem upgradnul na backportovaný kernel 5.10.0-0.bpo.8-686).
      Po restartu jsem provedl nějaké základní nastavení, vygeneroval jsem APT sources.list a nainstaloval další balíčky včetně Xorgu a grafického prostředí Xfce. Xorg se mi ale nepodařilo spustit. Výchozí driver amdgpu něco pindal, že není KMS a drivery radeon a r128 nenašly podporovaný čip. Drivery vesa a fbdev fungovaly jen v režimu 16 bpp (s kernel boot parametrem vga=791), při 24 bpp (vga=792) skončil Xorg s chybou v logu: "Weight given (000) is inconsistent with the depth (32)" nezávisle na nastavené bitové hloubce v xorg.conf. V závorkách přitom mělo být něco jako (888). Po chvíli hledání jsem zjistil, že musím doinstalovat starší driver mach64. Do konfiguráku /etc/X11/xorg.conf vytvořeného pomocí Xorg -configure jsem explicitně zapsal do sekce "Device" typ driveru: Driver "mach64". Xorg se pak sice spustil, ale až po té, co jsem úplně odstranil kernel boot parametr vga - nezavedl se tak framebuffer (žádné zařízení /dev/fb0) a konzole běžela jen ve standardním VGA módu, jinak jsem v Xorg logu dostal od mach64 driveru chybu: "Unable to map mmio aperture. Invalid argument (22)". Zkoušel jsem též kernel boot parametry video=atyfb a video=uvesa, ale ty žádný framebuffer nevytvořily. S tím jsem se nechtěl smířit a po delším hledání konečně našel řešení v tomto vlákně: je potřeba buď překompilovat kernel s vypnutým nastavením CONFIG_IO_STRICT_DEVMEM=n nebo jednoduše přidat kernel boot parametr iomem=relaxed, čímž se povolí mach64 driveru, který nepodporuje KMS, přímý přístup k MMIO registrům VGA. To je kapánek na úkor bezpečnosti, ale funguje to a běží mi jak konzole ve framebufferu, tak Xorg ve 24 bpp.
      3D akceleraci se mi bohužel nepodařilo rozběhnout, protože pro nový kernel chybí modul mach64.ko, který zprostředkovává rozhraní DRI (/dev/dri/card0), na nějž se napojuje Xorgový driver, takže 3D běží jen přes pomalý SW renderer. Tento modul je zastaralý, s bezpečnostním rizikem a naposled byl k vidění pro starý kernel 2.6. Se spuštěným Xfce4 mám využití paměti celkem mírných 142 MB z 512 MB a díky SSD se to i rozumně hýbe.

Debian Linux-Xfce4 desktop

      16.8.2021 Podařilo se mi najít novější zdrojové kódy mach64-drm-5.8 kernel DRM modulu, který není součástí mainline a měl by fungovat s kernelem 4.10 a novějšími. Pro jeho kompilaci je nutné mít na disku rozbalené a zkonfigurované zdrojáky aktuálního kernelu (v mém případě linux-source-5.10) a k tomu ještě nainstalovaný vývojový balíček knihovny OpenSSL libssl-dev potřebný pro digitální podepisování kernel modulů. Zdrojáky kernelu jsem rozbalil do adresáře /src, zkopíroval stávající kernelí konfigurák /boot/config-5.10.0-0.bpo.8-686 do /src/.config a spustil v /src příkazy make oldconfig a make prepare, čímž by se měly vygenerovat další potřebné konfiguráky, headery a závislosti. Balíček s driverem jsem rozbalil do /src/mach64-drm-5.8 a spustil v něm make, ale při kompilaci vyjela tuna chyb, že chybí nějaké prvky ve struktuře drm_device a další. Zjistil jsem, že je potřeba v kernel configu zapnout volbu CONFIG_DRM_LEGACY=y, takže vyčistit a znova. Tentokrát se už jednotlivé c-čkové soubory driveru zkompilovaly, ale nešly slinkovat, protože mi chyběl soubor Module.symvers, který se vytvoří při kompilaci kernel modulů (make modules). Zkusil jsem soubor vytáhnout z balíčku linux-headers-5.10.0, ale stejně se to neslinkovalo kvůli nějakým chybějícím symbolům, takže bude potřeba přeložit kompletně celé jádro a moduly...

      19.8.2021 Abych ušetřil čas kompilace, nainstaloval jsem si stejnou verzi Debian Buster do VirtualBoxu. Do základní instalace jsem nainstaloval potřebné balíčky pro kompilaci kernelu, ke kterým jsem ještě přidal dpkg-dev (nahrazuje dřívější make-kpkg) pro vytvoření *.deb balíčků a rsync vyžadovaný dpkg-buildpackage. Další případné závislosti lze ověřit příkazem dpkg-checkbuilddeps. Kernelí zdrojáky jsem rozbalil do /src a nakopíroval tam konfigurák s úpravami výše. Ještě jsem radši vypnul podepisování kernel modulů volbami CONFIG_SYSTEM_TRUSTED_KEYRING=n a CONFIG_SYSTEM_TRUSTED_KEYS="" v konfiguráku. Pak už jen stačilo spustit make bindeb-pkg a za cca 4 hodiny jsem měl zkompilovaný kernel nabalíčkovaný do linux-image, linux-headers a linux-libc-dev. Dále jsem rozbalil balíček s driverem a ten se už nad zkonfigurovanými zdrojáky kernelu zkompiloval bez problémů a získal jsem tak kýžený mach64.ko. Vytvořené balíčky a driver jsem přenesl z virtuálu na noťas a nainstaloval. Odebral jsem kernel boot parametr iomem=relaxed, který už není potřeba. Driver mach64.ko jsem nakopíroval do nově vytvořeného adresáře /lib/modules//kernel/drivers/gpu/drm/mach64 a informoval o něm kernel příkazem depmod -a. Driver jsem zavedl pomocí modprobe -v mach64 bez chyby - vypsal: "[drm] Initialied mach64 2.0.0 20060718 for 0000:01:00.0 on minor 0" a objevilo se nové zařízení /dev/dri/card0. Pro trvalé zavedení při bootu jsem přidal řádek mach64 do souboru /etc/modules (pokud jsem loadování modulu nechal na Xorgu, tak při prvním spuštění selhal chybou oprávnění přístupu k /dev/dri/card0 a spustil se až na druhý pokus, chmodem se to fixnout nepodařilo). Bohužel jsem si tím moc nepomohl, akcelerace přes DRI stejně nefunguje - glxinfo |grep render stále hlásí "OpenGL renderer string: llvmpipe (LLVM 7.0, 128 bits)" a v Xorg.0.log vidím podivnou chybu:


[    61.335] drmOpenDevice: node name is /dev/dri/card0
[    61.335] drmOpenDevice: open result is 15, (OK)
[    61.336] drmOpenDevice: node name is /dev/dri/card0
[    61.336] drmOpenDevice: open result is 15, (OK)
[    61.336] drmOpenByBusid: Searching for BusID pci:0000:01:00.0
[    61.336] drmOpenDevice: node name is /dev/dri/card0
[    61.336] drmOpenDevice: open result is 15, (OK)
[    61.336] drmOpenByBusid: drmOpenMinor returns 15
[    61.336] drmOpenByBusid: Interface 1.4 failed, trying 1.1
[    61.336] drmOpenByBusid: drmGetBusid reports pci:0000:01:00.0
[    61.336] (II) [drm] DRM interface version 1.0
[    61.336] (EE) [drm] Could not set DRM device bus ID.
[    61.336] (EE) MACH64(0): [dri] DRIScreenInit Failed
[    61.349] (==) MACH64(0): Backing store enabled
[    61.354] (==) MACH64(0): Silken mouse enabled
[    61.359] (==) MACH64(0): DPMS enabled
[    61.360] (WW) MACH64(0): Option "EnablePageFlip" is not used
[    61.360] (II) MACH64(0): Direct rendering disabled

      Googlení mě přivedlo zpátky na GitHub driveru, kde už stejný problém reportoval někdo dříve. Problém by mohl být v tom, že driver poskytuje pouze staré rozhraní DRI1, které bylo z knihovny Mesa už dávno odstraněno od verze 8, což potvrzuje i toto vlákno. Zkusil jsem ještě zkompilovat ze zdrojáků starou Mesa 7.11.2, což se po postupném doinstalování potřebných lib*-dev balíčků a vypnutí nouveau driveru (kompilace spadla na neexistující header soubor nouveau_device.h) pomocí ./configure --with-gallium-drivers="" --with-dri-drivers="mach64" nakonec podařilo. Zkompilovaný driver mach64_dri.so jsem přejmenoval na mach64_drv.so (tak jak je v nové Mesa), zazálohoval všechny stávající soubory a přepsal je. Pak se ale Xorg vůbec nespustil a skončil s chybou níže. Zřejmě takto nelze mixovat nový Xorg se starou Mesa a nejspíš bych musel přeinstalovat kompletně na starou distribuci...


[  1561.727] (II) LoadModule: "mach64"
[  1561.728] (II) Loading /usr/lib/xorg/modules/drivers/mach64_drv.so
[  1561.736] (EE) LoadModule: Module mach64 does not have a mach64ModuleData data object.
[  1561.736] (EE) Failed to load module "mach64" (invalid module, 0)



Zpět

Aktualizováno 21.8.2021 v 15:40