SORU
27 Mart 2010, CUMARTESİ


Nasıl Linux üzerinde tüm seri cihazları (bunlarla,, .. ttyUSB) açmadan bulmak için?

Kullanılabilir tüm seri port listesi/cihazlar Linux sistemi almak için doğru yolu nedir?

Yani ben üzerinde yineleme tüm cihazlarda /dev/, ben hangileri seri port klasik şekilde, diğer bir deyişle, bu genellikle destekleyici baud oranları ve RTS/CTS akış kontrolü?

Çözüm C kodlu olacaktır

Bu açıkça yanlış yapan üçüncü parti bir kütüphane kullanıyorum çünkü ben soruyorum: sadece /dev/ttyS* üzerinde yineleme gibi görünüyor. Sorun, örneğin, USB-RS 232 adaptörleri tarafından sağlanan) üzerinde seri bağlantı noktası vardır, ve o /dev/ttyUSB* altında listelenmiştir. Ve ** 28, ben okuma zamanı geldiğinde diğer adı boşluk da öyle olacak ki fikir olsun.

Seri aygıtları algılamak için resmi bir yol bulmam lazım. Sorun yok belgelenmiş olması gerekir, ya da ben bulamıyorum.

Tek yönlü /dev/tty* tüm dosyaları açmak ve sadece seri cihazlarda kullanılabilir olduğunu onlara ioctl() belirli bir çağrı olurdu. Bu iyi bir çözüm olurdu ama?

Güncelleme

hrickardskaynak bakmak için önerilen"". setserial Kodu aklımda olan tam olarak ne yapar:

İlk olarak, bir cihaz açar:

fd = open (path, O_RDWR | O_NONBLOCK)

Çağırır sonra:

ioctl (fd, TIOCGSERIAL, &serinfo)

Eğer bu hata döndürüyor Ara, sonra da seri bir cihaz, görünüşe göre.

Benzer bir kod buldumSerial Programming/termiosayrıca O_NOCTTY seçeneği eklemek için önerdi.,

Bu yaklaşım ile bir sorun var:

BSD Unıx üzerinde bu kod (Mac OS X) test ettim, çok da iyi çalıştı.Ancak*Bluetooth yoluyla sağlanan seri cihazlar zaman aşımı hatası ile dönersiniz önce bir süre alır Bluetooth aygıtı bağlanmaya sistem (sürücü) neden olur. Bu sadece cihazın açılış kaynaklanır. Ve benzer şeyleri Linux üzerinde olabileceğini de tahmin edebiliyorum, ideal olarak, cihaz türünü anlamaya açmak gerekmektedir. Ayrıca bir açık olmadan ioctl işlevleri çağırmak için bir yol, ya da bir aygıt açık bağlantı yapılacak yol açmayan bir yolu var mı acaba?

Ne yapmalıyım?

CEVAP
28 Mart 2012, ÇARŞAMBA


/sys dosya sistemi arayışı için bol bilgi içermelidir. Benim sistem (2.6.32-40-generic #87-Ubuntu) öneriyor:

/sys/class/tty

Tüm TTY aygıtları sistem bilinen açıklamalarını verir. Bir örnek kesilmiş!

# ll /sys/class/tty/ttyUSB*
lrwxrwxrwx 1 root root 0 2012-03-28 20:43 /sys/class/tty/ttyUSB0 -> ../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/ttyUSB0/tty/ttyUSB0/
lrwxrwxrwx 1 root root 0 2012-03-28 20:44 /sys/class/tty/ttyUSB1 -> ../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/ttyUSB1/tty/ttyUSB1/

Bu bağlantılardan birini yapın:

# ll /sys/class/tty/ttyUSB0/
insgesamt 0
drwxr-xr-x 3 root root    0 2012-03-28 20:43 ./
drwxr-xr-x 3 root root    0 2012-03-28 20:43 ../
-r--r--r-- 1 root root 4096 2012-03-28 20:49 dev
lrwxrwxrwx 1 root root    0 2012-03-28 20:43 device -> ../../../ttyUSB0/
drwxr-xr-x 2 root root    0 2012-03-28 20:49 power/
lrwxrwxrwx 1 root root    0 2012-03-28 20:43 subsystem -> ../../../../../../../../../../class/tty/
-rw-r--r-- 1 root root 4096 2012-03-28 20:43 uevent

Burada dev dosya bu bilgileri içerir:

# cat /sys/class/tty/ttyUSB0/dev
188:0

Bu büyük/küçük düğüm. Bu kullanıcı dostu adlarını almak için /dev dizin içinde aranır

# ll -R /dev |grep "188, *0"
crw-rw----   1 root dialout 188,   0 2012-03-28 20:44 ttyUSB0

/sys/class/tty dir tüm TTY cihazları içerir, ama bu sinir bozucu sanal terminaller ve sözde terminalleri hariç tutmak isteyebilirsiniz. device/driver bir girişi var sadece o incelemeyi öneriyorum

# ll /sys/class/tty/*/device/driver
lrwxrwxrwx 1 root root 0 2012-03-28 19:07 /sys/class/tty/ttyS0/device/driver -> ../../../bus/pnp/drivers/serial/
lrwxrwxrwx 1 root root 0 2012-03-28 19:07 /sys/class/tty/ttyS1/device/driver -> ../../../bus/pnp/drivers/serial/
lrwxrwxrwx 1 root root 0 2012-03-28 19:07 /sys/class/tty/ttyS2/device/driver -> ../../../bus/platform/drivers/serial8250/
lrwxrwxrwx 1 root root 0 2012-03-28 19:07 /sys/class/tty/ttyS3/device/driver -> ../../../bus/platform/drivers/serial8250/
lrwxrwxrwx 1 root root 0 2012-03-28 20:43 /sys/class/tty/ttyUSB0/device/driver -> ../../../../../../../../bus/usb-serial/drivers/ftdi_sio/
lrwxrwxrwx 1 root root 0 2012-03-28 21:15 /sys/class/tty/ttyUSB1/device/driver -> ../../../../../../../../bus/usb-serial/drivers/ftdi_sio/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigDawsTv

    BigDawsTv

    20 HAZİRAN 2012
  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • Thehalopianoplayer

    Thehalopiano

    4 ŞUBAT 2011