/*
Bu belgenin telif haklar� Necati Ersen ���EC�'ye aittir.
K�k: http://acikkod.org
�lk bask�: 2004-02-25
Son de�i�iklik: 2004-02-25
Bu d�k�man A��kkod.ORG Belge Yaz�m ve Da��t�m Lisans� ile da��t�lmaktad�r.
*/
Linux Ayg�t S�r�c�leri - B�l�m 2 -
Linux'de ayg�tlara eri�mek, aynen bir dosyaya eri�mek gibidir.
Sistemin ayg�tlara eri�irken kulland��� �zel dosyalar /dev dizini alt�nda
bulunurlar.
Linux'de iki �e�it ayg�t bulunmaktad�r. Karakter ayg�tlar, klavye, mouse gibi,
ve blok ayg�tlar, hard disk, tape gibi.
Karakter ayg�tlar 'c' ile, blok device'lar de 'b' ile belirtilmistir.
siseci:~# ls -al /dev/psaux
crw-rw-rw- 1 root sys 10, 1 Jan 1 01:05 /dev/psaux
siseci:~# ls -al /dev/hda1
brw-r----- 1 root disk 3, 1 Apr 28 1995 /dev/hda1
/dev dizinine bakt���m�z zaman 's' ve 'p' ile belirtilmi� �zel dosyalar oldu�unu
g�rmekteyiz.
srw-rw-rw- 1 root root 0 Jan 1 00:01 log=
prw------- 1 root root 0 Jan 1 00:24 gpmdata|
Burada 's' ile belirtilen 'log=' dosyas�, bu dosyan�n bir soket oldu�unu, 'p'
ile belirtilen 'gpmdata|' ise bu dosyan�n bir pipe dosyas� oldu�unu g�sterir.
Bu konu ile ilgili a��klamalar� man sayfalar�nda bulabilirsiniz.
Major ve Minor Numaralari
Bu yaz�m�zda karakter ayg�tlar� �zerinde �al��aca��z. Ancak soylenenlerin
bir �o�u blok ayg�tlar i�in de ge�erli olacakt�r.
crw-rw-rw- 1 root sys 1, 3 Jul 18 1994 /dev/null
crw-rw-rw- 1 root sys 1, 5 Jul 18 1994 /dev/zero
Burada null ve zero ayg�tlar�n�n ikisininde karakter ayg�t� oldu�u sat�r�n ilk
karakteri olan 'c' den anla��lmaktad�r. Ancak burda g�ze �arpan iki numara
bulunmaktad�r.
null i�in 1 ve 3, zero i�in 1 ve 5.
Burada 1, her iki ayg�t i�inde major numaras�, 3 ve 5 de ayg�tlar�n minor
numaralar�d�r.
Peki nedir bu major ve minor numaralar�?
Major numaras� ayg�t�n s�r�c�s�n� gostermek i�in kullan�lmaktad�r. Her s�r�c�,
ilk y�klendi�inde (insmod), ayg�t�n major numaras�n� kullanarak bu ayg�tla
ilgli i�lemlerin kendi �zerinden yap�laca��n� g�stermek i�in ayg�t� kay�t
(register) eder. Driver bellekten at�l�rken ( rmmod ), bu ayg�t� unregister
eder ve art�k ayg�t a ula�mak istedi�imiz zaman bu s�r�c�y� kullanamay�z ve
major numaras� bo�a ��km�� olur. Mod�l bellekten at�l�rken ayg�t�n unregister
edilmesi gerekti�i unutulmamal�d�r.
Minor numaras�n� ise, sadece ayg�t�n s�r�c�s� (driver) kullan�r, kernel'in
ba�ka par�alar� minor numaras�n� kullanmazlar ve sadece bu s�r�c� �zerinden
ula��l�r. Minor numaras�, ayn� tip ayg�tlar�n birbirlerinden ayr�lmas�n�
sa�lamakta kullan�l�r. Yukar�daki �rnekte null ve zero ayg�tlar� ayn� s�r�c�
taraf�ndan y�netilir. Ayn� harddiskin farkl� bolumleri de farkl� min�r
numaralar� i�in g�zel bir �rnektir. hda1, hda2 vs.
Kernel 2.0, 128 tane farkl� ayg�t destekelmektedir. Bu say� 2.2 ve 2.4 serisi
kernel ile 256 ya ��kar. Bunun anlam� 2.2 yada 2.4 serisi kernel ile farkl�
256 tane major numaras� kullanabilece�imizdir, ancak 0 ve 255 gelecekte
kullan�lmak �zere (for future use) ayr�lm��t�r.
Minor numaralar� da, 0-255 aras�nda de�i�mektedir.
Bir s�r�c�, belle�e y�klenip �al��t�r�ld���nda register etmesi gereken ayg�t�n
sadece major numaras�n� sisteme bildirir. Minor numaras�n� ise kendisi
kullan�r.
Daha �nce de belirtti�imiz gibi, Linux'te bir ayg�ta eri�mek i�in /dev dizini
alt�nda o ayg�t� simgeleyen blok yada karakter tipinde, �zel bir dosya
olu�turulmal�d�r. Bu dosyalar� olu�turmak i�in mknod u kullan�r�z.
mknod, 4 farkl� parametre al�r.
Birinci parametre olu�turulacak dosyan�n ismidir, null, hda1, psaux gibi.
Ikincisi, olu�turulacak dosyan�n simgeledi�i ayg�t�n karakter(c) mi yoksa
blok(b) mu oldu�udur. ���nc� ve d�rd�nc� parametreler ise ayg�t�n major ve
minor numaralar�d�r.
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
mknod /dev/bdevice c 201 0
mknod /dev/hda1 b 3 1
Burada, null (c,1,3) , zero (c,1,5) , hda1 (b,3,1) ve bdevice (c,201,0)
�eklinde 4 tane farkl� ayg�t� simgeleyen dosyalar olu�turuluyor.
Sistemde s�r�c�s� y�klenmi� ayg�tlar� g�rmek i�in /proc/devices dosyas�na g�z
atabilirsiniz.
Character devices:
1 mem
2 pty
3 ttyp
...
Block devices:
1 ramdisk
2 fd
3 ide0
...
Major numaralar�n� verirken dikkat edilmesi gereken bir nokta, verilecek
major numaras�n�n kullan�lm�yor olmas�d�r. Kernel taraf�ndan kullan�lan ve
sabit olan major numaralar� /usr/src/linux/Documentation/devices.txt dosyas�nda
belirtilmi�tir. Ancak yerel kullan�mlar i�in 60-63, 120-127, 240-254 aras� bo�
b�rak�lm��t�r.
S�r�c�ler
S�r�c�ler, sisteme ba�l� bir ayg�t�n, i�letim sistemi ile konu�abilmesini
sa�larlar. ��letim sisteminin isteklerini ve cevaplar�n� ayg�ta, ayg�t�n istek
ve cevaplar�n� da i�letim sistemine bildirirler. Bir nevi terc�manl�k yaparlar.
��letim sistemi, ayg�ttan okuma-yazma(read-write) yapmak, ayg�t� a��p-kapatmak
(open-close) gibi i�lemler i�in s�r�c�leri kullan�r. Her s�r�c�de, i�letim
sistemi taraf�ndan g�nderilen istekleri yerine getirip, ayg�ttan d�nen
sonuclar� i�letim sistemine g�nderecek fonksiyonlar bulunmaktad�r.
Ses kart�n�z� d���n�n. E�er sisteme tan�t�lmam��sa hi� bir �ekilde
kullanamay�z. Ama s�r�c�s�n� y�kledi�imiz zaman, kullan�ma haz�r hale
gelmi�tir.
Yaz�m�n�z�n ikinci b�l�m�nde, null ayg�t�n�n s�r�c�s�n� ve �rnek sanal bir
ayg�t olu�turup, bu ayg�t�n s�r�c�s�n� yazaca��z.
Not: Yaz�n�n 1nci b�l�m�nde olan bilgiler 2.4.22 kernel ile test edilmi�tir.
Kaynaklar:
1. Linux Kernel Kaynak kodlar� (v2.2)
2. Linux Device Drivers, 2nd Edition ( Alessandro Rubini & Jonathan Corbet )
3. Understanding the Linux Kernel (Daniel P. Bovet & Marco Cesati )
4. Standalone Device Drivers in Linux ( Theodore Ts'o )
5. Kernel Projects For Linux (Gary Nutt)
Necati Ersen SISECI
25 �ubat 2004