original in en Dr. B. Thangaraju
en to tr �zden Ak�nc�
en to tr Onan G�rel
Kaynaklar; I/O portlar�, haf�za ve IRQ hatlar�d�r. Bu makalede I/O alt sistemlerinin temelleri ve I/O portlar� ile ba�lant�l� kaynaklar�n payla��m�n�n �nemi anlat�lacakt�r. Ayr�ca, makalede ayg�ttan nas�l port adresi al�naca�� ve port adresinin nas�l bo� b�rak�laca�� da a��klanacakt�r.
Portlar, buslar ve ayg�t kontrol�rleri gibi basit donan�m elemanlar� bir �e�it I/O ayg�tlar�d�r. Ayg�t s�r�c�leri, sisteme i�letim sistemi ve uygulamalar aras�nda standart bir aray�z� sa�lamakla birlikte; bir ayg�t�n I/O alt sistemin aray�z�ne eri�imini de g�sterir. Bilgisayara eklenen pek �ok �e�itte ayg�t mevcuttur. �rne�in; depolama ayg�tlar� (diskler, teypleri CD-ROM ve disketler), insan aray�z cihazlar� (klavye, fare ve ekran), ver iletim cihazlar� (modemler ve a� kartlar�). �ok fazla �e�itte I/O ayg�tlar� olmas�na ra�men, bizim sadece ayg�tlar�n nas�l ba�land�klar�n� ve yaz�l�m�n, donan�m� nas�l kontrol edebildi�ini anlamam�z yeterli olacakt�r.
Bir ayg�t elektronik b�l�m ve mekanik b�l�m olmak �zere iki k�s�mdan olu�maktad�r. Elektronik b�l�me ayg�t kontrol�r� denir. Kontrol�r, sisteme sistem hatt� (bus) arac�l��� ile ba�lan�r. Tipik olarak, �ak��mayan port adreslerinin ayarlanmalar� her bir kontrol�re ba�lanarak yap�l�r. I/O portlar� durum, kontrol, veri giri�i ve veri ��k��� diye adland�r�lan d�rt par�a kay�ttan olu�maktad�r. Durum kayd� host taraf�ndan okunabilen bitlerden olu�ur. Kontrol kayd� ise, host taraf�ndan bir komuta ba�lamak i�in veya ayg�t�n modunu de�i�tirmek i�in yaz�l�r. Ayr�ca, veri giri�i kayd� veri almak i�in ve veri ��k��� kayd� da sistem d���na veri yollamak i�in kullan�l�r.
��lemci ve bir ayg�t aras�ndaki temel aray�z kontrol ve durum kay�tlar�yla belirlenir. ��lemci bir program �al��t�rd��� ve ayg�tla ilgili bir hesaplamaya ge�ti�i zaman, ayg�ta uygun komutlar� �al��t�r�r. Kontrol�r istenilen davran��lar�n kontrol�n� yapar ve sonra durum kayd� i�indeki uygun bitleri ayarlar ve bekler. Operasyonun bitimine kadar ayg�t�n durumunun belli aral�klarla kontrol edilmesi i�lemcinin sorumlulu�undad�r. Mesela, yaz�c� taraf�ndan kullan�lan paralel port s�r�c�s�, normalde yaz�c�n�n ��kt� kabul edip edemeyece�ine bakar. E�er yaz�c� haz�r de�ilse s�r�c� bir s�reli�ine uyur ( bu s�re i�ersinde i�lemci baz� i�e yarar i�lemler yapabilir). Daha sonra s�r�c�, yaz�c� haz�r olana kadar tekrar dener. Bu i�lemler sistemin performans�n� artt�racakt�r. Aksi taktirde sistem, hi�bir �ey yapmadan bekleyecektir.
Kay�tlar I/O uzay�nda belirli adreslere sahiptirler. Bu adresler genellikle sistemin a��n�m zaman�nda (boot time) belirlenirler. A��n�m zaman�nda konfig�rasyon dosyas� i�erisinde bulunan parametreler kullan�larak sistem in�a edilir. Herhangi bir ayg�t eklenmesi ihtimaline kar��, her bir ayg�t i�in belli adres aral�klar� ayr�lm�� olmal�d�r. Yani, �ekirdek var olan ayg�tlar i�in s�r�c�ler i�erir. Ayg�t i�in ayr�lm�� olan I/O aral�klar� proc dizini alt�nda saklan�r. Sisteminizde mevcut olan ayg�tlar�n port adres aral�klar�n� $cat /proc/interrupts. ��kt�n�n ilk s�tunu port aral���n�, ikinci s�tunu ise ayg�t�n sahip oldu�u portu g�sterir. ��letim sistemlerinin baz�lar�, sistem �al��t���nda ayg�t s�r�c� mod�llerini dinamik olarak y�kleme �zelli�ine sahiptirler. Yani sistem �al���rken, sisteme herhangi bir yeni ayg�t eklenebilir ve dinamik olarak eklenen bu ayg�t, ayg�t s�r�c� mod�l� taraf�ndan kontrol edilip sisteme kabul edilebilir.
Ayg�t s�r�c�s� kavram� olduk�a karma��k ve soyut bir kavramd�r. Bu bilgisayar�n yaz�l�m� �zerinde en alt seviyede �al���r. ��nk� ayg�t s�r�c� kavram� tamamen ayg�t�n donan�m �zelliklerine ba�l�d�r. T�m ayg�t s�r�c�leri basit ayg�t t�rlerine g�re d�zenlenmi�tir. Bu t�rler karakter, blok veya a� (network) olabilirler. E�er herhangi bir uygulama bir ayg�ta ihtiya� duyuyorsa; �ekirdek uygun ayg�t s�r�c�s�yle ileti�ime ge�er. Sonra, s�r�c� uygun komutlar� ayg�t �zerinde uygular. Asl�nda ayg�t s�r�c�s� bir �e�it fonksiyonlar serisidir. Bu fonksiyonlar a�, kapat, oku, yaz, ioctl ve llseek gibi kavramlar� i�erirler. Mod�l�n�z� yerle�tirdi�iniz zaman, init_module( ) fonksiyonu �a�r�l�r ve mod�l ��kar�ld��� zaman cleanup_module( ) fonksiyonu �a�r�l�r. Ayg�t kayd�, init_module( ) i�erisindeki ayg�t s�r�c�ne yap�l�r.
Ayg�t init_module( ) i�erisine kaydedildikten sonra I/O portlar�, haf�za ve IRQ sat�rlar� gibi ayg�t kaynaklar� da kendili�inden init_module( ) 'e yerle�irler. Bunlar s�r�c�n�n ayg�t� d�zg�n �al��t�rmas� i�in gereklidir. E�er ayg�t i�in yanl�� bir haf�za adresi atarsan�z; �ekirdek segmentation fault �eklinde hata mesaj� verecektir. I/O portlar�nda yap�lan herhangi bir hatada ise, �ekirdek taraf�ndan wrong I/O port �eklinde bir mesaj verilmeyecektir ve bu yanl�� port atanmas� sonucunda sistemde var olan ayg�tlar aras�nda bir �ak��maya neden olacakt�r. Modul� ��kard���n�z zaman, ana numaralar serbest kal�r ve ayg�t kayd� silinir. B�ylece cleanup_module( ) fonksiyonu ile kaynaklar bo� kal�r.
Ayg�t s�r�c�lerinin en s�k yapt�klar� i� ise I/O portlar�n� okumak ve yazmakt�r. Bundan dolay�, s�r�c�n�z port adreslerinin uygun ayg�t taraf�ndan kullan�ld���ndan emin olmas� gerekir. S�r�c� bundan emin olmak i�in �nce hangi adreslerin kullan�l�p kullan�lmad���n� belirler: s�r�c� kullan�mda olmayan adresleri bulur ve �ekirdekten ayg�t� i�in uygun adres aral���n� belirlemesini ister.
�lk �nce,ayg�t i�in uygun port aral���n�n olup olmad��� a�a��daki kod ile ara�t�r�l�r.
int check_region (unsigned long start, unsigned long len);
Bu fonksiyonun geri d�n�� de�eri istenen port adres aral��� bo� ise s�f�rd�r. Portlar kullan�mda ise geri d�n�� de�eri s�f�rdan k���k bir de�er veya negatif hata kodudur.( -EBUSY or -EINVAL). Fonksiyon iki arg�man al�r: start ard���l b�lgenin ba�lang�c� (veya I/O port aral���n�n ba�lang�c�) ve len aral�ktaki port say�s�n� g�sterir.Port kullan�labilir ise bir defada request_region fonksiyonu hem kontrol hem tahsisat ayn� anda yap�labilir.
struct resource *request_region (unsigned long start, unsigned long len, char *name);
�lk iki arg�man �nceki fonksiyonda g�rd���m�z arg�manlar�n ayn�s�, character t�r�nden g�sterici olan name ise belirtilen port adresinin tahsis edilece�i ayg�t�n ismidir. Bu fonksiyonun geri d�ni� de�eri struct resource t�r�nden g�stericidir. Resource structure <linux/ioport.h> i�inde tan�mlanm��t�r ve kaynak aral���n� tan�mlamak i�in kullan�l�r. Bu yap� a�a��daki format� i�erir:struct resource { const char *name; unsigned long start, end; unsigned long flags; struct resource *parent, *sibiling, *child; };Mod�l kernelden kald�r�ld��� zaman,�nceden kullan�lan port di�er ayg�tlar� kullan�m� i�in bo�alt�lmal�d�r.Bunun i�inde cleanup_module ( ) mod�l� i�indeki release_region ( ) fonksiyonu kullan�l�r. Bu fonksiyonun yaz�l�m�:
void release_region ( unsigned long start, unsigned long len);
�ki arg�man�n a��klamas� �nceki fonksiyonlardaki gibidir. Yukar�da a��klanan �� fonksiyon#include <linux/fs.h.> #include <linux/ioport.h.> struct file_operations fops; unsigned long start, len; int init_module (void) { int status; start = 0xff90; len = 0x90; register_chrdev(254,"your_device",&fops); status = check_region (start, len); if (status == 0) { printk ("The ports are availave in that range\n"); request_region(start,len,"your_device"); } else { printk ("The ports are already in use. Try other range.\n"); return (status); } return 0; } void cleanup_module (void) { release_region(start, len); printk ("ports are freed successfully\n"); unregister_chrdev(254,"your_device");} printk (" your device is unregistered\n"); }
__u8 inb (unsigned int port);
void outb (__u8 data, unsigned int port);
__u16 inw (unsigned int port);
void outw(__u16 data, unsigned int port);
__u32 inl (unsigned int prot);
void outl (__u32 data, unsigned int port);
void insb(unsigned int port, void *addr, unsigned long
count);
void outsb(unsigned int port, void *addr, unsigned long
count);
void insb(unsigned int port, void *addr, unsigned long
count);
void outsb(unsigned int port, void *addr, unsigned long
count);
void insb(unsigned int port, void *addr, unsigned long
count);
void outsb(unsigned int port, void *addr, unsigned long
count);