7 Kasım 2008 Cuma

LTIB (Linux Target Image Builder) kurulumu

LTIB kuruluma root olarak izin vermiyor.Sınırlı kullanıcı hesabı açılmalı.

LTIB in kurulumu için ./ltib çalıştırıldığında, bison paketinin kurulumuyla ilgili bir hata verebilir bu durumda, /pkgs nin içindeki bison un tarpaketini açıp elle kurmak gerekecek:

./configure
make
make install

ardından bison u extract ettiğimiz klasörü silmemiz gerekiyor.

tekrar, ./ltib i çalıştırdığımızda kullanıcı haklarıyla ilgili bir hata verilebilir, bunu düzeltmek için hatada belirtilen düzeltmeyi yapmak gerekiyor.

6 Kasım 2008 Perşembe

Qt nin kurulabilmesi için

Eğer Qt yi, Yast yöneticisinden değil de, tar paketinden kuracaksanız, sistemde xorg-x11-dev kütüphanesinin kurulu olduğundan emin olun; değilse Yast tan yükleyin.Aksi halde Qt derlenemeyecektir.

Eclipse ile Qt integration kullanımı

Eclipse ile beraber Qt integration ı kullanırken Eclipse sık sık sorun çıkarıyor ve çöküyor. Bunu halletmek için bir çevresel değişkeni set etmemiz yeterli:

export LIBXCB_ALLOW_SLOPPY_LOCK=1

29 Ekim 2008 Çarşamba

Linux framebuffer

Linux framebuffer, SVGALib gibi herhangi bir sisteme özel kütüphaneye bağımlı kalmadan veya X Window System in getirdiği ağır yük olmadan, bir konsol üzerinde grafiklerin gösterilmesi için tasarlanmış donanımdan bağımsız bir soyutlama katmanıdır(abstraction layer).

Son günlerde MPlayer gibi Linux programları , ve GGI, SDL, GTK+ ve Qt_Extended gibi kütüphaneler, bir X server a ihtiyaç duymadan framebufferı direkt olarak kullanabilmektedirler. Bu, özellikle embedded system ler için oldukça kullanışlıdır.


Linux framebuffer ın çok uzun süredir ciddi bir performans sorunu vardı; ancak şimdi donanımsal hızlandırma için bir framework sağlayan DirectFB kütüphanesi var.


FBUI (FrameBuffer UI) çok düşük maliyetle framebuffer için kernel-içinde bir pencere sistemi(GUI) sağlar : bütün alt sistemin büyüklüğü yaklaşık 50 kb kadardır. Birden çok programın aynı anda framebufferı paylaşmasını sağlar; üst üste gelen hareketli pencerelere izin verir; her program birden çok pencereye sahip olabilir; ve her sanal konsol üzerinde pencerelere izin verir. FBUI; load monitor, clock, calculator, scribble pad, image viewer, window managers, ve basit bir MPEG2 çaların yanında, pencereler, olaylar, vb.. için soyutlama sağlayan libfbui yi de içerir. FBUI VESA framebuffer sürücüsü için optimize edilmiş bir kod içerir.

From Wikipedia, the free encyclopedia (Linux Framebuffer)

Framebuffer nedir?

Framebuffer, içerisinde tamçerçeve veri bulunduran bir bellek tamponu(memory buffer)  üzerinden video display birimini(monitör) süren bir video çıkış birimidir. Tampon içindeki veri tipik olarak herbir piksel için renk değerlerinden oluşur.Renk değerleri genelde  1bit monokrom, 4bit paletize, 8bit paletize, 16bit yüksek renk ve 24 bit gerçek renk formatlarındadır. Bazen ek olarak piksel şeffaflığı değeri bilgisini taşıyan "alfa kanalı" kullanılır. Framebuffer ı sürmek için gereken bellek miktarı çıkış sinyalinin çözünürlüğüne, renk derinliğine ve  palet boyutuna bağlıdır.

Renk paleti, farklı renk derinlikleri için renk değerlerini hesaplamada kullanılan bir lookuptable dır.

Grafik hızlandırma

Daha iyi grafiklere olan ihtiyaç arttıkça; donanım üreticileri, framebufferı doldurmak için harcanan CPU zamanı miktarının düşürülmesi için bir yol bulunması gerektiğini farkettiler. Sonuç, unix dünyasında bilinen adıyla "graphics accelerator"(grafik hızlandırıcı) idi.

Grafik hızlandırıcının mantığı genel çizdirme komutlarının(doğadaki birçok geonetrik şekil) ham halde grafik hızlandırıcıya gönderilmesi esasına dayanır. Daha sonra hızlandırıcı komutların sonuçlarını frambuffer üzerinde değiştirir. Bu metod sayesinde, komut başına  binlerce ya da milyonlarca CPU döngüsünden kurtulunmuş olur ve CPU diğer işleri yapmak için serbest kalır.

İlk hızlandırıcılar, 2D arayüz performansını arttırma üzerinde odaklanmış olsalar da, birçok modern hızlandırıcı gerçek zamanda 3D görüntüleme üzerinde odaklanmışlardır. Komutları grafik hızlandırıcıya göndermek için genel bir dizayn, OpenGL kütüphanesinin kullanımıdır. OpenGL sürücüsü daha sonra bu komutları GPU (graphics processing unit) instruction larına çevirir. GPU değişen pikselleri hesaplamak için microinstruction lar kullanır. Bu sonuçlar framebuffera kopyalanır. Daha sonra framebuffer sinyali, gömülü video kaplama donanımı(genelde framebufferın verisini değiştirmeden fare imleci hareketlerinin oluşturulmasını sağlar) ve çıkış sinyalini değiştirerek üretilen herhangi bir özel analog efektin de etkisiyle, üretilir. Bu tip analog değişime örnek anti-alising verilebilir.   


22 Ekim 2008 Çarşamba

Cirrus Logic EDB9315: tftp kurulumu

Network services de TFTP yi enable edilir..
Ardından minicom konsolunda seri port üzerinden bir bağlantı açılır.
Konsolda :
ln -s /dev/ttyS0 /dev/modem
minicom

minicom konsolu açılacak..

Qt Embeded 2.3.10 kurulumu

#Paketleri açıp, enviromental variables ı seeet ediyoruz(opt/dev klasörünün içine extract edilecek)
tar -xzvf tmake-1.13.tar.gz
tar -xzvf qt-x11-2.3.2.tar.gz
tar -xzvf qt-embedded-2.3.10-free.tar.gz
mv qt-2.3.10 qt-2.3.10-host
export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10-host

#Bu aşamada gcc 4.x ile compile edebilmek için bazı patchler yapmamız lazım

/opt/qt-2.3.10/include/qwindowsystem_qws.h dosyasına
class QWSInputMethod;
class QWSGestureMethod; satırlarını ekleyeceğiz
#bunun dışında bir de(/opt/qt-2.3.2 için de aynı şey yapılacak)
qvaluestack.h içinde
remove( this->fromLast() ); satırı
this->remove( this->fromLast() ); olarak değişecek


#Build Qt2.3.2 Build Qt2.3.2

cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-xft
make
mkdir $QTEDIR/bin
cp bin/uic $QTEDIR/bin/

#Build Qvfb

export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
make clean
export PATH=/opt/dev/tmake-1.13/bin:$PATH
tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/

#Build Qt/Embedded

cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-xft -qvfb -depths 4,8,16,32
make

#Run demo

export QTDIR=$QTEDIR
export PATH=$QTEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/examples/launcher
qvfb -width 640 -height 480 &
sleep 10
./launcher -qws

#Şimdi target için qt embedded i derleyeceğiz

tar -xzvf qt-embedded-2.3.10-free.tar.gz
mv qt-2.3.10 qt-2.3.10-target
export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10-target
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
export PATH=/usr/local/arm/3.4/bin:$PATH
make

#burda epeyce bi hata verecek, tekrardan şu komutları çalışırıyoruz:

make clean
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make

#bundan sonra şu hataları verebilir:

/opt/dev/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new[](unsigned int)'
/opt/dev/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete(void*)'
/opt/dev/qt-2.3.10-target/lib/libqte.so: undefined reference to `__cxa_pure_virtual'
/opt/dev/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete[](void*)'
/opt/dev/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new(unsigned int)'
collect2: ld returned 1 exit status

#bunlar şimdilik önemli değil, tmake de yapacağımız değişiklikle bunları çözeceğiz.
#şimdi /$QTEDIR/lib/ içindeki libqte.so* ları kartımızdaki /usr/lib klasörüne #kopyalayacağız.


#tmake düzenlemesi

$TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf dosyasındaki
“TMAKE_LINK= arm-linux-gcc”
“TMAKE_LINK_SHLIB= arm-linux-gcc” girişlerini
“TMAKE_LINK= arm-linux-g++”
“TMAKE_LINK_SHLIB= arm-linux-g++” olarak değiştir.

#executable oluşturma(demo)

cd /$QTEDIR/examples/progressbar
tmake -o Makefile progressbar.pro
make

#bu kadar...

Ek notlar: Export....,


target compile için çevresel değişkenler:

export TMAKEDIR=/opt/dev/tmake-1.13
export QT2DIR=/opt/dev/qt-2.3.2
export QTEDIR=/opt/dev/qt-2.3.10-target
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export PATH=/opt/dev/tmake-1.13/bin:$PATH
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/arm/3.4/bin:$PATH

host compile için çevresel değişkenler:

export TMAKEDIR=/opt/dev/tmake-1.13
export QT2DIR=/opt/dev/qt-2.3.2
export QTEDIR=/opt/dev/qt-2.3.10-host
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export PATH=/opt/dev/tmake-1.13/bin:$PATH
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

Cirrus Logic EDB9315:Nfs Server Configuration

Nfs server configuration:
directory olarak ramdiskimizi(root file system) extract ettiğimiz klasörü gösteriyoruz...

Host Wild Card: *
Options: rw,no_root_squash,sync

zImage i yüklüyoruz:

RedBoot> load -r -v -b 0x80000 zImage

redboot ta aşağıdaki komutu yazıyoruz:

exec -r 0x1000000 -c "root=/dev/nfs rw nfsroot=10.18.6.233:/home/yg/calisma/arm9/nfs ip=10.18.7.135:10.18.6.233::255.255.0.0::eth0:off console=ttyAM"

Cirrus Logic EDB9315: rebuild linux kernel

export ARCH=arm
export PATH=/usr/local/arm/3.4/bin:$PATH
export CROSS_COMPILE=arm-linux-

#linux-2.6.20.4-edb93xx.patch i kernelin içine attıktan sonra:

patch -p1 < linux-2.6.20.4-edb93xx.patch
make edb9315_defconfig
make menuconfig
#menuconfig ekranında ARM platformuna uygun kernel seçenekleri seçilir ardından zImage #oluşturulur:
make zImage
#zImage imizi tftpboot klasörünün içine atıyoruz.
cp arch/arm/boot/zImage /tftpboot/

daha sonra load image ile devam ediyoruz.

Cirrus Logic EDB9315:load image

Kernel ve root file system imagelerini yüklemek için:

load -r -v -b 0x1000000 ramdisk.gz
load -r -v -b 0x80000 zImage
exec -r 0x1000000 -s 0x1000000 -c "root=/dev/ram console=ttyAM”


rootnfs server klasöründen boot etmek için:
exec -r 0x1000000 -c "root=/dev/nfs rw nfsroot=10.18.6.233:/home/yg/9315/nfs ip=10.18.7.135:10.18.6.233::255.255.0.0::eth0:off console=ttyAM"

20 Ekim 2008 Pazartesi

Cirrus Logic EDB9315:redboot kurulumu

Kart üzerinde "jumper 92" "2&3" ise normal boot, "Jumper 92" "1&2" ise serial boot yapar. Redboot' u karta yüklemek için serial boot modunda olması gerekir.

Download programını çalıştırıp redboot u com port üzerinden yükleyeceğiz:

>download redboot.bin

Download bittikten sonra "jumper 92" nin "2&3" e getirilmesi gerekir.

Bundan sonra Redboot' u konfigüre etmemiz gerekiyor. Önşart olarak, seri port üzerindenhaberleşme için sistemde "minicom" uygulamasının yüklü olması gerekiyor.

minicom çalıştırıldıktan sonra konsolda:

fconfig -i

Initialize non-volatile configuration - continue (y/n)? y
Run script at boot: false
Use BOOTP for network configuration: false
Gateway IP address: 10.18.1.0
Local IP address: 10.18.7.135
Local IP address mask: 255.255.0.0
Default server IP address: 10.18.6.233
Set eth0 network hardware address [MAC]: false
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y

diyerek, redbootu konfigure etmiş oluruz

"make" ile derleme hızını arttırma

Çift veya daha çok çekirdekli sistemler için derleme hızında ciddi bir artış sağlanabilir:

make -j komutunu kullanın. "görev sayısı" aynı anda çalışacak görevlerin sayısını ifade eder. Sanırım bunun için en uygun değer mikroişlemcinin çekirdek sayısı olmalı.

Qt: qt eclipse integration problemi

Qt için eclipse integration paketini kurduğunuzda, muhtemelen eclipse sık sık çökmeye başlayacaktır. Bu problemi ortadan kaldırmak için bir çevresel değişken tanımlamamız yeterli:

export LIBXCB_ALLOW_SLOPPY_LOCK=1

18 Ekim 2008 Cumartesi

Visual Studio notu-2-

Projede, dışarıdan kullanılan static libleri eklemek için:
Project->Properties->Configuration Properties->Linker->Input->Additional Dependencies 'e gerekli parametreleri eklemek gerekiyor

Qt: bir şekli merkezi etrafında döndürme

merkezi (90,90) koordinatları üzerinde bulunan bir şekli, ekseni etrafında döndürmek için:

p.translate(90,90); //koordinat sistemini taşı
p.rotate(angle); //koordinat sistemini döndür
p.translate(-90,-90); //koordinat sistemini eski yerine taşı

p.drawImage(myImage); //resmi çizdir(resim angle değeri kadar döndürülmüş olarak çizilir)

p.translate(90,90); //koordinat sistemini eski haline getirmek için
p.rotate(-angle); //sistemi ters yönde döndürüyoruz
p.translate(-90,-90); //resmimiz döndürülmüş oldu ve koordinat sistemi eski haline getirildi

Qt: designer' a kendi oluşturduğunuz plugini ekleme

SOURCES, HEADERS, *.pro dosyalarını QTDIR\examples\designer\qmeterplugin klasörünün altına kopyala
dll .manifest ve object dosyalarını QTDIR\plugins\designer klasörünün altına kopyala

Visual Studio notu-1-

Uygulamanızı static yada dinamik olarak derlemek istiyorsanız, aşağıdaki ayarı değiştirin:
Project->Properties->Configuration Properties->Project Defaults->Configuration Type