Debian - uniwersalna instalacja/Instalacja Debiana na nForce2 i dyskach SATA

Wojciech "voytech" Krężel <darkinn@w3.pl> http://www.darkinn.w3.pl/

Zainstalowanie Debiana GNU/Linux 3.0r1 na dyskach Serial ATA jest o tyle trudne, że żadne z jąder systemu zamieszczonych w dystrybucji nie wspiera najpopularniejszego kontrolera SATA - Silicon Image 3112. Kontroler ten, standardowo montowany jest w płytach głównych opartych na chipsecie nForce2. W tym artykule chciałbym podzielić się moimi uwagami odnośnie instalacji i konfiguracji Debiana na takiej właśnie płycie głównej.

Na pewno sposób przedstawiony przeze mnie nie jest elegancki. Na pewno można to zrobić szybciej, prościej i lepiej, ale ma on jedną niezaprzeczalną zaletę - działa. A to nie jest bez znaczenia, o czym przekonacie się "googlując" w poszukiwaniu lepszych pomysłów ;-)


Przed instalacją systemu

edytuj

Przygotowanie jądra

edytuj

Pobieramy z Internetu najnowsze stabilne źródła jądra Linux i kopiujemy je do katalogu /usr/src/. Tam je rozpakowujemy, tworzymy link symboliczny i konfigurujemy jądro:

# cd /usr/src/
# tar zxf linux-2.4.21.tar.gz
# ln -s linux-2.4.21 linux
# cd linux
# make menuconfig

Ponieważ chcemy zbudować monolityczne jądro, ale z obsługą modułów, to upewniamy się, że mamy włączone takie opcje:

  • Code maturity level options -> Prompt for development and/or incomplete code/drivers
  • Loadable module support -> Enable loadable module support
  • Block devices -> Normal floppy disk support
  • Block devices -> RAM disk support
  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> Include IDE/ATAPI CDROM support
  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> PCI IDE Chipset support
  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> AMD Viper support
  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> Silicon Image chipset support
  • Network device support -> Ethernet (10 or 100Mbit) -> 3c590/3c900 series (592/595/597) "Vortex/Boomerang" support
  • File systems -> Ext3 journaling file system support
  • File systems -> Second extended fs support

i wyłączone takie opcje:

  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> AMD Viper ATA-66 Override

Następnie kompilujemy jądro:

# make dep
# make bzImage

Przygotowanie dyskietek startowych

edytuj

Teraz tworzymy dyskietki startowe, dzięki którym będziemy mogli rozpocząć instalację systemu. Wkładamy pierwszą płytę instalacyjną Debiana do napędu CD-ROM i montujemy ją. Potem wkładamy pierwszą dyskietkę, aby utworzyć dyskietkę ratunkową (ang. rescue disk):

# mount /cdrom
# dd if=/cdrom/dists/stable/main/disks-i386/current/images-1.44/bf2.4/rescue.bin of=/dev/fd0

Następnie montujemy dyskietkę i podmieniamy umieszczone na niej jądro na jądro zbudowane przez nas:

# mount /floppy
# cp /usr/src/linux/arch/i386/boot/bzImage /floppy/linux.bin
# umount /floppy

Teraz wkładamy drugą dyskietkę i tworzymy dyskietkę główną (ang. root disk):

# dd if=/cdrom/dists/stable/main/disks-i386/current/images-1.44/bf2.4/root.bin of=/dev/fd0
# umount /cdrom

Instalacja systemu

edytuj

Teraz wreszcie możemy przejść do naszego komputera z chipsetem nForce2 na "pokładzie". Uruchamiamy go z pierwszej dyskietki, a gdy zostaniemy o to poproszeni, to wkładamy drugą. Powinien się wtedy uruchomić instalator z CD-ROMu, o ile włożyliśmy do niego wcześniej płytkę.

Mamy teraz dwie możliwości: jeśli nasza płyta ma obydwie karty sieciowe umieszczone na złączu ATX (jak np. Asus A7N8X Deluxe), to sieć powinna nam działać podczas instalacji. Jeżeli natomiast drugą "sieciówkę" mamy na karcie ACR (jak np. WinFast K7NCR18GPro-2), to do instalacji muszą nam wystarczyć posiadane CD z dystrybucją. Kończymy instalację zapamiętując, którą partycję mamy podmontowaną jako partycję główną (ang. root). Dyski SATA powinny być rozpoznane przez system jako /dev/hde i /dev/hdg. Rebootujemy komputer.

Po reboocie system nie chce nam się uruchomić... Bez obaw. Jest to zupełnie prawidłowy objaw, gdyż podczas instalacji na dysku zostało umieszczone jądro z płyty CD, a nie z naszej dyskietki. Musimy znów przejść do drugiego Linuksa.

Wkładamy pustą dyskietkę, tworzymy ją bootowalną, po czym znowu podmieniamy jądro na przygotowane przez nas:

# mkboot
# mount /floppy
# cp /usr/src/linux/arch/i386/boot/bzImage /floppy/vmlinuz
# umount /floppy

Bootujemy komputer z nForcem2 z dyskietki i gdy zgłosi się LILO, to wpisujemy

# linux root=/dev/hdeX

Oczywiście zamiast X podajemy numer naszej partycji głównej, np. /dev/hde3 .

To jeszcze nie koniec "zabawy" ;-) Gdy już się uruchomi system, musimy podmienić jądro na dysku twardym i zaktualizować plik /etc/lilo.conf :

# mount /floppy
# cp /floppy/vmlinuz /boot/vmlinuz-rescue
# vi /etc/lilo.conf

Dopisujemy w nim następujące linijki:

image=/boot/vmlinuz-rescue
label=rescue
read-only

i wydajemy polecenia:

# lilo
# umount /floppy

Wyjmujemy dyskietkę i wreszcie możemy zbootować Debiana z naszego dysku Serial ATA :-)

Po instalacji systemu

edytuj

Kompilacja jądra i instalacja sterowników

edytuj

Teraz będą nam potrzebne źródła jądra Linux i sterowniki do chipsetu nForce2. Jeśli nasz komputer jest podłączony do Sieci, to pobieramy je wprost z Internetu. Jeżeli nie mamy połączenia z Internetem, to musimy pobrać kody źródłowe z innej maszyny i przenieść je na jakimś nośniku.

Źródła najnowszej stabilnej wersji Linuksa możemy pobrać spod adresu ftp://sunsite.icm.edu.pl/pub/Linux/kernel/v2.4/linux-2.4.21.tar.gz, zaś sterowniki do chipsetu nForce2 stąd - http://download.nvidia.com/XFree86/nforce/1.0-0261/NVIDIA_nforce-1.0-0261.tar.gz.

Poniższa komenda zainstaluje pakiety, które są niezbędne do kompilacji kernela:

# apt-get install bin86 gcc libncurses5-dev make libc6-dev

Kompilujemy jądro, tym razem z obsługą modułów, pamiętając o włączeniu wyżej wymienionych funkcji oraz o następujących rzeczach:

1. niektórzy ludzie zalecają wyłączenie opcji

  • Processor type and features -> Local APIC support on uniprocessors
  • Processor type and features -> IO-APIC support on uniprocessors
  • General setup -> Power Management support -> ACPI support

ze względu na problemy z działaniem (w jądrach do wersji 2.4.21-rc2-ac2). Na używanym przez mnie jądrze 2.4.21 nie stwierdziłem żadnych problemów, ale proszę mieć na uwadze te opinie.

2. niektórzy ludzie doradzają wyłączenie opcji

  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> Generic PCI IDE Chipset Support

, ponieważ drastycznie wpływa na wydajność systemu. Dzieje się tak, gdyż Linux używa sterowników Generic IDE zamiast natywnych dla chipsetu, gdy obydwa są wkompilowane w jądro. Obsługą chipsetu nForce2 zajmuje się wspomniany już sterownik, który włączamy za pomocą opcji

  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> AMD Viper support

3. niektórzy ludzie zalecają następujące ustawienie opcji kompilacji CFLAGS i HOSTCFLAGS w pliku Makefile:

-O3 -mcpu=athlon-xp -march=athlon -pipe -msse -mfpmath=sse,387

Ja tego nie testowałem.

4. do włączenia obsługi USB służą opcje

  • USB support -> Support for USB -> Preliminary USB device filesystem
  • USB support -> Support for USB -> OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
  • USB support -> Support for USB -> EHCI HCD (USB 2.0) support (EXPERIMENTAL) (NEW)

Można również włączyć inne funkcje, z których chce się korzystać.

5. do włączenia obsługi FireWire służy opcja

  • IEEE 1394 (FireWire) support (EXPERIMENTAL) -> OHCI-1394 support

6. do obsługi wbudowanej karty dźwiękowej można wykorzystać sterownik nVidii, bądź użyć sterownika dołączonego do jądra. Gdybyście chcieli skorzystać ze sterownika wchodzącego w skład źródeł Linuksa, to podczas konfiguracji kernela musicie włączyć opcję:

  • Sound -> Sound card support -> Intel ICH (i8xx), SiS 7012, NVidia nForce Audio or AMD 768/811x

7. podobno wbudowana karta sieciowa 3Com działa na znajdującym się w źródłach jądra 2.4.21 sterowniku 3c59x:

  • Network device support -> Ethernet (10 or 100Mbit) -> 3c590/3c900 series (592/595/597) "Vortex/Boomerang" support

Napisałem podobno, gdyż w mojej płycie głównej sieciówka była umieszczona na karcie ACR, przez co stała się dla mnie bezużyteczna.

Jeżeli jednak sieciówka nie zadziała na tym sterowniku, to skopiujcie sterownik z płyty CD dołączonej do płyty głównej:

# cp /cdrom/ścieżka/dostępu/3c90x-103.tar.gz /usr/src
# cd /usr/src
# tar zxf 3c90x-103.tar.gz
# cd 3c90x-103

Niektórzy ludzie zalecają także odkomentowanie w pliku 3c90x.h następującej linii:

// #define BRIDGEPORT_SUPPORT 1  // 3c9201

oraz wydanie później komend:

# ./compile_UP
# ./install3c90x

8. do obsługi softwarowego RAID-u umieszczonego na płycie (tak, tak, to nie jest sprzętowy RAID - jego działanie opiera się na windowsowym sterowniku) można użyć opcji:

  • ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices -> Silicon Image Medley software RAID (EXPERIMENTAL)

W pomocy do tej opcji możemy przeczytać:

Note, that Linux does not use the Raid implementation in BIOS, and
the main purpose for this feature is to retain compatibility and
data integrity with other OS-es, using the same disk array. Linux
has its own Raid drivers, which you should use if you need better
performance.

Myślę, że możemy zatem bez obaw zignorować tę opcję, jeżeli nie będziemy mieli zainstalowanych dwóch systemów operacyjnych.

Niektórzy ludzie radzą, żeby przed kompilacją sterownika nForce wykonać następujące czynności:

# cd /usr/src/linux/include/linux
# mv malloc.h malloc.h.org
# ln -s slab.h malloc.h

, co pozwoli uniknąć błędów podczas kompilacji. Sugerowana jest również zmiana -falign-functions=4 na -malign-functions=4 w pliku Makefile dla nvnet, jeżeli używamy kompilatora gcc w wersji 2.95.

U mnie na szczęście te zabiegi nie były konieczne. Przystępujemy zatem do rozpakowania sterownika nForce i jego kompilacji:

# tar zxf NVIDIA_nforce-1.0-0261.tar.gz
# cd /usr/src/nforce
# make
# make install
 

NOTATKA
Głupia sprawa, ale podczas wielu testów i kompilacji zdarzyło się, że kilka razy wyskakiwał mi błąd "Unresolved symbols" w pliku nvaudio.o . W zasadzie do końca nie wiem, co pomogło, ale wydaje mi się, że "lekarstwem" w takich przypadkach jest komenda make mrproper i ponowna kompilacja jądra.

Tworzymy teraz plik /etc/modutils/local i wpisujemy do niego:

alias parport_lowlevel parport_pc
alias usb-controller usb-ohci
alias usb-controller1 ehci-hcd
alias usb-interface usb-ohci
alias ieee1394-controller ohci1394
# W zależności, która sieciówka jest u was rozpoznawana jako pierwsza
# przypiszcie odpowiednio eth0 i eth1.
alias eth0 nvnet
# Sterownik nvidii ma następujące parametry:
#options nvnet optimization=0 # optymalizacja: 0-szybkości działania,
#                                              1-użycia procesora
#options nvnet speed=0 # szybkość: 0-auto, 1-10Mbps, 2-100Mbps
#options nvnet duplex=0 # duplex: 0-auto, 1-half, 2-full
alias eth1 3c59x
# Odkomentować, jeśli do dźwięku chcecie używać sterownika nVidii.
# alias sound-slot-0 nvaudio
# Odkomentować, jeśli do dźwięku chcecie używać sterownika z jądra
# (nie potrzeba podawać parametru).
#alias sound-slot-0 i810_audio
# BARDZO WAŻNY PARAMETR! Wyjaśnienie znajduje się poniżej.
options nvaudio spdif_status=0

Domyślnie parametr spdif_status jest włączony, ale wtedy sterownik wspiera wyłącznie 48kHz. Próba odtworzenia zwykłego pliku .mp3 kończy się tak:

MPEG 1.0 layer III, 128 kbit/s, 44100 Hz stereo
No supported rate found!

Dlatego właśnie trzeba wyłączyć ten parametr, aby sterownik obsługiwał inne formaty.

Informacje o modułach uaktualniamy za pomocą polecenia

# update-modules

Optymalizacja pracy twardego dysku

edytuj

Pozostaje nam jeszcze zoptymalizować pracę twardego dysku. Pewnie już zauważyliście podczas startu taki oto komunikat jądra:

SiI3112 Serial ATA: not 100% native mode: will probe irqs later
    ide2: MMIO-DMA , BIOS settings: hde:pio, hdf:pio
    ide3: MMIO-DMA , BIOS settings: hdg:pio, hdh:pio

i rzeczywiście, wydajność ultraszybkich dysków WesternDigital WD360GD 10000RPM jest daleka od akceptowalnego poziomu:

# hdparm -t /dev/hde
/dev/hde:
 Timing buffered disk reads:  64 MB in 45.88 seconds =  1.39 MB/sec

Należy zatem włączyć odpowiednie opcje w którymś ze skryptów startowych.

# hdparm -q -c 1 -q -m 16 -q -d 1 -q -X66 -q -k 1 /dev/hde
# hdparm -t /dev/hde
/dev/hde:
 Timing buffered disk reads:  64 MB in  1.18 seconds = 54.24 MB/sec

Piękne, prawda? ;-)

 

OSTRZEŻENIE
Koniecznie należy podać parametr -X66, ponieważ podanie samego parametru -d 1 powoduje zawieszenie się systemu.

Natomiast optymalizację pracy "twardziela" wyłączamy tak:

# hdparm -q -c 0 -q -m 0 -q -d 0 -q -k 0 /dev/hde

Nierozwiązane problemy

edytuj

1. Do wspomnianej przeze mnie płyty WinFast K7NCR18GPro-2, firma Leadtek dołącza kartę K7NFAL z wyprowadzeniami:

  • Mini-1394
  • 1394
  • RJ-45 (karta sieciowa 3Com)
  • SPDIF output
  • Kanały: tylny prawy/tylny lewy
  • Kanały: centralny/subwoofer

Niestety, nie mam pojęcia jak uruchomić cokolwiek z rzeczy umieszczonych na karcie ACR. Komendy modprobe 3c90x i modprobe 3c59x powodują następujący komunikat

/lib/modules/2.4.21/kernel/drivers/net/3c59x.o: init_module: No such device

2. System widzi kontroler FireWire, ale nie wiem czy działa. Spotkałem się z opiniami, że nie, ale sam nie mogłem tego sprawdzić.

3. Nie udało mi się uruchumić obsługi 6 kanałów. Podczas ładowania modułu pojawia się komunikat:

Nvidia + AC97 Audio, version 0.24
Nvaudio: in Funcction Nvaudio_init_module
Nvaudio: NVIDIA nForce2 Audio found at IO 0xd400 and 0xd000, IRQ 3
Nvaudio: Audio Controller supports 6 channels.
NVaudio: Defaulting to base 2 channel mode.
ac97_codec: AC97 Audio codec, id: ALG32 (ALC650)
Nvaudio: Nvaudio_ac97_enable_variable_rate
Nvaudio: AC'97 codec 0 supports AMAP, total channels = 6

Podobny efekt jest na sterowniku i810_audio:

Intel 810 + AC97 Audio, version 0.24, 16:25:57 Aug  4 2003
i810: NVIDIA nForce Audio found at IO 0xd400 and 0xd000, MEM 0x0000 and 0x0000, IRQ 3
i810_audio: Audio Controller supports 6 channels.
i810_audio: Defaulting to base 2 channel mode.
i810_audio: Resetting connection 0
ac97_codec: AC97 Audio codec, id: ALG32 (ALC650)
i810_audio: AC'97 codec 0 supports AMAP, total channels = 6

4. Nie udało mi się jeszcze uruchomić lm-sensors, ale jeśli chcecie samemu spróbować, to pod tym adresem jest pewna wskazówka: http://www.nforcershq.com/forum/viewtopic.php?t=23918&sid=8e6f3b6d097334d2c105967163817e83.

I to chyba tyle. Będę szczęśliwy, jeśli zechcecie się ze mną podzielić swoimi uwagami.

Licencja

edytuj

Całość tekstu jest objęta licencją CC-BY-SA 3.0 i jednocześnie GNU FDL 1.2.

Udziela się zezwolenia do kopiowania, rozpowszechniania lub modyfikacji tego dokumentu zgodnie z zasadami Licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 3.0 Unported lub dowolnej późniejszej wersji licencji opublikowanej przez Creative Commons, która zawiera te same elementy co niniejsza licencja. Treść licencji dostępna jest pod adresem http://creativecommons.org/licenses/by-sa/3.0/legalcode.

Udziela się zezwolenia do kopiowania, rozpowszechniania lub modyfikacji tego dokumentu zgodnie z zasadami Licencji GNU Wolnej Dokumentacji w wersji 1.2 lub dowolnej późniejszej, opublikowanej przez Free Software Foundation; nie zawiera Sekcji Niezmiennych, bez Tekstu na Przedniej Okładce i bez Tekstu na Tylnej Okładce. Kopia licencji załączona jest w sekcji zatytułowanej "GNU Free Documentation License".