/* 
  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