Driver Programlama Hakkında

Başlatan ds01, 18 Şubat 2016, 14:38:05

ds01

Merhabalar, bir cihaza driver programı yapmam gerekiyor, fakat tam olarak nerden ve ne şekilde başlayacağımı bilemiyorum. Nasıl başlayabilirim. Kaynak, kitap öğrenmem gerekenler vs. tavsiyeleriniz olursa çok sevinirim.

Genelde linux kullanılıyor galiba bu işler için, fakat linux'da yapılan sürücü cihaza yüklendiğinde windows tarafından tanınır mı?
Yardımcı olursanız çok sevinirim.

MC_Skywalker

Windows için Microsoft'un tooları (WDK)kullanacaksınız eğer linux için sürücü yazacaksanız linux.

https://msdn.microsoft.com/en-us/library/windows/hardware/ff557573(v=vs.85).aspx bu adresten başlaya bilirsin

ds01

Yani linux'da yazdığımız zaman o cihaz windowsta çalışmaz mı?

t2

#3
Linuxta yazilan driver, windows icin gecerli olmaz. Windows Driver aslinda bir nevi uygulamadir. Uzantisi .sys olsa da bunu exe olarak degistirip tiklayin. Gorunurde bir sey olmaz ama hata cikmaz.

Driver yazmak zor ve pahali iştir.
Usb Custom interface aygit icin,Hazir driver kullanilabilir. Windowsun ucretsiz driver'ı var. winusb diye arayın.


ds01

#4
Teşekkür ederim yorumlarınız için, ben de bu işlere yeni giriyorum, bu şekilde olduğunu bilmiyordum. Nasıl başlayabilirim acaba, C/C++/C#/java hangisi etkili ve kolay olur. Bu işin kitabı, eğitimi vs. tavsiye edebileceğiniz bir kaynak yok mudur öğrenmek için...

tunayk

İşin aslı bir cihaz için değilde çoğu kez PC'ye takılacak olan bir bileşene driver yapmak gerekir.  Cihaz dediğimiz harici aletler USB, ethernet, vb. aslında PC nin standart arabirimlerinden biri ile veya bunlara dönüşen biri ile haberleşir.  Dolayısı ile driver yazmak yerine bu standart portları kullanmak daha hızlı ve ekonomik olacaktır.

PC ile çalışacak makine tasarlarken ilk aklımıza gelen yapacağımız cihazın bir driveri olması gerektiğidir.  Oysa driver mevzuu t2'nin de dediği gibi derin, çetrefilli ve pahalı bir uğraş.  Eğer gerçekten PC'ye PCI, ISA, AGP vb. portlardan takılacak bir kart yapacaksanız o zaman diyecek bişey olmaz.

Diğer konu da windows kosunda ciddi bir sistem bilgi ve tecrübesi gerekli.  Eğer "yapmam gerekiyor" diye tabir ettiğin iş ticari bir iş ve kısa bir termin gerektiriyor ise hiç bulaşma derim.

ds01

Alıntı yapılan: tunayk - 18 Şubat 2016, 18:14:28
İşin aslı bir cihaz için değilde çoğu kez PC'ye takılacak olan bir bileşene driver yapmak gerekir.  Cihaz dediğimiz harici aletler USB, ethernet, vb. aslında PC nin standart arabirimlerinden biri ile veya bunlara dönüşen biri ile haberleşir.  Dolayısı ile driver yazmak yerine bu standart portları kullanmak daha hızlı ve ekonomik olacaktır.

PC ile çalışacak makine tasarlarken ilk aklımıza gelen yapacağımız cihazın bir driveri olması gerektiğidir.  Oysa driver mevzuu t2'nin de dediği gibi derin, çetrefilli ve pahalı bir uğraş.  Eğer gerçekten PC'ye PCI, ISA, AGP vb. portlardan takılacak bir kart yapacaksanız o zaman diyecek bişey olmaz.

Diğer konu da windows kosunda ciddi bir sistem bilgi ve tecrübesi gerekli.  Eğer "yapmam gerekiyor" diye tabir ettiğin iş ticari bir iş ve kısa bir termin gerektiriyor ise hiç bulaşma derim.

       Çok teşekkür ederim, bu ayrıntılı bilgi için. Evet ticari bir iş, çok da tecrübem yok malesef. Fakat bir şekilde öğreneceğiz mecburen. Biraz daha ayrıntıyı kavradıktan sonra fikirlerinizden tekrar yararlanmak isterim. İyi akşamlar...

ZZombie

Driver yazma söz konusu ile ister Linux ister Windows altında olsun C++ ile çalışmanız gerekir.
Temel haberleşme kütüphaneniz bunun üzerinde olacaktır. Fakat arkadaşların da belirttiği gibi Windows ile Linux tamamı ile farklıdır. Yazdığın kodu soyutlamada ne kadar iyi isen belli oranda aynı fonksiyonları hem Windows hem Linux içinde kullanabilirsin. Ki daha burada 32bit 64bit ve farklı işletim sistemi sürümleri (Win7, Win8, Win10)konusuna hiç girmedik.

Ayrıca şunu da belirteyim. İsterseniz 10 yıllık masa üstü uygulama yazma tecrübeniz olsun. Driver yazma söz konusu olunca işlerin hiç te göründüğü gibi olmadığını fark edeceksiniz. Zira hem bilgisayarın donanım ile haberleşme rütünlerini hem de driver i yazdığını cihazın donanım haberleşme rutinlerini çok iyi bilmeniz gerekecek.

ds01

Alıntı yapılan: ZZombie - 18 Şubat 2016, 20:15:21
Driver yazma söz konusu ile ister Linux ister Windows altında olsun C++ ile çalışmanız gerekir.
Temel haberleşme kütüphaneniz bunun üzerinde olacaktır. Fakat arkadaşların da belirttiği gibi Windows ile Linux tamamı ile farklıdır. Yazdığın kodu soyutlamada ne kadar iyi isen belli oranda aynı fonksiyonları hem Windows hem Linux içinde kullanabilirsin. Ki daha burada 32bit 64bit ve farklı işletim sistemi sürümleri (Win7, Win8, Win10)konusuna hiç girmedik.

Ayrıca şunu da belirteyim. İsterseniz 10 yıllık masa üstü uygulama yazma tecrübeniz olsun. Driver yazma söz konusu olunca işlerin hiç te göründüğü gibi olmadığını fark edeceksiniz. Zira hem bilgisayarın donanım ile haberleşme rütünlerini hem de driver i yazdığını cihazın donanım haberleşme rutinlerini çok iyi bilmeniz gerekecek.


Teşekkür ederim, yorumunuz için, açıkçası bahsettiğiniz gibi bir tecrübem yok, fakat bu kadar zor olduğunu da bilmiyordum. Halledemez miyim sizce. Bir de dediğiniz gibi zor olan böyle birşeyi öğrenmenin ve uygulamanın geri dönüşü çekilen emeği karşılar mı? Sanırım Türkiye'de çok fazla bu alanda uğraş yok. Gerekli olmadığından mı kaynaklanıyor.

ZZombie

Ne yazık ki emeğin geri dönüşü konusunda çok iç açıcı olamayacağım. Ülkemizde donanım üretimi olmadığı için driver yazma konusunda bir talep ve çalışma da yok (var da yok gibi diyebiliriz).
Fakat "Ben şu şu driveri yazdım." diyen programcıyı görsem "Usta saygılar." der eğilirm önünde.
NOT : 36 yıllık hayatımda 1 tane Alman ile tanıştım driver yazan. Ki çok ciddi bir yazılımcı çevrem var. Var gerisini sen düşün.

t2


ds01

Alıntı yapılan: ZZombie - 18 Şubat 2016, 20:57:03
Ne yazık ki emeğin geri dönüşü konusunda çok iç açıcı olamayacağım. Ülkemizde donanım üretimi olmadığı için driver yazma konusunda bir talep ve çalışma da yok (var da yok gibi diyebiliriz).
Fakat "Ben şu şu driveri yazdım." diyen programcıyı görsem "Usta saygılar." der eğilirm önünde.
NOT : 36 yıllık hayatımda 1 tane Alman ile tanıştım driver yazan. Ki çok ciddi bir yazılımcı çevrem var. Var gerisini sen düşün.

Anladım hocam çok teşekkür ederim bu bilgiler için, benim için çok aydınlatıcı oldu, sağolun...


Alıntı yapılan: t2 - 18 Şubat 2016, 21:08:46
Driver yazmaya gerek yoook.  Winusb kullanın!

mesaj birleştirme:: 19 Şubat 2016, 11:09:55

https://github.com/mentatpsi/Microchip/tree/master/USB/Device%20-%20WinUSB%20-%20Generic%20Driver%20Demo/WinUSB%20Simple%20Demo%20-%20PC%20Application%20-%20MS%20VC%2B%2B%202005%20Express

Winusb sayesinde sıfır bir donanımı tanıtabiliyor muyuz acaba?

t2

evet tanıtıyoruz.

Sıfır donanım yaptınız. bunun USB aygıt olduğunu varsayıyorum.
USB aygıtın sınıfları olur. mesela standart sınıflar HID, joystick vs.. bunları zaten Windows tanır.
Öyle bir aygıt yaptınız ki sınıfı Custom Class. yani standard dışı sınıfı olsun. FT232 entegre gibi.
Bu aygıtın VID ve PID denen tanımlayıcıları vardır.

Daha önce dünya üzerinde hiç kullanılmamış yeni  VID ve PID belirlediniz. Custom Class   aygıtı yaptınız. bilgisayara taktınız. aygıtı windows tanımaz. işte buna driver gerek.  Winusb  paketi alıp içini editliyoruz VID ve PID sizin yeni belirlediğiniz değerler olacak. Sonra  driver yükleniyor. dört başı mamur diriver. Aygıt yöneticisinde evrensel  seriyol kısmında soru işareti veya ünlem yok. sizin belirlediğiniz o güzel isim görünüyor. örneğin "yeşil çiçek aygıtı"

driver tamam. uygulama nasıl yazılacak cihazdan gelen bilgi nasıl okunacak nasıl bilgi gönderilecek? Winusb demoları var. DLL hazır. oradan yapıyoruz. ücretli ücretsiz komponentler açık kodlar mevcut.


Daha da iyisi aygıtı HID olarak yapmaktır. özel driver geremez. windows zaten tanır.

tunayk

Bu arada yapılacak cihazın fiziksel arabirimi ne olacak hiç bahsetmemişsin. Usb, firewire, sata, ethernet?

Eğer usb ise belirtildiği gibi winusb iyi bir çözüm olabilir

ds01

#14
Alıntı yapılan: t2 - 18 Şubat 2016, 21:23:44
evet tanıtıyoruz.

Sıfır donanım yaptınız. bunun USB aygıt olduğunu varsayıyorum.
USB aygıtın sınıfları olur. mesela standart sınıflar HID, joystick vs.. bunları zaten Windows tanır.
Öyle bir aygıt yaptınız ki sınıfı Custom Class. yani standard dışı sınıfı olsun. FT232 entegre gibi.
Bu aygıtın VID ve PID denen tanımlayıcıları vardır.

Daha önce dünya üzerinde hiç kullanılmamış yeni  VID ve PID belirlediniz. Custom Class   aygıtı yaptınız. bilgisayara taktınız. aygıtı windows tanımaz. işte buna driver gerek.  Winusb  paketi alıp içini editliyoruz VID ve PID sizin yeni belirlediğiniz değerler olacak. Sonra  driver yükleniyor. dört başı mamur diriver. Aygıt yöneticisinde evrensel  seriyol kısmında soru işareti veya ünlem yok. sizin belirlediğiniz o güzel isim görünüyor. örneğin "yeşil çiçek aygıtı"

driver tamam. uygulama nasıl yazılacak cihazdan gelen bilgi nasıl okunacak nasıl bilgi gönderilecek? Winusb demoları var. DLL hazır. oradan yapıyoruz. ücretli ücretsiz komponentler açık kodlar mevcut.


Daha da iyisi aygıtı HID olarak yapmaktır. özel driver geremez. windows zaten tanır.

Hocam çok teşekkür ederim, gerçekten çok faydalı oldu bu bilgiler, emeğinize sağlık..