6 Temmuz 2015 Pazartesi

TTY

Bu yazı ile ilgili Linux Dosya Sistemi başlıklı yazıyı okuyabilirsiniz.

Giriş
Devpts'i anlamadan önce TTY konusunu anlamak gerekir. Aşağıdaki yazıda önce TTY anlatılıyor. Daha sonra pts yani pseudo (virtual) terminal sistemi anlatılıyor.

TTY Nedir ?

Kelime anlamı olarak TeleTypewriter demek. Tele Yunanca'da uzak (telefondaki gibi.) anlamına gelir. Typewriter ise daktilo. Yani uzak daktilo demek. Eskiden Unix'lere kablo ile bağlı bir çok daktilolar varken icat edilmiş bir kelime.

Günümüzde işletim sisteminde terminal olarak işlev görebilen tüm device'lara erişim için kullanılan alt sisteme TTY denilmektedir. Yani TTY artık fiziksel bir cihaz yerine gerçek veya sanal terminal olarak düşünülmeli.

Bir çok TTY device bulunabilir. Örneğin :

/dev/tty0 : Sanal consol gibi (virtual console.)
/dev/pty1 : Pseudo Terminal
/dev/ttyS0 : Seri terminal (COM1 mesela)
/dev/ttyUSB0 : USB seri terminal

Ubuntu'da 6  tane sanal consol var. Ctrl + Alt + F1'den Ctrl + Alt + F6'ya kadar olan tuşlar ile erişilebilirler.

Sanal konsollardan genelde 6 tanesi text terminali yedincisi ise X Window terminalidir. 64 taneye kadar sanal konsol açma imkanı olabiliyormuş diye okudum.


TTY bir Karakter Device'tır

TTY device'larını ls -l /dev komutuyla görebiliriz. Bu komut ile bakınca aşağıdakine benzer bir görüntü elde ederiz.

Soldaki kırmızıyla işaretlenmiş c harfleri bu device'ın bir character device olduğunu gösterir. Sağdaki kare ise device'ların major ve minor numaralarını gösterir. Burada yazdığına göre major number device'ın hangi alt sistem tarafından yönetildiğini gösteriyor. Alt sistemler tty ve audio olabilirler. Minor numara ise belirtilen alt sistemdeki hangi device driver'ın kullanılacağını belirtir.

Kernel bu numaralarda bakarak bir device'a read veya write işlemi yapılınca device driver içindeki hangi metodu çağıracağını bilir. Aşağıdaki şekli buradan aldım ve bu durumu çok güzel açıklıyor.


Arzu edenler Linux Device Drivers sayfasındaki Char Drivers başlıklı yazıyı daha detaylı bilgi için okuyabilirler.

TTY Detayları

TTY konusuyla ilgili olarak The TTY demystified başlıklı yazı da çok bilgilendirici.

TTY alt sistemi de kendi içinde 3 bölümden oluşmaktadır.
1. Device Driver
2. Line Disclipline
3. Character Driver
Aşağıdaki şekili buradan aldım ve 3 katmanı gayet güzel gösteriyor. Kutuların içinde yazan device isimleri bana pek doğru gibi gelmedi ancak katmanları gösterdiği için almanın faydalı olacağını düşündüm.


Her TTY ile bir Line Discipline ilişkilidir. Line Discipline değiştirmek için aşağıda anlatılan termios yapısı kullanılabilir.

stty komutu
stty komutu ile terminal kontrol edilebilir. tty ayalarını görmek için şöyle yaparız.
$ stty < /dev/tty..      (where tty... is the device file you are listening) 
Çıktı olarak ayarları görürürüz..
speed 9600 baud; line = 0;
-brkint -imaxbel
baud rate atama
Şöyle yaparız.
$ sudo stty -F /dev/tty... 9600    (or whatever baud rate number)
intr seçeneği
Ctr+C kesme karakteri Ctrl+B ile değiştirilmek istenirse
stty intr ^B çalıştırılır.


Shell (Kabuk) İle Çalıştırılan Programlar TTY ile Otomatik Olarak İlişkilendirilir
Konuyu Shell ve TTY başlıklı yazıya taşıdım.

Bu yazı ile ilgili olarak Posix Standart Streamleri başlıklı yazıyı okuyabilirsiniz.

Eğer bir file descriptor'ın tty olup olmadığını kontrol etmek istersek isatty() metodu kullanılabilir. Örnek:
#include <unistd.h>
...
if (isatty(STDOUT_FILENO))
  error("redirect output.");

Seri Port Cihazları
Konuyu Seri Port API'si başlıklı yazıya taşıdım.

USP Port TTY Cihazları
Bu konu hakkında çok bilgim yok. Ancak USB cihazlarının çoğu /dev/ttyUSB0 /dev/ttyUSB255 aralığında veya /dev/ttyACM0 olarak görünüyorlar. ACM ile biten USB cihazları artık bir çok bilgisayardan kullanılmayan RS-232 gibi seri port çıkışlarını taklit etmek için kullanılıyor. Burada da /dev/tty.usbserial kullanılmış.


Devpts
Devpts yazısına taşıdım.

2 yorum:

  1. write yaparken yazma yapabiliyorum ama read de sonuç 0 a donuyor ve hiç bi r karekter okumuyor. Neden olabilir.

    YanıtlaSil
    Yanıtlar
    1. read 0 dönüyorsa okuyacak veri yok anlamına gelir.

      Sil