Yeni başlayanlar için BeagleBoard (1. Kısım)

2010′un ilk yazısını yazmaktayım. Aslına bakarsınız çok yazıyorum (kişisel defterime) ve bir çok bilgi öğreniyorum, fakat nedense bunları gelip de buraya yazmıyorum. Her zamanki gibi bu da geçer diyelim ve yolumuza devam edelim :)

Bu yıl okulum bitiyor, şurada 2 ayım kaldı (Evet zaman çabuk geçiyor, bu yaz da bu blog’un 4′üncü yılı olacak :) ). Okul biterken de, çoğu mühendislik bölümleri gibi, bizim de bitirme projemiz var (Daha önce USRP projesi vardı, o değişti). Arkadaşım Süleyman ile DVB-T2 alıcısı ve vericisi üzerinde çalışıyoruz. Bu DVB-T2 konusu çok karmaşık olduğundan ona hiç girmiyorum (ilgilenenler için: Input Processing ve BICM kısımları kodlandı).

Bu yazdığımız kodları, BeagleBoard üzerinde çalıştıracağız, aslında üzerindeki DSP çipi kullanacaktık, fakat projenin zor olması ve vakit olmayışından real-time olmayacak alıcılar ve vericiler. ARM üzerinde Angstrom dağıtımı çalışacak. Octave, bir takım küçük betikler sayesinde de proje için geliştirdiğimiz algoritmaları çalıştıracağız. Bakalım sonuç nasıl olacak.

Aşağıda Amerika’dan TI tarafından kazandığımız kartı görebilirsiniz:

Bir tanesini de Türkiye Resmi TI kanalı tarafından aldık. Her iki tarafa da teşekkür ediyorum. Bu cihazlar geldi gelmesine, fakat alırken  sadece kartın kendisi geliyor. Diğer tüm kabloları ve eşyaları siz almanız gerekiyor.

Kartın özelliklerini biliyorsunuzdur  (bundan sonra BB diye devam edeceğim), eğer bunu okuyorsanız, zaten almışsınızdır ve yavaş yavaş ne yaparım, nasıl ilerlerim aşamasındasınızdır. Bize bu kartlar geldiğinde, bir liste çıkarmıştık. Soru şuydu, neler alınmalı ? Kısa bir araştırma’dan sonra şunlara karar verdik(fiyatlarını da yazıyorum):

  1. Güç kaynaklı USB-HUB (15 Lira)
  2. 5 Volt Güç kaynağı (800mA-1000mA) (10 Lira)
  3. Usb Klavye ve Usb Fare
  4. HDMI to DVI kablosu (15 Lira)
  5. 2-3 tane USB uzatma kablosu (10 Lira)
  6. RS232 dişi başlık (2-3 Lira)
  7. 2 tane 3′lü soket ve bunlarla beraber de kablo (1-2 Lira)
  8. USB to RS232 cihazı (15 Lira)
  9. USB Ethernet kablosu (15 Lira)
  10. En az 4gb’lik SDHC hafiza kartı (30 Lira)

Bu liste’de şunlara dikkat edin.

  • Usb Hub alacaksanız kesinlikle güç kaynaklı alın, bu BB’de akım çok sorunlu, bir tane USB girişi var ve fareydi, klavyeydi derken bir sürü USB’li cihaz takacaksınız. Her biri akım çekeceğinden, cihaz’da sorunlar başlayacak.  
  • Güç kaynağı alırken, kesinlikle aldığınız yerde test etirin, içinde regulatör var mı diye sorun, 5 volt diye alırsınız, fakat 5.3 volt verir, cihazı çöpe atarsanız söyleyeyim(BB maksimum 5.2 V destekliyor). Olmadı 7805 gibi bir regülator takabilirsiniz bu güç kaynağına, ama onu da tavsiye etmem (güvenemiyorum çünkü, birde akım sınırlayıcı yok bunlarda). Olmadı 723 alıp onu da kullanabilirsiniz, bunda akım’ı da sınırlayabilirsiniz. Ama bu kadar abartmaya gerek yok bence. Kaliteli bir güç kaynağı buldunuz mu yeterlidir. Onun dışında 1A oluyor genelikle bu güç kaynakları, biz ilk başta 1A çok olacağından biraz korkmadık değil, çünkü 600mA civarında bir şey iyi olur demişlerdi, fakat herhangi bir sorun çıkmadı bizde.O yüzden bir şey diyemeyeceğim o yüzden.
  • USB uzatma kabloları kesin alın, çok işinize yarayabilir.
  • BB’nin üzerinde bir RS232 serial soketi var. Buradan bilgisayarınzıda RS232 girişi varsa doğrudan bağlayabilirsiniz. Onun için aşağıdaki resimdeki gibi bir kablo gerekiyor:
    BeagleBoard RS232 Seri Kablosu
    Peki biz böyle bir şey bulabildik mi ? Evet, doğru bildiniz, bulamadık :) Biz de gittik kendimiz yaptık. Bunun için RS232 ve BB arasındaki kablo düzeneğine baktık, aşağıda düzeneği görebilirsiniz:

    Yaptığımız kablo da aşağıdaki fotoğraftan görülüyor. 10′lu soket bulamadığımızdan iki tane 3′lü aldık o şekilde yaptık. Bu şekilde yaparsanız sorun çıkmaz:

    Bunla uğraşamam diyorsanız, gidip Usb to RS232 cihazı alabilirsiniz. USB üzerinden iletişim sağlayabilirsiniz. Fakat dikkat edin ki başı dişi olsun, yoksa bilgisayara takamazsınız bizimki gibi :)

  • HDMI to DVI kablosunu aldınız, eve geldiniz, baktınız ki sizde DVI girişi yok ekranda. Herkesin yaptığı gibi başına DVI to VGA dönüştürücü takıyorsunuz. Evet, bunu yapmayın ! BB analog sinyallerini kabul etmiyor (tasarım yaparken eklememişler, ekleseler çok şey kaybedecekler sanki), yani VGA yaparsanız hiç bir görüntü elde edemezsiniz. O yüzden, kablo bozuktur ya da cihaz bozuktur demeyin :)
  • Hafıza kartı alımında, SD veya SDHC fark etmiyor, ikisini de gönül rahatlığı ile alabilirsiniz. Bunun dışında, SDHC alırsanız, CLASS 6 olmasına dikkat edin, böyle yavaş biz cihazda, kesinlikle hızlı bir kart olmasını isteyebilirsiniz.
  • USB to Ethernet cihazını da alırken dikkatli olun, bizimki galiba bozuk çıktı, ne zaman internet’e girsek, cihaz kendinden geçiyor. USB’de sorun çıkartıyor meret. Sorunu tam çözemedik, yeni Angstrom çekirdeği ile denedim, onda da aynı sorun çıkartı, yanı sorun kesinlikle modüllerde değil. Ya bizim USB HUB’da sorun var, ya da bu cihaz bozuk. Bulursam sorunu yazarım buraya

Evet hepsi bu kadar. Biz bunların hemen hemen hepsini Ankara’daki konya sokağından aldık, sadece SDHC kartını media-markt’dan aldık. Bulunmayacak şeyler değil.

Bundan sonra ikinci yazımda, BB üzerine Angstrom İşletim sistemni nasil yükleriz onu anlatacağım. Bunun için bir kaç şey yapmamız lazım, onları tek tek yazmayı düşünüyorum. Bakalım ileride, Pardus’un Arm tabanlı dağıtımı da çıkacak. Onu da çok merak ediyorum. Bu ARM konusu da çok muazzam bir şekilde ilerliyor, bir sürü cihaz, bir sürü işletim sistemi. Alanı çok geniş, BB gibi ucuz ve tamamen açık-kaynak camiası ile uyumlu bir şekilde çalışan cihazların etkisi ile daha da gelişecek diye düşünüyorum.

Pardus’ta BackupPc kurulumu – 2

Dün birinci kısımda BackupPc’yi nasıl kuracağımız anlattım. Bu kısımda ise client(istemci) ve sunucu kısmında neler yapmamız gerektiğini söyleyeceğim. Mail listesinden aldığım cevaplar pek işe yaramadı çünkü hata başka yerdeymiş. Nmblookup komutunun çalışması için istemci’de samba kurulu olması gerekiyormuş. O yüzden istemci tarafında samba’yı kurmayı unutmayın.

BackupPc veri aktarımı için SSH kullanıyor. Bunu kullanabilmesi için sunucu’daki anahtarlarımızı istemci’ye aktarmamız lazım. Yani sunucu’ya bağlanmak isteyen her kişi’ye sunucu’da oluşturduğumuz anahtarları yollamamız lazım. Bu biraz zahmetli iş ama İnternet’te yaptığım araştırmalar sonucunda basit bir belge buldum. Şimdi sırayla şu işlemleri yapalım:

Okumaya devam edin »

Pardus’ta BackupPc kurulumu – 1

Portakal Teknoloji staj başvuru aşamasında bana verilen projelerden biri BackupPc idi. Pardus’ta bu uygulamanın paketini bulamadığım için elden kurmam gerekiyordu. Peki BackupPc nedir ? BackupPc bu kadar güzel ve önemli yapan nelerdir?

Birincisi BackupPc yüksek performanslı, kurumsal derecede çalışabilen, çoklu platform destekleyen ağ üzerinden çalışan yedekleme uygulamasıdır. Kendisi gerekli ayarlamaları yaptıktan sonra arka planda çalışıyor ve bu sayede belirli aralıklarda ağ üzerinden diğer bilgisayarların(Masaüstü ve Dizüstü) yedeğini alıyor. Yani bir sunucu uygulamasıdır kendisi.

Kendisi birleştirme özeliği ile veri yedeklerken belirli seviye’ye kadar veriyi azaltabiliyor ve sunucu’da daha az yer kaplamasını sağlıyor. Örneğin vermek gerekirse var sayalım şirketinizde 95 adet çalışan diz üstü bilgisayarı var. Bu bilgisayarların ortalama yedeklenecek veri büyüklüğü 3.6gb olsun. BackupPc ile normalde 1200Gb olması gereken veri, birleştirme ve sıkıştırma özelliği ile sadece 150Gb yer kaplıyor. (Eğer bir dosyanın aynısı başka bir bilgisayar’da varsa onu yedeğini almıyor mesela). Ayrıca sunucu tarafında BackupPc kurulması yeterli, istemci tarafında hiç bir şey kurulmasına gerek yok, Windows makinelerinde samba protokolü, linux makinelerinde ise ssh/rsh/nfs üzerinden tar ile yedek alabiliyor.

Şimdi sırayla nasıl kurulacağını anlatacağım.
Okumaya devam edin »

Pardus’ta staj – 4′üncü hafta

Not: Bu bir yazı dizisidir. 1′inci, 2′inci ve 3′üncü hafta yaptıklarımı okumak isteyebilirsiniz

  • 16.gün: Subprocess ile synergy süreçini başlatıktan sonra, subprocessin metotlarından biri olan “pid” ile sürecin pid numarasını alıp, “kill” metodu ile süreci öldürebiliyorduk. Fakat bu bende çalışmıyordu. Bugün o yüzden biraz bununla uğraştım, problem günlerdir vardı aslında fakat ben hep sonraya ertelemiştim. Sonra Python’un listelerine bir e-posta attım ve bu konuyu belirtmiştim, kendileri de benim daha önce denediğim yöntemlerden bahsetmişti. Yani sorun başka bir yerdeydi. Sonra anladım ki synergy’i -f ibaresi ile çalıştırmam gerekiyormuş, diğer türlü daemon olarak çalışacak ve arka planda öldürdüğümde bile kalıntıları kalacaktı. Bunu anladıktan sonra birde subprocess’i kullanmayı da bırakıp doğrudan QProcess kullanmaya başladım. Kullanmamın sebebi ise madem PyQt kullanıyorum, Qt ilgili fonksiyonlar kullanayım bir bütünlük olsun demiştim(subprocess mi QProcess mi sorusunu tam cevap bulamadım yine de). Bunun dışında konsol’da çıkan synergy çıktılarını(stdout) da parse etmeye çalıştım. Düzenli ifadeler bilgim yeterli değildi, Faik abi sonra kolay bir yol gösterdi. Bu sayede doğrudan çıktıdan synergy’inin bağlanıp bağlanmadığını görebiliyordum. Bunları da libnotify’e bağladım. Yani bağlantı olduğunda sistem çekmecesinden bilgilendirme balonu çıkacaktı.
  • 17.gün: Tüm gün setup.py ile uğraşmışım, fakat sonuç alamadım. Sinirlenmişim baya :)
  • 18.gün: Setup.py dosyasını halletim, kolaymış fakat ben bilmediğimden değişik şeylere bakmışım. Setup.py ile kolay bir şekilde .tar.gz yani kaynak kod paketleri oluşturabiliyordum. Sonra pspec.xml dosyası da hazırlamışım. Ardından sistem’de pisi ile kurulunca çalışıp çalışmadığını test ediyordum, her seferinde de pspec.xml’deki dosya kısmını değiştirmem gerekiyordu(kaynak değişti için sha1sum da değişiyordu). Bu yüzden Emre’nin kendi isteklerine göre yazdığı bir betiği kendi isteklerime göre değiştirdim. Kendisi kaynak’tan paket oluşturuyor, ssh ile sunucuma yolluyor, sha1sum oluşturuyor, sonra bu sha1sum’u pspec.xml’e ekliyor, pisi paketini inşa etmeye başlıyor, pisi paketinin içeriğini lspisi ile gösteriyor sonrasında ise kurmak isteyip istemediğimi bana soruyor. İşleri otomatik bir yola sokuyor yani.
  • 19.gün: Birden fazla sunucu aynı istemci’ye istek yolladığında istekler kendi arasında çakışıyordu. Sadece biri bilgilendirme balonu ile gözüküyordu. Bu sorun ile baya uğraştım, kod’u bu yönde ciddi bir şekilde değiştim ve sonunda halletmiştim. Bununla beraber notifier.py dosyasını da değiştirdim. Günün sonuna doğru da Işıl ve Gökçen ile yüksek lisan, lisan, üniversite’deki olaylar, ileride ne yapabiliriz gibi konular hakkında konuştuk, keyifli bir sohbeti açıkçası.

  • 20.gün: Bugün biraz serbest geçmişti, işleri ağırdan aldım biraz galiba. Yine de daha önce eklemek istediğim otomatik tanımlama özelliğini eklemiştim. Google Suggest’de arama yaparken anlık ileti ile size özel aramaları gösteriyordu. Bu tarz bir şey, bizde ise sunucu liste’sindeki sunucuları anlık ileti şeklinde bize gösteriyordu. Şirketinizde 20-30′dan fazla bilgisayar varsa bir bilgisayarın ismini liste’den seçmek zor olacak bu yüzden ismini biliyorsanız ilk harflerini yazarak doğrudan sunucuya ulaşmanızı sağlayabilir. Bunun ardından uygulamayı yine bir kaç test ettim ve gözüme çarpan ufak hataları düzeltim. Sonrasında ise README, AUTHORS gibi dosyaları oluşturdum. Birde setup.py’deki hataları da düzelttim. Tüm bunlar bittikten sonra uygulamayı Kde-apps.org‘a ekledim ve 0.1 sürümü olarak çıktığını açıkladım.

    Sonrasında ise herkes vedalaştı ve stajımız resmi olarak bitmişti(herkese tekrardan çok teşekkür ederim). Güzel bir zaman geçirmenin mutluluğu ile odamın yolunu tutmuştum.

Pardus’ta staj – 3′üncü Hafta

Not: Bu bir yazı dizisidir. 1′inci ve 2′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 11.gün : Kod temizlemesi ile başladım. Proje’ye başlarken aniden giriş yaparak başladığım için modüler,fonksiyonlar hepsi birbirine girmişti. Kod’ları biraz daha düzgün bir hale getirdikten sonra, avahi’nin yolladığı verileri parse etmeye başladım. Daha önce sadece sunucu’yu alıyordum. Fakat artık seçtiğimiz bilgisayarın pozisyonu da yolluyorum. Fakat yollarken verilerde hata oluşuyor. Verileri sadece “string” türünde yollayabiliyorum. O yüzden kolay edilebilecek bir şekilde yollamaya çalıştım. Öğlenden sonra Faik abi gelip bir bakmıştı, avahi ile yollanan verilerde sorun çıktığını neden olduğunu da bilmediğimi anlattım, sonra kendisi ile bunu bir şekilde çözmeye başardık. Bunun dışında subprocess ile oluşturduğum süreçleri, uygulama kapatırken öldürmem gerekiyordu. Oluşan süreçlerin pid numalarını bir şekilde alma ve öldürme işlemlerine baktım kısaca. Günün sonuna doğru ise avahi ile yolladığım verileri parse etme fonksiyonu ile geçirdim
  • 12.gün: Sinerji’nin kullanabilir sürümü çıktı. Avahi ile yollanan verileri parse edebiliyorum artık. Ayrıca QSystemTray de ekledim, yani artık Sinerji bir tray uygulaması ve doğrudan sistem erişilebilinecek. Ayrıca arayüz’deki iki tane radio butonun da sildik. Sunucudan yollanan istekler bundan sonra istemcisinin arayüzüne yansımayacak, onun yerine oluşturduğum QSystemTray’ın kendi metodu olan showMessage() ile gösterilecek. Yani kısaca bir balon çıkacak ve ona tıkladığımızda kabul etmiş olacağız.
  • 13.gün ve 14.gün: Bu günleri günlüğüme tek bir yazı olarak yazmışım. İki gündür tray işi ile uğraşıyormuşum. showMessage() metodu yerine DBus’un kendi bilgilendirme balonlarını kullanacağız. Çünkü Qt’nin balonlarına buton ekleyemiyoruz, DBus’un kendi balonlarına ise buton ekleyebiliriz, böylelikle istemci tarafında çıkan balonlar’da “kabul” ve “iptal” gibi buton çıkacak ayrıca. Sunucu tarafı synergy’i başlatıktan sonra, diğer bilgisayarda arka planda çalışan _sinerji._tcp arama servisi bizim sunucuyu bulacak. Sonra da bu balon çıkacak. O yüzden belirli aralıklarda sinerji servisi araması lazım uygulama. Bunu da QTimer ile halletmişim. Kendisi belirli aralıklarda _sinerji._tcp servisini arıyor. Uygulama bitmiş(böyle demişim :) ). Yarın Faik abi’ye gösterip, projenin bittiğini söyleme niyetim olmuş. (Fakat bitmediğini sonraki gün anlayacağım)
  • 15.gün: Faik abi’ye gösterim ve kendisi ile yaklaşık 7-8 tane yapılması gereken iş bulduk(uygulama bitmemiş yanı :) ). İlk önce uygulamadaki bazı hataları düzeltim. Neler olduğunu yazmamışım günlüğüme. Ardından “Disconnect” adında bir QDialog oluşturmuşum. Yani bir tane bilgilendirme arayüzü. Örneğin istemci, sunucun yolladığı isteği kabul ettikten sonra ne durumda olduğunu kullanıcıyı bildirmesi lazımdı. Arayüzün kaybolup, onun yerine sistem çekmecesindeki simgeye tıkladığımızda bu bilgilendirme arayüzü çıkması gerekiyordu. QDialog yerine ilk başta QMessageBox kullandım, fakat onun sinyal yollamadığını, bu yüzden kullanıcının tıkladığı butonları belirli fonksiyonlara bağlayamayacağımı öğrendiğim için günün sonuna doğru QDialog ile yeni bir arayüz oluşturdum.

Pardus’ta staj – 2′inci hafta

Not: Bu bir yazı dizisidir. 1′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 6.gün: Bugün avahi ile hem servis oluşturma hem de servise arama işiyle uğraştım. Sonrasında ise arama ve bulma işlemlerini halletikten sonra bunları birer fonksiyon haline getirdim. Böylelikle istediğim her servis için ayrı ayrı modül yazmak zorunda kalmadım. Bunun dışında PyQt4 kullandığım için DBusGmainLoop yerine DbusQtMainLoop kullanmam gerektiğini öğrendim. İnternet’te bu konuda pek bilgi bulamamıştım, fakat sonra Google Codesearch’de bir şeyler buldum ve entegre etmeye başarmıştım.(Blog’a da bir yazı yazmışım bu aralar)
  • 7.gün: Bugün tüm gün createsynergy.py adlı modülü oluşturma ile uğraşmışım. Bu biraz kafamı kurcalıyordu nasıl yaparım ederim diye. Synergy’nin ayarların kaydedildiği bir dosya var ve biz Synergy’i çalıştırdığımızda bu dosyadan verileri okuyarak başlıyor. Sinerji’de ise ayarladıktan sonra bu dosya oluşması lazım ki Synergy bu dosyayı okusun. İlk başlarda zor gelmişti, yapamamıştım. Hatta o gün bu konuda mesai bitimine kadar da bir şey yapamadığımı hatırlıyorum. Akşam odamda düşünürken birden dank etti ve yazmaya başlamıştım ve bitirmiştim.
  • 8.gün: synergy.conf dosyasını oluşturmayı yapabiliyordum. Fakat parse etmeyi bilmiyordum. Yani parse işini halleden modülü yazmamıştım. Onu da bugün bitirdim. Kullanıcı sinerji’yi çalıştırdığında ilk önce bu dosya’yı okuyarak daha önceki ayarları arayüze yansıtacak. Yani her zaman her seferinde aynı işleri yapmaktan kurtaracaktı. Bunun dışında _sinerji._tcp servisini oluşturma ve bulma koduyla ilgilendim. Henüz bilmediğim bir nedenle iki tane servisi ayna arattığımda uygulama çöküyordu. Ya da aynı anda arama ve bulma yapınca da çöküyordu. Bunun nedenini bulamamıştım bugün(Sonraki günler çözüme ulaştım ama)
  • 9.gün: Günlüğümde bu gün için 2-3 satırlık çok kısa bir şey yazmışım. Hala aynı anda arama ve bulma işi ile uğraşıyormuşum bu gün. Fakat henüz çözememişim olayı. Birde sinerji.py yani bizim ana betiğimizdeki avahi ile olan kısımları ayırıp modül olarak ayrı bir dosya olarak yazmışım. Galiba bir iş bitmeden başka bir işe başlayamıyorum. 2 gündür uğraştım bu konu üzerinde.
  • 10.gün: Bugün 2 gündür uğraştığım çökme problemini çözmüşüm. Sorun DBusQtMainLoop olayının her seferinde çalışmasından kaynaklanıyormuş. Ben bu çalıştırma işini avahi’deki arama ve oluşturma fonksiyonların başına koymuştum. Fakat sadece bir kere çalıştırmam yeterliymiş. Bunu main() altına koyduktan sonra sorunsuz bir şekilde iki tane aramayı aynı anda çalıştırmaya başardım. Yani artık hem _workstation._tcp hem de _sinerji._tcp servislerini ağ’da arayabiliyordum. Ayrıca bunun dışında artık sunucu’yu başlatıktan sonra, verileri yollamaya da başardım. Yani oluşturduğum _sinerji._tcp servisi ile verileri de yollayabiliyordum. Birde son olarak os.system yerine subprocess kullanmaya başladım. Normalde os.system ile bash üzerinden istediğimiz komutları çalıştırabiliyorduk. Fakat sonra Gökçen bunun iyi bir fikir olmadığını söyledi bana. Çünkü kullanıcı ayarlarda “rm -rf /” gibi bir isim girebilir ve biz bunu çalıştırabiliriz. Subprocess’de bu olay yok, ön tanımlı olarak bash kapalı geliyor. Kendi içinde çalıştırıyor.

Sonraki Sayfa »