[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  ChineseGB  Deutsch  Francais  Italiano  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Yazarýn Fotografý]
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:

 

Linux Ayg�t S�r�c�leri i�in G�venli Port Ay�rt�lmas�

[Illustration]

�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.

_________________ _________________ _________________

 

Giri�

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.

 

Temel Kavram

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.

 

G�venli Port Tahsisindeki A��klar

�imdi,kernel fonksiyonlar�yla kaynak tahsisat�n�n nas�l yap�ld���n� ve daha sonra kaynaklar�n nas�l serbest hale getirildi�ini g�rece�iz. Bu �rnek yakla��m Linux 2.4 kernel ile uygulanm��t�r.Bundan dolay�,b�t�n y�r�tme sadece Linux i�letim sistemi ve baz� Unix i�letim sistemi �e�itlerinde uygulanabilir.

�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 i�inde tan�mlanm�� makrolard�r.  

Ayg�t Port Tahsisi i�in S�r�c� Program �rne�i

A�a��daki �rnek program dinamik olarak y�klenen ayg�t i�in gereken port tahsisat�n�n yap�lmas�n� a��klamaktad�r.
#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");
}

Bu �rnekte,kar���l�k olmamas� i�in,hata kontrolu ve dinamik tahsisat say�s� kontrol�nden sak�n�lm��t�r.Sadece gereken port ba�ar�l� bir �ekilde tahsis edilmi�tir, bu i�lemde proc dizininden kontrol edilebilir:
$cat /proc/ioports  

S�r�c� i�in Kernel I/O Port Fonksiyon Se�enekleri

Linux port boyutuna ba�l� olan ve I/O portlar�ndan okuma ve I/O portlar�na yazmay� sa�layan bir�ok fonksiyonu destekler. Port geni�li�i 8,16 veya 32 bit geni�li�inde olabilir.Linux kernel <asm/io.h> ba�l��� I/O portlar�na giri�leri sa�layan inline fonksiyonlar� belirler. Okuma(inx) ve yazma(outx) i�in 8 bit,16 bit ve 32 bit portlar ile a�a��daki fonksiyonlar kullan�l�r:



__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);


string versiyonu i�in birden fazla veriyi herhengi bir anda etkin bir �ekilde transfer etmek i�in a�a��daki fonksiyonlar kullan�labilir.


void insb(unsigned int port, void *addr, unsigned long count);
void outsb(unsigned int port, void *addr, unsigned long count);


addr transfer yap�lacak veya transferin yap�laca�� alan�n haf�zadaki yerini g�sterir.count ise transfer edilecek birimin say�s�n� g�sterir.Veri tek porttan tek porta yaz�l�r veya okunur.


void insb(unsigned int port, void *addr, unsigned long count);
void outsb(unsigned int port, void *addr, unsigned long count);

16 bitlik de�erleri 16 bitlik tek porta yazma veya porttan okuma.


void insb(unsigned int port, void *addr, unsigned long count);
void outsb(unsigned int port, void *addr, unsigned long count);

32 bitlik de�erleri 32 bitlik tek porta yazma veya porttan okuma.  

Bilgilendirme

Yazar, yaz�n�n g�zden ge�irmesinden dolay� Talent Transformation, Wipro Technologies, India Mr. Jayasurya V te�ekk�r eder.  

Referanslar

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Dr. B. Thangaraju, FDL
LinuxFocus.org
�eviri bilgisi:
en --> -- : Dr. B. Thangaraju <balasubramanian.thangaraju(at)wipro.com>
en --> tr: �zden Ak�nc� <akinci(at)be.itu.edu.tr>
en --> tr: Onan G�rel <guren(at)be.itu.edu.tr>

2002-11-26, generated by lfparser version 2.31