|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English ChineseGB Deutsch Francais Italiano Russian Turkce |
taraf�ndan Dr. B. Thangaraju <balasubramanian.thangaraju(at)wipro.com> Yazar hakk�nda: Dr. B. Thangaraju, Bharathidasan �niversitesi'nden fizik �zerine Ph.D ald� ve Hindistan'da, Hindistan Bilim Enstit�s�'nde be� y�l ara�t�rma asistan� olarak �al��t�. Ara�t�rmalar�n� Saydam ve �letken Oksit (TCO) ince filmler, Spray Pyrolysis, I��k Akustik Teknikleri ve Chalcogenide Camlar�n p- den n- do�ru de�i�imi �zerine yapt�. Uluslar aras� �ne sahip dergilerde 10 tane ara�t�rma yaz�s� bulunmaktad�r. Ayr�ca yapm�� oldu�u ara�t�rmalar�n sonu�lar�n� yediden fazla ulusal ve uluslar aras� konferanslarda sunmu�tur. Halen Hindistan'da Wipro Technologies'te Talent Transformation'da m�d�r olarak �al��maktad�r. Halen Hindistan'da Wipro Technologies'te Talent Transformation'da m�d�r olarak �al��maktad�r. Ara�t�rma alan� ise, Linux �ekirde�i, Ayg�t S�r�c�leri, Ger�ek Zamanl� Linux'tur. T�rk�e'ye �eviri: �zden Ak�nc� <akinci(at)be.itu.edu.tr> Onan G�rel <guren(at)be.itu.edu.tr> ��erik: |
�zet:
Bir ayg�t s�r�c�s� yazmak zorlu ve maceral� bir i�tir. Bir defa
ayg�t, s�r�c�n�n init_module()'� i�inde yer almal�d�r. Yani ayg�tla
ilgili kaynaklar burada bulunmal�d�r. Bir ayg�t i�in en �nemli
kaynaklardan biri I/O portudur. Dinamik olarak ba�lanan s�r�c�lerde,
s�r�c�y� geli�tiren ki�i ayg�t �zerinde kullan�lmayacak port
aral�klar�n� yerle�tirirken dikkatli olmal�d�r. �lk olarak,
s�r�c� hangi port aral�klar�n� kullanacak ve hangileri bo� olacak
tespit edilmelidir. Daha sonra bu portlar ayg�t i�in talep edilmelidir.
Mod�l kernelden ��kar�ld��� zaman, portlar�n bo� olmalar� gerekir.
Bu makalede linux ayg�tlar� �zerinde g�venli portlar�n
yerle�tirilmesinde ya�anan kar���kl�klar tart���lacakt�r.
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);
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Dr. B. Thangaraju, FDL LinuxFocus.org |
�eviri bilgisi:
|
2002-11-26, generated by lfparser version 2.31