decoration Tag "kernel" decoration

decoration
decoration
25.05 2009
16:33

Framebuffer na grafice Intela

Od jądra w wersji 2.6.29 wprowadzono obsługę KMS (Kernel Mode Setting). Pojawienie się tej opcji pozwala na bardzo proste (wręcz automatyczne) ustawienie framebuffera w konsoli Linuksa – samą decyzje o rozdzielczości w jakiej ma działać system podejmie jądro.



Wcześniej aby uzyskać oczekiwaną rozdzielczość w konsoli dla kart graficznych Intela, konieczne było użycie sterownika vesa, lub i810fb. Jeśli chodzi o ten drugi, nie jestem do końca pewien, czy działa – u mnie nigdy mi się nie udało uzyskać w ten sposób framebuffera. Nowe rozwiązanie nie wymaga od nas nawet przekazania dodatkowego argumentu dla jądra (przekazywanego np. przez GRUBa) przy starcie systemu. Wystarczy odpowiednio skompilować jądro:

 

Konfiguracja kernela

Device Drivers => Graphics support => Direct Rendering Manager


Ważne jest aby wkompilować Enable modesetting on intel by default. Można jeszcze się upewnić czy jest dla jądra wybrana obsługa framebuffer. Dobrze jest się również upewnić, czy nie mamy aktywnego innego sterownika FB, by przypadkiem nam nie przechwycił konfiguracji.

Problem jaki się teraz może pojawić, to niekompatybilny serwer Xów. Jeżeli posiadamy wersję starszą niż 1.6 – nie uda nam się odpalić Xów. Dlatego wymagana jest również aktualizacja do xorg-server-1.6.

Po przekompilowaniu jądra i aktualizacji serwera Xorg po prostu uruchamiamy ponownie komputer, bez potrzeby edycji wpisów w boot loaderze.



02.03 2009
12:21

Monitorowanie urządzeń - lm-sensors

Konfiguracja jądra

Jak zwykle – na początek trzeba zacząć od przygotowanie jądra systemu. Przed tym warto dokładniej zapoznać się z naszym sprzętem komputerowym:

lspci
cd /usr/src/linux
make menuconfig


W jądrze nie czeka nas zbyt wiele modyfikacji. Przechodzimy do zakładki  Device Drivers  --->  I2C support  i zaznaczamy: I2C device interface jako moduł. Następnie przechodzimy do I2C Hardware Bus support i zaznaczamy urządzenia jakie posiadamy (ewentualnie żadne). Następnie udajemy się do Device Drivers  --->  Hardware Monitoring support  i tutaj również zaznaczamy posiadane przez nas urządzenia. Jeśli nie wiemy co dokładnie zaznaczyć można zaznaczyć wszystko, ale po co nam śmieci w systemie.



Na koniec przekompilujemy i zainstalujemy nowe moduły:

make && make modules_install


Teraz trzeba skopiować nowe jądro na miejsce starego – ścieżka nowego powinna być widoczna gdzieś pod koniec wypisach na ekran informacji po kompilacji jądra.

cp arch/x86/boot/bzImage /boot/vmlinuz


Ponownie uruchamiamy komputer – na wszelki wypadek jeśli zostały dodane jakieś elementy wkompilowane w jądro (nie jako moduły)

 

Kompilacja Lm-Sensors

Przejdźmy teraz do aplikacji odpowiedzialnej za pobieranie informacji o stanie podzespołów komputera. Lm-sensors można pobrać z oficjalnej strony. Następnie rozpakowujemy i kompilujemy:

tar xvf lm_sensors-3.1.0.tar.bz2
cd lm_sensors-3.1.0
make PREFIX=/usr
make install PREFIX=/usr


Przed uruchomieniem musimy załadować nasze skompilowane moduły – w podobny sposób jak tutaj:

modprobe i2c-core
modprobe i2c-proc


Do wykrycia sprzętu, który zostanie obsłużony uruchamiamy:

sensors-detect


Odpowiadamy na wszystkie pytania twierdząco, aby przeskanować wszystkie typy urządzeń. Na koniec zostaniemy zapytani, czy wygenerować plik konfiguracyjny – również odpowiadamy YES.

Aby sprawdzić, czy wszystko działa poprawnie wydajemy polecenie

sensors


lub jeżeli chcemy wskazać inny plik konfiguracyjny:

sensors -c /etc/sysconf/lm_sensors


Aplikacje
W zależności od tego jakiego środowiska używamy możemy skorzystać z kilku aplikacji odczytujących informacje z lm-sensors.
Dla KDE jest to np. KSensors, Kima.
Dla Gnome: ComputerTemp, dla XFCE: Xfce4-sensors.



Z innych aplikacji pomocnych przy monitorowaniu systemu przez lm-sensors można wymienić Conky, GKrellM.

 



17.02 2009
16:03

WiFi w Linuksie

Konfiguracja jądra

Zacznijmy od konfiguracji jądra:


Networking support  ---> Wireless

 

Wireless Tools

Wireless Tools to zestaw prostych narzędzi do zarządzania urządzeniami WiFi na komputerze. Zanim zaczniemy ich kompilację, warto sprawdzić czy już przypadkiem nie są zainstalowane w naszym systemie. Jeżeli podając polecenie:

iwconfig

otrzymamy 'command not found' możemy zabrać się za pobranie źródeł z tej strony. Następnie rozpakowujemy archiwum i kompilujemy narzędzia:

tar xvf wireless_tools.29.tar.gz
cd wireless_tools.29
make PREFIX=/usr
make PREFIX=/usr install

 

Ndiswrapper

Jądro Linuksa ma już wbudowane na stałe kilka sterowników kart WiFi, jednak często w dystrybucjach wykorzystuje się moduły Ndiswrappera. Czym zatem jest Ndiswrapper? Jest on właśnie modułem do jądra Linuksa, umożliwiającym obsługę kart WiFi tych producentów, którzy zapomnieli, że istnieje coś takiego jak GNU Linux. Za pomocą Ndiswrappera możemy do obsługi karty bezprzewodowej użyć sterowników z systemu Windows.
Sam program można pobrać z tej strony. Kompilacja jest dość prosta – przebiega podobnie jak w większości modułów dla jądra. Rozpakowujemy archiwum, przechodzimy do lokalizacji i kompilujemy:

tar xvf ndiswrapper-1.54.tar.gz
cd ndiswrapper-1.54
make
make install

Teraz będziemy potrzebowali sterowników do naszej karty z Windowsa. Możemy je zazwyczaj pobrać ze strony producenta karty. Potrzebujemy dwóch plików - *.inf i *.sys. Gdy już je mamy musimy załadować je do Ndiswrappera:

ndiswrapper -i /sciezka/do/pliku.inf

Aby sprawdzić, czy poprawnie zostały zainstalowane wydajemy polecenie:

ndiswrapper -l

i powinniśmy zobaczyć nasz zainstalowany sterownik.
Kolejnym krokiem jest załadownie modułu jądra do pamięci:

modprobe ndiswrapper

Jeżeli chcemy, żeby moduł ładował się automatycznie przy starcie systemu trzeba go dopisać do /etc/sysconfig/modules, lub /etc/modules.autoload.d/kernel-2.6, lub w jeszcze inne miejsce – w zależności od używanej dystrybucji. Ewentualnie dopisać jakiś prosty skrypt startowy w /etc/init.d.

Teraz jeśli nie mamy włączonej naszej karty WiFi, to jest to dobry moment, żeby to zrobić. Następnie sprawdźmy, czy nasze sterowniki zadziałają.

Aby zobaczyć listę interfejsów sieciowych dostępnych w systemie wpisujemy:

ifconfig -a

Powinna się nam ukazać lista z wszystkimi interfejsami. Nasz interfejs karty bezprzewodowej prawdopodobnie będzie się nazywać wlan0. Aby to sprawdzić możemy wykonać polecenie:

iwconfig

Dla interfejsów, które nie są bezprzewodowe otrzymamy informacje: „no wireless extensions”.

Aby można było skorzystać z naszej karty musimy jeszcze ją „obudzić”:

ifconfig wlan0 up

I aby sprawdzić, czy jest aktywna możemy wydać polecenie:

ifconfig

Sprawdźmy teraz jej działanie – przeskanujmy sieci, które są w pobliżu:

iwlist wlan0 scan

 

WPA Supplicant - kompilacja

Mamy więc już skonfigurowaną i działającą kartę WiFi. Trzeba się teraz połączyć z naszą siecią. W dzisiejszych czasach sieci zazwyczaj posiadają jakieś tam mniejsze, lub większe zabezpieczenia. Najpopularniejszy jest chyba WPA. Aplikacja WPA Supplicant pomoże nam nawiązać połączenie z naszą zabezpieczoną siecią.
Program można pobrać z tej strony. Po rozpakowaniu archiwum przechodzimy do folderu:

cd wpa_supplicant-0.6.8/wpa_supplicant

a następnie tworzymy tam plik konfiguracyjny:

echo "CONFIG_CTRL_IFACE=y
CONFIG_BACKEND=file

CONFIG_EAP_GTC=y
CONFIG_EAP_MD5=y
CONFIG_EAP_OTP=y
CONFIG_EAP_PAX=y
CONFIG_EAP_PSK=y
CONFIG_EAP_TLV=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_PKCS12=y
CONFIG_PEERKEY=y
CONFIG_EAP_LEAP=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_TLS=y
CONFIG_EAP_TTLS=y

CONFIG_CTRL_IFACE_DBUS=y

CONFIG_READLINE=y

CONFIG_TLS=openssl
" > .config


oraz modyfikujemy ścieżki instalacji za pomocą dowolnego edytora:

vim Makefile

i LIBDIR zmieniamy na /usr/lib/, oraz BINDIR na /usr/sbin/

I rozpoczynamy kompilację

make
make install

 

 

Konfiguracja i uruchomienie

Kolejnym krokiem, gdy już mamy skompilowane WPA Supplicant musimy utworzyć plik konfiguracyjny sieci z którą chcemy się połączyć. Domyślnie plik ten przechowywany jest w lokalizacji /etc/wpa_supplicant.conf, jednak możemy wybrać dowolnie inna (np. /etc/wpa_supplicant/siec1.conf).
Przykładowy plik konfiguracyjny znajdziemy w folderze ze źródłami, a kolejne na stronie projektu.
W celu połączenia się z siecią bezprzewodową zabezpieczoną WPA-PSK/TKIP nasz plik konfiguracyjny będzie miał następująca strukturę:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1

network={
ssid="nazwa"
psk="haslo"
proto=WPA
key_mgmt=WPA-PSK
}


I na tym można zakończyć konfigurację. Teraz w końcu możemy spróbować się połączyć z naszą siecią:

ifconfig wlan0 up
wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf


a gdy widzimy informację, że udało się połączyć

CTRL-EVENT-SCAN-RESULTS 
Trying to associate with 00:1e:37:f1:c5:46 (SSID='nazwa' freq=2452 MHz)
Associated with 00:1e:37:f1:c5:46
WPA: Key negotiation completed with 00:1e:37:f1:c5:46 [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:1e:37:f1:c5:46 completed (auth) [id=0 id_str=]


możemy nacisnąć ctrl+z i uruchomić ten uśpiony proces w tle, a następnie przydzielić IP z serwera DHCP:

bg
dhcpcd wlan0

Oczywiście  polecenie do przydzielenia IP z serwera będzie różne w zależności od klienta DHCP zainstalowanego w systemie. Jeżeli po przydzieleniu IP nadal będą problemy z połączeniem można spróbować wyłączyć interfejs eth0, lub inny sieciowy, z którego aplikacja mogłaby próbować korzystać przy próbie pobierania danych.



08.12 2007
19:01

Windows pod Linuksem - wirtualizacja

Co daje nam wirtualizacja?

Wirtualizacja pozwala na utworzenie nowej wirtualnej maszyny, na już działającym systemie operacyjnym. Możliwe jest przypisanie dla jej sprzętu dowolnych parametrów (np. znacznie większa ilość pamięci), zależnie od tego jakie możliwości daje nam program ją obsługujący. Na takiej maszynie można zainstalować również system operacyjny, jeśli ustawiona architektura procesora jest zgodna z danym systemem, oraz spełnione są inne wymagania sprzętowe. Dla tych, którzy jeszcze nie do końca rozumieją – można powiedzieć, że otrzymujemy nowy komputer wewnątrz naszego działającego systemu operacyjnego.

 

Jakie oprogramowanie?

Znanych jest mi kilka programów, które umożliwiają użytkownikowi utworzenie na swoim komputerze nowej maszyny wirtualnej. Najbardziej znany jest chyba VMware. Opatrzony jest on niestety licencją komercyjną. Sam odtwarzacz (Player) służący do uruchamiania maszyny jest dostępny bezpłatnie, jednak za środowisko umożliwiające przygotowanie takiej maszyny trzeba już zapłacić. Kolejną propozycją jest VirtualBox. Jeśli chodzi o funkcjonalność w stosunku do VMware, jest ona z pewnością mniejsza, ale ma inny spory atut – jedną z licencji na której jest wydawany jest GPL. Kolejną propozycją również wydawaną na licencji GPL jest QEMU. Trzeba mu jednak przyznać, że jeszcze nie sprawuje się aż tak dobrze jak VirtualBox. Mój wybór padł więc na VirtualBox'a.

 

 

Instalacja VirtualBox'a

Podejrzewam, że każda (przynajmniej dobra) dystrybucja Linuksa zaopatrzyła swoje repozytoria w VirtualBox'a. Opiszę tutaj jednak sposób instalacji niezależny od posiadanej dystrybucji. W pierwszej kolejności należy odwiedzić stronę http://www.virtualbox.org/ . Tam w zakładce download wybieramy for Linux -> all distributions. Pobranemu plikowi nadajemy prawa do wykonywania:

chmod a+x VirtualBox_1.5.2_Linux_x86.run

i uruchamiamy z konta roota:

./VirtualBox_1.5.2_Linux_x86.run

Archiwum zostanie rozpakowane do /opt/VirtualBox-1.5.2. Kolejnym krokiem jest skompilowanie modułu dla jądra:

cd /opt/VirtualBox-1.5.2/src/
make
make install

Aby moduł był ładowany automatycznie przy starcie, dopisujemy go do odpowiedniego pliku. Dla różnych systemów lokalizacja tego pliku będzie różna. Przykładowa jego lokalizacja to: /etc/sysconfig/modules. Moduł, który trzeba dopisać to vboxdrv. Jeżeli nie zostanie on dopisany, do uruchamiania przy starcie, będzie trzeba załadować go ręcznie przed uruchomieniem VirtualBox'a:

modprobe vboxdrv

Aby VirtualBox miał dostęp do urządzeń podpiętych do portu USB, prawdopodobnie będzie trzeba dopisać linijkę:

usbfsnone /proc/bus/usb usbfs devgid=1001,devmode=666 0 0

do pliku /etc/fstab. Do uruchomienia maszyny wirtualnej przez zwykłego użytkownika, wymagane jest dodanie go do grupy vboxusers:

gpasswd -a uzytkownik vboxusers

po czym, jeśli jest on zalogowany należy go przelogować.

 

Tworzenie maszyny wirtualnej

Nadszedł czas, aby utworzyć maszynę wirtualną. W tym celu uruchamiamy managera:

/opt/VirtualBox-1.5.2/VirtualBox

otrzymując okienko w stylu QT. Dalsza obsługa programu już nie powinna stwarzać trudności. GUI jest na tyle przyjazne, że początkujący użytkownik może szybko przygotować maszynę do pracy. Klikając na przycisk 'Nowa' (Ctrl+N) dostajemy okienko kreatora wyjaśniające nam wszystkie czynności po kolei: Wpisujemy nazwę, oraz typ systemu (wybrałem: WinXP), przydzielamy ilość pamięci RAM dla naszej nowej maszyny (wybrałem: 192MB). Teraz tworzymy nowy dysk twardy, co spowoduje uruchomienie następnego kreatora. Zalecam tutaj wybrać obraz o stałym (wybrałem 10G) rozmiarze (UWAGA: przy obrazie o stałym rozmiarze nie musimy mieć dostępnego aż tyle na dysku ile będzie on zajmować, ale zalecane jest jednak, żeby nie przekraczał on rozmiaru partycji na której zostanie utworzony). Po zakończeniu obu kreatorów można przejść w ustawienia utworzonej maszyny i włączyć kontroler USB, dźwięk (np. ALSA), zamontować napęd CD gospodarza (/dev/cdrom). Tutaj taka moja obserwacja: cdrom musi być w lokalizacji /dev/cdrom, jeżeli nasz cdrom to /dev/hdc, lub coś podobnego, to należy go podlinkować (przez root'a) do /dev/cdrom:

ln -s /dev/hdc /dev/cdrom

 

Instalacja systemu

Teraz można uruchomić maszynę wirtualną i zacząć rozruch z płyty CD, ewentualnie z obrazu *.iso (ściągniętego np. z MSDNAA). Instalacja systemu przebiega w taki sam sposób jak instalacja systemu bez kontroli VirtualBox'a.

 

 

Instalacja sterowników

Jeżeli nasz system już działa użytkownik będzie pewnie chciał zainstalować sterowniki dla urządzeń. Jedna uwaga tutaj: działający sprzęt jest wirtualny i nie jest zgodny z tym co faktycznie mamy 'pod blachą'. Twórcy VirtualBox'a dali użytkownikom pewien dodatek, który znajdziemy w katalogu /opt/VirtualBox-1.5.2/additions. Jest to obraz płyty *.iso, na którym znajdują się sterowniki do wirtualnych urządzeń. Zalecam zamontować ten dysk w VirtualBox'ie i zainstalować znajdujące się tam sterowniki. Dzięki temu np. będzie można uzyskiwać niestandardowe rozdzielczości, oraz poruszać się między maszyną wirtualną, a Linuksem bez potrzeby uwalniania kursora.

 

 

VirtualBox, a urządzenia USB

Wiele użytkowników pewnie się zastanawia, czy będzie działać prawidłowo ich sprzęt podłączany do USB pod tym wirtualnym Windows'em. Z moich testów wynika, że nie ma problemów z obsługą drukarek, skanerów, pendrive'ów, kamer internetowych pod VirtualBox'em. Identyfikatory tych urządzeń są przekazywane dla maszyny wirtualnej (jeżeli jest włączony kontroler USB), gdzie zostają przechwycone przez działający tam system operacyjny. Przechwycone przez VirtualBox'a urządzenie jednak nie będzie mogło być w tym samym czasie obsługiwane przez system Linuks i system wirtualny.

 



16.02 2007
11:39

Framebuffer w Linuksie


Podkreśliłem tutaj specjalnie Linuksa, gdyż nie wiem jak sprawa się ma w innych systemach unix'owych, ale podejrzewam, że też mogą być wyposażone w urządzenia tego typu. W przypadku innych systemów niż Linux poniższa metoda nie zadziała, gdyż wymagana jest tutaj modyfikacja jądra Linuksa.


Do najpopularniejszych zastosowań framebuffer używany jest by zmienić rozdzielczość konsoli systemowej. Dzięki temu użytkownik otrzymuje większą wygodę w poruszaniu się po systemie właśnie poprzez konsolę. Framebuffer wykorzystywany również może być do przeglądania plików graficznych, pdf'ów, czy klipów wideo.

 

 

Wybór sterownika


Aby przygotować system do obsługi framebuffer należy odpowiednio skompilować jądro. Przedstawię tutaj sposób kompilacji jądra ze sterownikiem vesafb-tng.


W pierwszej kolejności należy pobrać patch'a do jądra, który umożliwi obsługę tego steronika. Vesafb-tng jest projektem rozwijanym przez polskiego dewelopera Gentoo Linux - Michała Januszewskiego. Dzięki temu sterownikowi można uzyskać w konsoli rozdzielczości niestandardowe (m.in. dla monitorów panoramicznych), których domyślny sterownik vesafb nie obsługuje.


Plik można pobrać ze strony: http://dev.gentoo.org/~spock/projects/vesafb-tng/ nazwa pliku: vesafb-tng-***.patch. Aby vesafb-tng działała poprawnie należy pobrać patch odpowiedni do wersji skompilowanego w systemie jądra.

 

Przygotowanie jądra


Po pobraniu pliku przechodzimy do miejsca przechowywania źródeł jądra i aktualizujemy je patchem wydając polecenie:

cat scieżka/do/vesafb-tng.patch | patch -p1

Aby w kompilować w jądro sterownik wpisujemy:

make menuconfig

i przechodzimy do Device Drivers > Graphics support. Jeśli nie mamy jeszcze w kompilowanego w jądro obsługi framebuffer zaznaczamy Support for frame buffer devices, a następnie VESA VGA graphics support i wybieramy sterownik vesafb-tng, zmieniając przy okazji rozdzielczość konsoli:

 


po czym wychodzimy i kompilujemy jądro poleceniem make. Skompilowanym jądrem zastępujemy aktualne i uruchamiamy ponownie komputer.


Poniżej przykład z obsługa framebuffer:

 

 

Pliki graficzne


Jednym z programów umożliwiających przeglądanie plików graficznych jest fbi. Znaleźć go można pod adresem: http://linux.bytesex.org/fbida/. Po skompilowaniu programu i wszystkich wymaganych bibliotek będzie można przeglądać grafiki m.in. w formatach jpg, gif, png. Do działania programu wymagana jest obsługa framebuffer, w przeciwnym wypadku nic z tego nie będzie. Poniżej przykładowe zdjęcie wyświetlane w konsoli systemowej.

 

 

 

Pliki wideo


Jeżeli można wyświetlić w konsoli pliki graficzne, to można również wyświetlić pliki wideo. Jednym z programów, który to umożliwia jest znany chyba wszystkim użytkownikom linuksa MPlayer. Aby była możliwość odtwarzania plików wideo w konsoli należy skompilować program z obsługą directfb. Uruchomienie pliku video odbywa sie standardowo: mplayer plik.avi Poniżej przykład jak działa obsługa wideo pod konsolą linuksa:

 


Na koniec dołączam jeszcze kilka stron, gdzie można znaleźć informacjie o obsłudze framebuffer:



Copyleft (C) tom000.info 2004-2010. Some rights reserved.