HARDWARE Acer Aspire 3025WLMi
From Gentoo Linux Wiki
- This page is a candidate for deletion
- Reason given: Not English, please translate this page to English, move this page to the right language wiki or delete this page
- If you disagree with its deletion, please explain why on its discussion page.
- If you intend to fix it, please remove this notice, but do not remove this notice from articles that you have created yourself.
- Make sure no other pages link here and check the page's history before deleting.
| Laptops • TV Tuner Cards • Wireless • Servers • Storage • Other Hardware • Motherboards • Related |
Contents |
[edit] Ogólnie
Firma Acer znana jest z produkcji laptopów o bardzo dobrych parametrach, w przystępnej cenie. Wspomniany tutaj Acer Aspire 3025WLMi został wyposażony w procesor AMD Sempron 3300+ taktowany z częstotliwością 2.0 GHz. Zaimplementowano w nim technologię PowerNow! pozwalającą na płynne i - co ważne - niezauważalne skalowanie prędkości procesora, w zależności od wymaganej mocy obliczeniowej.
Procesor ten został zbudowany w oparciu o architekturę K8, jednak nie obsługuje 64bitowej przestrzeni adresowej. Podczas testów wydajności kompilowanych aplikacji w oparciu o optymalizacje ze specyficznymi flagami, najwydajniejsza i najbardziej przystępna okazała się kombinacja:
| File: /etc/make.conf |
CFLAGS="-s -O2 -finline-functions -march=k8 -mtune=k8 -pipe -fomit-frame-pointer
-ffast-math -m3dnow -funroll-loops -msse -mmmx -msse2" |
Jest to konfiguracja w miarę stabilna (podczas emerge -eD world nie wystąpiły żadne błędy kompilatora).
[edit] Specyfikacja
W opisywanej maszynie zastosowano następujące peryferia:
| Code: lspci |
00:00.0 Host bridge: ATI Technologies Inc RS480 Host Bridge (rev 01) 00:02.0 PCI bridge: ATI Technologies Inc RS480 PCI-X Root Port 00:06.0 PCI bridge: ATI Technologies Inc RS480 PCI Bridge 00:07.0 PCI bridge: ATI Technologies Inc Unknown device 5a39 00:13.0 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller 00:13.1 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller 00:13.2 USB Controller: ATI Technologies Inc IXP SB400 USB2 Host Controller 00:14.0 SMBus: ATI Technologies Inc IXP SB400 SMBus Controller (rev 11) 00:14.1 IDE interface: ATI Technologies Inc Standard Dual Channel PCI IDE Controller ATI 00:14.3 ISA bridge: ATI Technologies Inc IXP SB400 PCI-ISA Bridge 00:14.4 PCI bridge: ATI Technologies Inc IXP SB400 PCI-PCI Bridge 00:14.5 Multimedia audio controller: ATI Technologies Inc IXP SB400 AC'97 Audio Controller (rev 02) 00:14.6 Modem: ATI Technologies Inc ATI SB400 - AC'97 Modem Controller (rev 02) 00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration 00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map 00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller 00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control 01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility X700 (PCIE) 06:05.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02) 06:06.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller 06:06.2 FireWire (IEEE 1394): Texas Instruments OHCI Compliant IEEE 1394 Host Controller 06:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller 06:06.4 Class 0805: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller 06:07.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10) |
Podczas kilkutygodniowej pracy, udało mi się uruchomić wszystkie dostępne w maszynie urządzenia, łącznie z niestandardowym czytnikiem kart firmy Texas Instruments.
[edit] Konfiguracja
[edit] Procesor AMD Sempron 3300+
[edit] Konfiguracja jądra
Konfiguracja jądra ogranicza się do poprawnego ustawienia architektury procesora. Proponuję skorzystanie z opcji:
| Linux Kernel Configuration: Kernel 2.6.17 |
Processor type and features ---> Processor family (Opteron/Athlon64/Hammer/K8) |
[edit] Wykorzystanie technologii PowerNow!
PowerNow! pozwala na dynamiczne skalowanie taktowaniem procesora w zależności od wymaganej w danym momencie mocy obliczeniowej. Pozwala to w maszynach przenośnych na skuteczną oszczędność energii, oraz zmniejszenie zużywania się komponentów elektronicznych - sam procesor wytwarza wtedy mniej ciepła, które dla tego typu podzespołów nie jest niczym dobrym.
AMD Sempron 3300+ pozwala na dynamiczny wybór spośród 4 prędkości taktowania: 800 MHz, 1.60 GHz, 1.80 GHz, 2.00 GHz. Wiele osób mogłoby pomyśleć, ze 800 MHz to niewiele. I tu błąd - jak potem się okaże, 800 MHz jest wystarczające do słuchania muzyki, przeglądania WWW, wysyłania poczty czy oglądania filmów z DVD czy DivX. Wystarczające nie znaczy, że wydajność tych operacji jest w jakiś sposób obniżona - to w jaki sposób działa PowerNow! jest niezauważalne dla użytkownika i raczej nie odczuje dyskomfortu z tego powodu, że ta opcja jest włączona.
Zajmijmy się konfiguracją jądra:
| Linux Kernel Configuration: Kernel 2.6.17 |
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
[*] Sleep States
<*> AC Adapter # opcjonalnie
<*> Battery
<M> Button
<M> Video
<M> Fan
<M> Processor
<M> Thermal Zone
CPU Frequency scaling --->
[*] CPU Frequency scaling
<*> CPU frequency translation statistics
Default CPUFreq governor (userspace)
<*> 'performance' governor
<*> 'powersave' governor
<*> 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
<M> ACPI Processor P-States driver
<*> AMD Opteron/Athlon64 PowerNow!
|
Kompilujemy jądro, kopiujemy je do katalogu /boot, restartujemy system. Posiadamy już obsługę PowerNow! w jądrze. Aby całość jednak poprawnie działała, musimy skorzystać ze specjalnego demona - cpufreqd. Emergujemy więc wymagane pakiety poleceniem emerge cpufreqd. Po kompilacji, sprawdzamy, czy razem z demonem cpufreqd skompilowany został pakiet cpufrequtils. Wydajemy polecenie cpufreq-info. Powinniśmy otrzymać wynik podobny bądź identyczny do tego:
| Code: cpufreq-info |
cpufrequtils 001: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: powernow-k8
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 2.00 GHz
available frequency steps: 800 MHz, 1.60 GHz, 1.80 GHz, 2.00 GHz
available cpufreq governors: conservative, ondemand, powersave, userspace, performance
current policy: frequency should be within 800 MHz and 2.00 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz (asserted by call to hardware).
|
Wynik może nieznacznie się różnić (głownie linia "current CPU frequency is ..."). Nie posiadamy jak narazie działającego demona cpufreqd. Musimy go więc skonfigurować. Otwieramy plik /etc/cpufreqd.conf i modyfikujemy go tak, aby wyglądał jak poniżej:
| File: /etc/cpufreqd.conf |
General] pidfile=/var/run/cpufreqd.pid poll_interval=3 enable_plugins=acpi_ac, acpi_battery enable_remote=1 remote_group=wheel verbosity=5 [/General] [Profile] name=ondemand minfreq=0% maxfreq=100% policy=ondemand [/Profile] [Profile] name=powersave minfreq=0% maxfreq=50% policy=powersave [/Profile] [Rule] name=battery ac=off profile=powersave [/Rule] [Rule] name=ac ac=on profile=ondemand [/Rule] |
Jest to podstawowa konfiguracja demona cpufreqd. Przy powyższych ustawieniach, na zasilaniu bateryjnym (ac=off), maszyna będzie pracowała jedynie z prędkością 800 MHz - tak, aby zaoszczędzić jak najwięcej energii. W przypadku pracy na zasilaczu (ac=on), demon cpufreqd zezwoli procesorowi na pracę w całym zakresie dostępnych częstotliwości - tak, aby elastycznie dopasować się do aktualnie wymaganej mocy obliczeniowej. Zapisujemy plik i uruchamiamy demona poleceniem /etc/init.d/cpufreqd start. Jeżeli nie ma żadnych błędów, sprawdzamy prędkość taktowania procesora. Jeżeli grep "MHz" /proc/cpuinfo pokazuje nam prędkośc równą 800 MHz w przypadku stanu spoczynku, wszystko jest OK. Zalecam sprawdzenie przyjętej przez procesor prędkości w przypadku różnych obciążeń.
Dodajemy demona do sekwencji startowej systemu poleceniem rc-update add cpufreqd default.
[edit] Kontroler USB
Znajdujący się z laptopie kontroler USB1.1 i USB2.0 jest bezproblemowo i w pełnym zakresie obsługiwany przez znajdujący się w jądrze moduł hci_usb. Aby go uruchomić, w konfiguracji jądra wybieramy kolejno:
| Linux Kernel Configuration: Kernel 2.6.17 |
USB support ---> <*> Support for Host-side USB [*] USB device filesystem <*> EHCI HCD (USB 2.0) support <*> OHCI HCD support <*> UHCI HCD (most Intel and VIA) support |
[edit] Karta graficzna
Grafika zainstalowana w laptopie to ATI X700. Jest to chip bardzo wydajny jeżeli brać pod uwagę główne zastosowanie maszyn przenośnych. Zamontowana w niej pamięć 128 MB jest to pamięć własna, nie przydzielana dynamicznie z pamięci RAM, co jest ogromnym atutem tej maszyny.
Skorzystamy ze standardowych sterowników ati-drivers dostarczonych przez firmę ATI. W przypadku xorg-x11 7.0 bądź wyższych, wystarczy modyfikacja pliku /etc/make.conf i zmodyfikowanie bądź dodanie zmiennej VIDEO_CARDS:
| File: /etc/make.conf |
VIDEO_CARDS="fglrx" |
A następnie kompilacja pakietu xorg-server poleceniem emerge xorg-server. W przypadku starszych wersji serwera X'ów, kompilujemy sterowniki poleceniem emerge ati-drivers.
Konfiguracja serwera X.org jest w tym wypadku stosunkowo prosta. Edytujemy plik /etc/X11/xorg.conf i modyfikujemy w nim wymagane sekcje:
| File: /etc/X11/xorg.conf |
Section "Module"
Load "dbe"
SubSection "extmod"
Option "omit xfree86-dga"
EndSubSection
Load "type1"
Load "freetype"
Load "glx"
Load "dri"
EndSection
Section "Monitor"
Identifier "Monitor0"
EndSection
Section "Device"
Identifier "ATI Graphics Adapter"
Driver "fglrx"
Option "no_accel" "no"
Option "no_dri" "no"
Option "mtrr" "off" # disable DRI mtrr mapper, driver has its own code for mtrr
Option "DesktopSetup" "mirror"
Option "ScreenOverlap" "0"
Option "GammaCorrectionI" "0x00000000"
Option "GammaCorrectionII" "0x00000000"
Option "Capabilities" "0x00000000"
Option "CapabilitiesEx" "0x00000000"
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
Option "CenterMode" "off"
Option "PseudoColorVisuals" "off"
Option "Stereo" "off"
Option "StereoSyncEnable" "1"
Option "FSAAEnable" "no"
Option "FSAAScale" "1"
Option "FSAADisableGamma" "no"
Option "FSAACustomizeMSPos" "no"
Option "FSAAMSPosX0" "0.000000"
Option "FSAAMSPosY0" "0.000000"
Option "FSAAMSPosX1" "0.000000"
Option "FSAAMSPosY1" "0.000000"
Option "FSAAMSPosX2" "0.000000"
Option "FSAAMSPosY2" "0.000000"
Option "FSAAMSPosX3" "0.000000"
Option "FSAAMSPosY3" "0.000000"
Option "FSAAMSPosX4" "0.000000"
Option "FSAAMSPosY4" "0.000000"
Option "FSAAMSPosX5" "0.000000"
Option "FSAAMSPosY5" "0.000000"
Option "UseFastTLS" "0"
Option "BlockSignalsOnLock" "on"
Option "UseInternalAGPGART" "yes"
Option "ForceGenericCPU" "no"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "ATI Graphics Adapter"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800"
EndSubSection
EndSection
Section "DRI"
Mode 0666
EndSection |
Dodatkowo, włączenie akceleracji sprzętowej wymaga załadowania modułu fglrx do jądra. Edytujemy więc plik /etc/modules.autoload.d/kernel-2.6 i umieszczamy w nim w dowolnej linijce nazwę naszego modułu:
| File: /etc/modules.autoload.d/kernel-2.6 |
fglrx |
Zapisujemy plik, wydajemy polecenie reboot, bądź ładujemy moduł poleceniem modprobe fglrx. Po ponownym uruchomieniu systemu, uruchamiamy X'y. Całość powinna uruchomić się w najwyższej możliwej rozdzielczość obługiwanej przez ekran naszej maszyny - 1280x800 pikseli.
[edit] Karta Ethernet Gigabit
Zamontowany w mojej maszynie chip firmy Realtek jest w pełni wspierany przez jądro. Wystarczy kompilacja modułu r8169:
| Linux Kernel Configuration: Kernel 2.6.17 |
Ethernet (1000 Mbit) ---> <M> Realtek 8169 gigabit ethernet support |
Kompilujemy jądro / moduł, ładujemy go poleceniem modprobe r8169. Polecenie ifconfig -a powinno pokazać nam nasz interfejs sieciowy:
| Code: ifconfig -a |
eth0 Link encap:Ethernet HWaddr 00:0A:E4:EE:11:F7
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5560932 errors:0 dropped:0 overruns:0 frame:0
TX packets:5254167 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3470461766 (3309.6 Mb) TX bytes:907028760 (865.0 Mb)
Interrupt:11 Base address:0xa400 |
[edit] Karta 802.11g Wireless LAN
Na dobrą sprawę, nie znalazłem jakichś bezproblemowych sterowników natywnie napisanych pod linuxa. Z pomocą przychodzi pakiet ndiswrapper pozwalający na wykorzystanie sterowników Windowsowych do obsługi sprzętu WiFi. Całość działa świetnie ;) Ważnym elementem jest w tym przypadku kompilacja jądra z obsługą urządzeń radiowych. Zaznaczamy więc opcję:
| Linux Kernel Configuration: Kernel 2.6.17 |
Wireless LAN (non-hamradio) ---> [*] Wireless LAN drivers (non-hamradio) & Wireless Extensions |
i kompilujemy jądro.
W tym momencie przygotować musimy oryginalne sterowniki naszego WiFi dostarczane przez Acera na płytkach, wraz z laptopem. Inną możliwością jest pobranie ich ze strony Acera ftp://ftp.support.acer-euro.com/notebook/aspire_3020_5020/driver/80211g.zip .
Emergujemy pakiet ndiswrapper poleceniem emerge ndiswrapper. Rozpakowujemy nasze sterowniki i szukamy pliku bcmwl5.inf. Wydajemy polecenie ndiswrapper -i /sciezka/do/bcmwl5.inf. Ladujemy modul ndiswrapper poleceniem modprobe ndiswrapper. W tej chwili polecenie ifconfig -a powinno pokazać nam nasz nowy interfejs sieciowy:
| Code: ifconfig -a |
wlan0 Link encap:Ethernet HWaddr 00:14:A4:65:92:0F
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:10 Memory:c0204000-c0206000
|
Dodajemy modul ndiswrapper do pliku /etc/modules.autoload.d/kernel-2.6 poleceniem echo "ndiswrapper" >> /etc/modules.autoload.d/kernel-2.6.
[edit] Karta dźwiękowa i modem
Zarówno chipset ATI Technologies Inc IXP SB400 AC'97 jak i modem ATI Technologies Inc ATI SB400 - AC'97 jest bezproblemowo obsługiwany przez znajdujące się w jądrze sterowniki.
Przydatnym w tym przypadku pakietem będzie alsa-utils (chociażby do przywracania stanu mixera po wylaczeniu maszyny). Dlatego też emergujemy ten pakiet poleceniem emerge alsa-utils. Dodajemy alsasound do sekwencji startowej poleceniem rc-update add alsasound default.
Kolejnym krokiem bedzie konfiguracja jądra tak, aby obsługiwało nasz sprzęt. Mamy dwie opcje - możemy skompilować sterowniki jako moduły, bądź wkompilować je w jądro. W pierwszym przypadku alsa sama wykryje nasz sprzęt i załaduje odpowiednie moduły. W razie gdyby jednak było inaczej, musimy skorzystać z polecenia alsaconf.
| Linux Kernel Configuration: Kernel 2.6.17 |
Sound --->
<*> Sound card support
Advanced Linux Sound Architecture --->
<*> Advanced Linux Sound Architecture
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
PCI devices --->
<M> ATI IXP AC97 Controller
<M> ATI IXP Modem
|
Po skompilowaniu tych modułów, powinniśmy posiadać już obsługę dźwięku i modemu. Ich konfiguracje pozostawiam już Wam.
[edit] Touchpad, urządzenia wskazujące
Oczywiscie, czym byłby laptop, bez obsługi touchpada ... z tym nie ma najmniejszych problemów. W przypadku X'ów w wersji 7.0 bądź wyższej, w pliku /etc/make.conf modyfikujemy bądź dodajemy zmienną INPUT_DEVICES:
| File: /etc/make.conf |
INPUT_DEVICES="keyboard mouse synaptics" |
Zauważyłem jednak jedną ciekawą własność. Tak czy inaczej, nasz touchpad wykrywany jest jako zwykła mysz. Dlatego korzystanie z modułu synaptics wydało mi się niekonieczne. Dodatkowo u mojego kolegi moduł ten prowadził do błędu kernel panic. Dlatego też, po skompilowaniu xorg-server, modyfikujemy plik /etc/X11/xorg.conf. Po skonfigurowaniu grafiki i wszelkich innych urządzeń wskazujących, mój plik /etc/X11/xorg.conf wygląda następująco:
| File: /etc/X11/xorg.conf |
Section "ServerLayout"
Identifier "Server Layout"
Screen "Screen0" 0 0
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/local/"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
EndSection
Section "Module"
Load "dbe"
SubSection "extmod"
Option "omit xfree86-dga"
EndSubSection
Load "type1"
Load "freetype"
# This loads the GLX module
Load "glx"
Load "dri"
EndSection
Section "InputDevice"
Identifier "Keyboard1"
Driver "kbd"
Option "AutoRepeat" "500 30"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "pl" # specyficzne dla polskiej klawiatury, powinno zostać zmodyfikowane
# w zależności od potrzeb
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons"
EndSection
Section "Monitor"
Identifier "Monitor0"
EndSection
Section "Device"
Identifier "Standard VGA"
Driver "vga"
VendorName "Unknown"
BoardName "Unknown"
EndSection
Section "Device"
Identifier "ATI Graphics Adapter"
Driver "fglrx"
Option "no_accel" "no"
Option "no_dri" "no"
Option "mtrr" "off" # disable DRI mtrr mapper, driver has its own code for mtrr
Option "DesktopSetup" "mirror"
Option "ScreenOverlap" "0"
Option "GammaCorrectionI" "0x00000000"
Option "GammaCorrectionII" "0x00000000"
Option "Capabilities" "0x00000000"
Option "CapabilitiesEx" "0x00000000"
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
Option "CenterMode" "off"
Option "PseudoColorVisuals" "off"
Option "Stereo" "off"
Option "StereoSyncEnable" "1"
Option "FSAAEnable" "no"
Option "FSAAScale" "1"
Option "FSAADisableGamma" "no"
Option "FSAACustomizeMSPos" "no"
Option "FSAAMSPosX0" "0.000000"
Option "FSAAMSPosY0" "0.000000"
Option "FSAAMSPosX1" "0.000000"
Option "FSAAMSPosY1" "0.000000"
Option "FSAAMSPosX2" "0.000000"
Option "FSAAMSPosY2" "0.000000"
Option "FSAAMSPosX3" "0.000000"
Option "FSAAMSPosY3" "0.000000"
Option "FSAAMSPosX4" "0.000000"
Option "FSAAMSPosY4" "0.000000"
Option "FSAAMSPosX5" "0.000000"
Option "FSAAMSPosY5" "0.000000"
Option "UseFastTLS" "0"
Option "BlockSignalsOnLock" "on"
Option "UseInternalAGPGART" "yes"
Option "ForceGenericCPU" "no"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "ATI Graphics Adapter"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800"
EndSubSection
EndSection
Section "DRI"
Mode 0666
EndSection
|
W przypadku, jeżeli będziesz chciał korzystać zarówno z touchpada jak i z myszy USB, NIE modyfikuj parametru
| File: /etc/X11/xorg.conf |
Option "Device" "/dev/input/mice" |
Osobiście także korzystam z takiego rozwiązania (touchpad jest dosyć niepraktyczny w przypadku gier), dlatego ta konfiguracja przewiduje podobną ewentualność.
[edit] Czytnik kart firmy Texas Instruments
Najwięcej problemów sprawiał mi czytnik kart firmy Texas Instruments. Nie dość, że jest to niestandardowy czytnik, to sama firma nawet w minimalnym stopniu nie próbuje ułatwić życia użytkownikom Linux'a poprzez wydawanie choćby "zamkniętych" sterowników.
Poniższe porady skierowane są dla posiadaczy jądra w wersji 2.6.17 bądź nowszej, w której znajduje się moduł sdhci. Wersje wcześniejsze nie posiadają tego modułu. Dodatkowo, całość nieco trąci amatorką, ale ... sprawia, że wbudowany czytnik działa (aktualnie jedynie z kartami MMC i SD).
Na samym początku konfigurujemy jądro. Będziemy potrzebowali kilku dodatkowych modułów, takich jak np. fakephp.
| Linux Kernel Configuration: Kernel 2.6.17 |
PCI Hotplug Support ---> <M> Fake PCI Hotplug driver MMC/SD Card support ---> <M> MMC support <M> MMC block device driver <M> Secure Digital Host Controller Interface support |
Narazie NIE KOMPILUJEMY jądra.
Modyfikujemy plik /usr/src/linux/drivers/pci/hotplug/fakephp.c ręcznie, bądź łatamy poleceniem patch:
| File: /usr/src/linux/drivers/pci/hotplug/fakephp.c |
--- fakephp.c.orig 2006-02-18 00:19:56.240839250 +1100
+++ fakephp.c 2006-02-17 02:55:28.598947500 +1100
@@ -212,6 +212,8 @@
}
}
}
+ pci_bus_size_bridges(bus);
+ pci_bus_assign_resources(bus);
}
} |
Podobnie jak kilku innych użytkowników tego patcha, nie potrafię określić czy tego typu modyfikacja jest bezpieczna i czy nie spowoduje wieszania się maszyny. Osobiście nie miałem żadnych problemów z działaniem, więc myślę, że na podobnych maszynach kod ten będzie działał równie stabilnie.
Po tej operacji możemy przystąpić do kompilacji jądra. Jeżeli wszystko poszło bez problemu, upewniamy się, czy jądro nie powinno zostać ponownie załadowane. Jeżeli nie, kontynuujemy bez ponownego uruchamiania laptopa.
Osobiście próbowałem napisać skrypt, który automatycznie konfigurowałby czytnik tak, aby był poprawnie widoczny przez system. W końcu napisałem coś w tym stylu:
| Code: cardreader.sh |
#!/bin/bash # Card reader # Upewnij sie, ze dane moduly napewno nie zostaly zaladowane modprobe -r fakephp > /dev/null 2>&1 modprobe -r sdhci > /dev/null 2>&1 modprobe -r mmc_block > /dev/null 2>&1 modprobe -r mmc_core > /dev/null 2>&1 # # Zaladuj fakephp modprobe fakephp > /dev/null 2>&1 # # Ustaw parametry urzadzen setpci -s 06:06.0 86.b=90:d0 > /dev/null 2>&1 echo 0 > /sys/bus/pci/slots/0000:06:06.3/power > /dev/null 2>&1 echo 0 > /sys/bus/pci/slots/0000:06:06.2/power > /dev/null 2>&1 echo 0 > /sys/bus/pci/slots/0000:06:06.0/power > /dev/null 2>&1 echo 1 > /sys/bus/pci/slots/0000:06:06.0/power > /dev/null 2>&1 setpci -s 06:06.3 4c.b=02 > /dev/null 2>&1 setpci -s 06:06.4 04.b=06 > /dev/null 2>&1 setpci -s 06:06.4 88.b=01 > /dev/null 2>&1 # # Zaladuj wymagane moduly do obslugi czytnika modprobe mmc_core > /dev/null 2>&1 modprobe sdhci > /dev/null 2>&1 modprobe mmc_block > /dev/null 2>&1 # # > |
Specjalnie uzylem "> /dev/null 2>&1", poniewaz w niektorych wypadkach wyrzucane sa bledy, ktore raczej nie wplywaja na funkcjonalnosc samego czytnika. W poczatkowych fazach, sugeruje to przekierowanie usunac, by miec pewnosc czy aby napewno bledy te sa nieznaczace.
Jezeli wszystko poszlo poprawnie, po umieszczeniu karty w naszym czytniku, polecenie fdisk -l wyświetli nam pojemność i nazwę naszego urządzenia, które możemy już spokojnie zamontować:
| Code: fdisk -l |
Disk /dev/hda: 100.0 GB, 100030242816 bytes
255 heads, 63 sectors/track, 12161 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1245 10000431 83 Linux
/dev/hda2 1246 12161 87682770 5 Extended
/dev/hda5 1246 6225 40001818+ 83 Linux
/dev/hda6 6226 10480 34178256 83 Linux
/dev/hda7 10481 11725 10000431 83 Linux
/dev/hda8 11726 12161 3502138+ 82 Linux swap / Solaris
Disk /dev/mmcblk0: 128 MB, 128450560 bytes
8 heads, 32 sectors/track, 980 cylinders
Units = cylinders of 256 * 512 = 131072 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 980 125391+ 6 FAT16 |
WAZNE!: nie zalecam wykonywania kilkukrotnie skryptu odpowiadającego za zmianę ustawień PCI i konfigurowanie czytnika. Wystarczy, jeżeli zostanie uruchomiony przy starcie systemu. W przeciwnym wypadku zdarzały się dziwne "zacięcia" systemu.
