linux çekirdek modülü - usb sürücü yazılımları

Başlatan hyr, 31 Ekim 2014 - 20:52:17

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

hyr

Merhaba, benim bir gpio modülü donanımım var. Donanımı kullanarak linux tabanlı gerçek zamanlı bir sürücü yapıyorum. Gerçek zamanlı olması için xenomai yaması kullanılacak. Donanımın kaynak kodu elimde olsaydı, kullanılan adımları xenomai fonksiyonları ile yapacaktım. Olmadığı için benim sürücüyü baştan yazmam gerekiyor. Bunun için bana örnek gösterebilecek olan var mı? (Donanım için usb sürücü kodu). Ayrıca bu sürücü için neleri kodlamam gerektiğini bilmiyorum. open,close,write,read'i kodlamam yeterli mi?

Donanımı bilgisayara takınca /dev/ttyACM0 adında dosya oluşturuyor(belki vereceğinizi bilgiler için lazım olur). Donanımın kullanıcı klavuzuda burda -> http://www.numato.com/productdoc/usbgpio16/16ChannelUSBGPIOModuleV7.pdf

Sanal bir aygıt oluşturup ona aygıt sürücü ve usb sürücü  yazmayı biliyorum. Ama fiziksel bir cihazla nasıl olacak onu tam bilmiyorum. Şurda bir usb sürücü örneği mevcut -> http://www.linuxjournal.com/article/7353?page=0,1

if


hyr

Alıntı yapılan: if - 31 Ekim 2014 - 23:51:00
@hyr, bu aygıt Linux tarafından tanınıyor mu? Gerçek zamanlı sürücü nedir?

http://lwn.net/images/pdf/LDD3/ch13.pdf
http://tali.admingilde.org/linux-docbook/writing_usb_driver.pdf

aygıt linux tarafından tanınıyor. linux işletim sistemi isteklerimizi anında karşılamadığı durumlar olabiliyor. Xenomai RTDM(real time driver model) aygıt ile linux kerneli arasına girip isteklerin anında yapılmasını sağlıyor.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 01 Kasım 2014 - 02:39:01

Alıntı yapılan: if - 31 Ekim 2014 - 23:51:00
@hyr, bu aygıt Linux tarafından tanınıyor mu? Gerçek zamanlı sürücü nedir?

http://lwn.net/images/pdf/LDD3/ch13.pdf
http://tali.admingilde.org/linux-docbook/writing_usb_driver.pdf

@if, donanım modulünde  analog input/output pinleri var. Bunlara kendim kodlayarak nasıl okuma/yazma işlemi yapabilirim bilgin var mı?

Amenofis

Gerçek zamanlı sürücüden kastın tam olarak nedir bilmiyorum ama datasheet inde yazdığına göre cihaz ile haberleşmek oldukça basit görünüyor. Programı yazıp servis olarak arkaplanda çalışmasını sağlarsan zaten sürücü gibi davranır. Cihaz seri port emulasyonu yaptığı için aynen seri porta yazar gibi yazacaksın. Bunun için düşük seviye kernel fonksiyonları var şuradaki gibi: http://en.wikibooks.org/wiki/Serial_Programming/Serial_Linux

Ya da daha kolayı Qt Serial modülü var. Kütüphane bağımlılığı sorun olmazsa işini çok kolaylaştırır. http://qt-project.org/doc/qt-5/qtserialport-index.html
Cihazda 16 adet gpio varmış. 4. pini set eden kod şunun gibi oluyor Qt de.

QSerialPort cihaz("/dev/ttyACM0");
cihaz.open(QIODevice::ReadWrite);

char komut[20] = "gpio set 4";
int len = strlen(komut);
komut[len] = 13;

cihaz.writeData(komut, len + 1);

Datasheet te yazdığına göre sonlandırma karakteri NULL değil CR (ascii 13) imiş. Bu yüzden null un üzerine CR yazıyoruz.

hyr

@Amenofis, evet cihazla haberleşmek dediğin gibi kolay. Benim sorunum bu kısımda değil. Senin yazmış oldugun kod parçası gibi benim cihazla haberleşen bir kodum var. Ama ben bu kodu gerçek zamanlı hale getirmeye çalışıyorum, yani RTDM modulü ile yazacağım. Ama sadece kullanıcı seviyesinde mi kod yazmalıyım bundan emin değilim. Eğer bir kernel odül yazmam gerekecekse bunun içinde neleri implement etmeliyim? open,close,read,write methdoları için bir usb driver kodlamam yeterli mi cihazla haberleşmek için? Default olan driver'i kullanmamalıyım gerçek zmaanlı olması için.

Amenofis

Gerçek zamandan kastının ne olduğunu hala çözemedim. Kullandığımız linux çekirdeği gerçek zamanlı değil ki. Bahsettiğin şeyleri arattığımda gömülü sistemlerle alakalı şeyler çıktı haliyle.

Tam olarak nasıl çalışmasını istiyorsun ki normal haberleşme işini görmüyor? Yani çok özel bir durum mu var acaba merak ettim.

hyr

Alıntı yapılan: Amenofis - 02 Kasım 2014 - 00:43:42
Gerçek zamandan kastının ne olduğunu hala çözemedim. Kullandığımız linux çekirdeği gerçek zamanlı değil ki. Bahsettiğin şeyleri arattığımda gömülü sistemlerle alakalı şeyler çıktı haliyle.

Tam olarak nasıl çalışmasını istiyorsun ki normal haberleşme işini görmüyor? Yani çok özel bir durum mu var acaba merak ettim.

Zaten xenomai bir kernel yaması oluşturuyor bunun için. özel durum oldugundan değilde yapacağımız işin amacı bu :)

if

@hyr, ben ne bir programlama dili bilirim ne de çekirdek geliştiriciliğini:) Sadece size yardımcı olma adına soruyorum, olur da bir cevap bulurum diye. Fakat kafam daha da karıştı. Şimdi, bu Xenomai dediğiniz şey bu[1] mu? Oysa, orada iki çekirdek kullanan bir sistem olduğundan ve uygulama geliştirmeden bahsediyor. Fakat sitede çekirdek sürücüsü yazmaya dair bir şey göremedim ben. Xenomai size gerkli ortamı sağladıktan sonra bir usb sürücüsü yazmak kalmıyor mu sadece?

İnigilizce'niz varsa cevap bulma olasılığınız benim cevap bulma olasılığımdan çok daha yüksek.

[1] http://xenomai.org/

hyr



@if, Evet dedikeleriniz doğru ama benim donanımım xenomai tarafından desteklenmiyor. Bu yuzden onun diğer donanım yaptığı çekirdek sürücüsü benim yapmam lazım.