31 Temmuz 2008 Perşembe

USBPC

Evimizde şu an 4 dizustu bir de masaüstü bilgisayar var. Hepsini satsan bir de üstüne emektar tarayıcıyı versem, iki göz yaşı, ancak 1000 lira alirim.
Eskiden olsa bir cop yiginindan bahsediyor olurdum ama artik durum baska. Artik islemciler, bana gore, cok coook gelismis durumda. Ben oyle internette gezen iki fal bakan bir kulanici degilim. Kod gelistiririm, resim yaparim arada da oyun oynarim. Yeni programlari da denemekten korkmam ama ne bu yeni programlarin ne de eskilerinin yeni surumlerinin ihtiyaclari gecen yillarda oyle cok artmadi. Yani düsen fiyatlara gore geride kaldi. Eskiden benim icin de ideal pc 1000$ civarindayken artik 500$ bile degil. Dizustu icin dusunursek 1000$lik bir makine beni ucurur :)
Anlayacaginiz benim evdeki coplerde hala hayat var. Bu arada bu 5 bilgisayari 1000/5=200 ytl'den dusunmeyin. Hanimla benim dizustuler, 1000 liranin 750 sini alir. Dizustu olarlardan biri 200MHz oburu de 230 falan. Masaustu 1100 civarı; o zaten idare ediyor. Ustune ubuntu kurdum takiliyor.
Gelelim bizim copleri ne yapacagimiza. Tabii ustlerinde win98 falan kosabiliyorum ama o kadar agir hesap makinelerine ihtiyacim yok :) Bu bilgisayarlar USBPC olacak. Olacak derken cok kesin konuşmayayım; zaman bulursam diyelim.
Simdi USBPC'nin ne oldugunu aciklayayim, google'dan buldugunuz ıvır zıvırla karıştırmayın. USBPC, usb disk gibi usb'den bir pc'ye takilan pc. Simdi pc'ye pc neden takacagiz? Cunku diger pc'nin etinden sutunden, ekranindan, klavyesinden faydalanmak icin.
Soyle dusunun bir dizusutunu, ekrani klavyesi olmayan bir masaustune usb kablo ile bagliyorsunuz ve o disustu bir anda digerinin ekrani, klavyesi, faresi, ses karti, hoperloru, harici diski, gerekirse ag baglantisi oluyor. Usb hafiza cubugu takar gibi sade ve basit. Boylece eski dizustu bir pc olarak degilde bir cevre elemanlar kumesi olarak hayat buluyor.
Simdi gelelim bunu nasil yapacagimiza. Oncelikle ara baglantidan bahsedelim. USB baglantisinda bir taraf kole digeri efendidir. Efendi genelde bilgisayar, kole de cevresel aygitlardir. İki efendi bir usb'de olmaz. İkisini bir kablo ile baglamak icin araya ikisinine kul kole olacak bir araciya ihtiyac vardir. Piyasada veri iletisimi icin kullanilan bu tip kablolar mevcut. Tabii bu kablo ile ozel bir surucu yazilimi kullanmak zorundayız. Bizim durumumuzda bu surucu usbpc ile baglantiya gececek ve o tarafı kendi bilgisayarina usb hub olarak tanıtacak. Boylece normal bilgisayar diger tarafı bir suru usb aygıt takilmis bir usb hub olarak gorecek. Ileride bir tarafa kendini hub olarak tanitan ozel bir kablo ile bu ozel surucuden kurtulabiliriz. Bu da projemizin donanim tarafi :)
Daha sonrasi normal usb kullanimi ile gerceklesecek. Usb aygitlar icin isletim sistemi tarafindan gerekli suruculer yuklenecek ve hepsi kullanima girecek. Usb aygitlarin her birinin ait oldugu bir sinif var: veri deposu, kullanici girdi birimi gibi. Onemli olan standart siniflari kullanmak. Boylece ayri bir surucu saglamadan isletim sisteminin bu aygitlari kullanmasini saglayabiliriz. Usb ekran icin bir standart var mi bilmiyorum ama fare, klavye, disk surucu icin bunlar mevcut.
Simdi daha teknik olarak uygulamaya egilelim. Dizustu makinada hafif bir linux olacak. Boylece farkli farkli aygit suruculeri ile ugrasmak zorunda kalmayacagiz. Biz sadece standart linux surucu arayuzu ile istedigimiz aygitlari surecegiz. Grafik arabirimi icin de X11 olmali. Aslinda ilk basta ubuntu gibi tam takim bir linux'le baslamakta fayda var. Daha sonra proje DSL gibi kucuk bir surume tasinabilir.
Isimize yarayacak acik kaynakli guzel bir proje var: usb/ip. Bu proje usb aygitlari ağ uzerinden paylasmak icin gelistirilmis. Bu proje sayesinde usb kablo ile ugrasmaya baslamadan once usbpc'deki kaynaklari birer sanal usb aygitlara donusturmekle ugrasabiliriz. usb/ip'nin kodu ile ugrasarak oncelikle usbpc'nin klavyesini, usb klavye gibi networkten diger bilgisayara baglariz. Sirasi ile diger aygitlara gecilir.
Onemli sorunlardan bir ekran icin gerekli veri trafigi. Usb 1.1'in bu trafigi zoe kaldirmayacaktir. Dikkat etmemiz gerek standart bir usb ekran surucusu varsa bunun kullandigi protokol. Yani ekran ile haberlesirken veri sıkıştırarak mi gonderiyor. Eger buradaki haberlesme cok agir olacaksa kendi surucumuzu yazmak zorundayiz. Bu surucu vlc gibi bir protokol kullanacaktir. Hatta vlc kodunu kullanabiliriz.
Aygitlarin sanal usb kodlari hazir olunca sira daha once bahsettigim gibi bir kablo almaya geliyor. http://www.linux-usb.org/usbnet/ sayfasinda linux usbnet surucusu icin uygun kablolar siralaniyor. Bu kablolarin linux icin surucusunu bulmak kolay olacaktir. 20ytl'ye kablo satiyorlar. Bunlardan alip ugrasmak gerekiyor. Eger masaustu bilgisayarda da linux varsa ayni surucu ile o taraftaki isleri de halledebiliriz. Daha sonra windows icin de bir surucu hazirlanabilir.
usb/ip projenin isimize yarayacak baska bir yani da istemci makinada sanal bir usb hub yaratmasi. Bu kodu usb kablo surucusu ile bagladigimizda isimizi gorecektir.
Kisaca proje boyle. Benim suan pek ugrasacak zamanim yok. Projeyi hayata gecirmek isteyen olursa destek olmaktan mutluluk duyarim :)