Showing posts with label DirectFB. Show all posts
Build ilixi Toolkit Engine
Tương tự như LiTE, ilixi cũng là một toolkit engine cho DirectFB, tuy nhiên về mức độ đầy đủ và hoàn thiện thì cao hơn LiTE.
Trong bài viết này là sự kết hợp giữa:
DirectFB-1.7.0
ilixi-1.0.0
libpng1.6.0, freetype2.4, alsa-lib-1.0.22, alsa-utils-1.0.22, linux-fusion-9.0.2, libsigc++-2.4.0, libxml-2.7.7, fontconfig-2.11.1
Link download.
Trong bài viết này là sự kết hợp giữa:
DirectFB-1.7.0
ilixi-1.0.0
libpng1.6.0, freetype2.4, alsa-lib-1.0.22, alsa-utils-1.0.22, linux-fusion-9.0.2, libsigc++-2.4.0, libxml-2.7.7, fontconfig-2.11.1
Link download.
<pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> #=======================================================================
# source environment
#=======================================================================
source setenv.sh
"
#!/bin/bash
export SRCROOT=`pwd`
export PREFIX=/friendlyarm
export CC_PATH=/home/ninhld/mini2440/SDK/FriendlyARM/toolschain/4.4.3
export CROSS_COMPILE=${CC_PATH}/bin/arm-none-linux-gnueabi-
export CC=${CROSS_COMPILE}gcc
export STRIP=${CROSS_COMPILE}strip
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export CXX=${CROSS_COMPILE}g++
export CPP=${CROSS_COMPILE}cpp
export LD=${CROSS_COMPILE}ld
export RANLIB=${CROSS_COMPILE}ranlib
export ARCH=arm
export KROOT=
export ADVBOOT_SOURCE=
export UBOOT_SOURCE=
export ROOTFS=/home/ninhld/mini2440/SDK/rootfs_qtopia_qt4
export LOG=${SRCROOT}/Build.log
export PATH=$PATH:${CC_PATH}/bin
export PLATFORM=
export HOST=arm-none-linux-gnueabi
export BUILD=x86_64
"
#=======================================================================
# Linux kernel
#=======================================================================
tar –xvzf linux-2.6.32.2.tar.gz
cd linux-2.6.32.2
cp config_mini2440_p35 .config
export ARCH=arm
make menuconfig
make zImage
=> linux-2.6.32.2/arch/arm/boot
export INSTALL_MOD_PATH=${PREFIX}
make modules
make modules_install
=> ${PREFIX}/lib/modules
I had the same issue, removing __initdata in
> arch/arm/mach-s3c2440/mach-mini2440.c
> in mini2440_lcd_cfg array and mini2440_fb_info data structure, solves
> the issue.
> But after that, I ran other issues, may be I miscompile directfb, i need
> to investigate more.
#=======================================================================
# build Directfb 1.7 & ilixi 1.0
#=======================================================================
# build libpng1.6.0 ok
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
# build freetype2.4 ok
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
#alsa-lib-1.0.22
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
#alsa-utils-1.0.22 (NOT NEED for Directfb)
export CFLAGS=-I${PREFIX}/usr/local/include
export LDFLAGS=-L${PREFIX}/usr/local/lib
export PATH=$PATH:${PREFIX}/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${PREFIX}/usr/local/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX}/usr/local/lib/pkgconfig
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
# linux-fusion-9.0.2
requirement:
- build linux kernel modules ok
- for example: ${PREFIX}/lib/modules/2.6.32.2-FriendlyARM
open linux-fusion Makefile and edit:
KERNEL_VERSION = 2.6.32.2-FriendlyARM
INSTALL_MOD_PATH = ${PREFIX}
KERNELDIR = $(INSTALL_MOD_PATH)/lib/modules/$(KERNEL_VERSION)/build
FUSIONCORE = single
ONECORE = single
- make
- make install
=> install fusion.ko and linux-one.ko to ${PREFIX}/lib/modules/2.6.32.2-FriendlyARM/drivers/char/fusion
fusion.h && one.h to ${PREFIX}/usr/include/linux
-runtime: insmod fusion.ko, insmod linux-one.ko
#Directfb 1.7
export CPPFLAGS="-I${PREFIX}/usr/include -I${PREFIX}/usr/local/include -g"
export CFLAGS="-I${PREFIX}/usr/include -I${PREFIX}/usr/local/include -g"
export LDFLAGS="-L${PREFIX}/lib -L${PREFIX}/usr/lib -L${PREFIX}/usr/local/lib"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${PREFIX}/usr/local/lib
export PKG_CONFIG_PATH=${PREFIX}/usr/local/lib/pkgconfig
./configure --prefix=${PREFIX}/usr/local \
--build=${BUILD} --host=${HOST} \
--disable-x11 \
--enable-drmkms=no \
--enable-fbdev=yes \
--disable-devmem \
--with-gfxdrivers=none \
--with-inputdrivers=input_hub,keyboard,serialmouse,linuxinput,tslib \
--enable-multi-kernel \
--enable-fusiondale \
--enable-fusionsound \
--enable-one \
--enable-sawman
--with-inputdrivers=LIST
LIST is a comma separated selection of inputdrivers
to build. Possible inputdrivers are: all (builds all
drivers), none (builds none), dbox2remote,
dreamboxremote, dynapro, elo-input, gunze, h3600_ts,
input_hub, joystick, keyboard, linuxinput, lirc,
mutouch, penmount, ps2mouse, serialmouse,
sonypijogdial, tslib, ucb1x00, wm97xx, zytronic.
[default=all]
./configure --help
#libsigc++-2.4.0
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
#libxml-2.7.7 >=2.7.7
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}
#fontconfig-2.11.1 >= 2.6.0
export PATH=$PATH:${PREFIX}/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${PREFIX}/usr/local/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX}/usr/local/lib/pkgconfig
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST} --enable-libxml2=yes
#ilixi 1.0
export CPPFLAGS="-I${PREFIX}/usr/include -I${PREFIX}/usr/local/include -g"
export CFLAGS="-I${PREFIX}/usr/include -I${PREFIX}/usr/local/include -g"
export LDFLAGS="-L${PREFIX}/lib -L${PREFIX}/usr/lib -L${PREFIX}/usr/local/lib"
export PKG_CONFIG_PATH=${PREFIX}/usr/local/lib/pkgconfig
./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST} --with-examples --enable-nls=yes --enable-fusiondale=yes --enable-fusionsound=yes --enable-sawman=yes
# run Directfb & ilixi example on board target
export PREFIX=/friendlyarm
insmod ${PREFIX}/lib/modules/2.6.32.2-FriendlyARM/drivers/char/fusion/fusion.ko
insmod ${PREFIX}/lib/modules/2.6.32.2-FriendlyARM/drivers/char/fusion/linux-one.ko
export PATH=$PATH:${PREFIX}/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${PREFIX}/usr/local/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX}/usr/local/lib/pkgconfig
Some example in ${PREFIX}/usr/local/bin
Ex: ilixi_hello, ilixi_dialogs
</code></pre>
Build LiTE Toolkit Engine
1. Build LiTE
LiTE là một toolkit engine nhỏ gọn, giúp cho việc lập trình giao diện với Directfb trở nên đơn giản hơn rất nhiều.
DirectFB-1.6.0
LiTE-0.8.10
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
export CROSS=arm-none-linux-gnueabi-
export HOST=arm-none-linux-gnueabi
# bien moi truong den directfb da build
DEPEND_LIB_DIR=/friendlyarm
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
# config
export PREFIX=/friendlyarm
./configure --prefix=${PREFIX} --host=${HOST} \
CC=${CROSS}gcc
Mở file source dfbspy.c ra và rename tên biến stat thành statlite (line 92, 94, 148 -> 155)
make
make install
2. Run app
Sau khi build xong LiTE, các examples cũng được build và nằm trong thư mục ${PREFIX}/bin
có tên
lite_bench
lite_checktest
lite_dfbspy
lite_listtest
lite_msgbox
lite_progressbar
lite_run
lite_scrollbartest
lite_simple
lite_slider
lite_textbuttontest
lite_textlinetest
lite_textlisttest
- Copy tất cả thư viện (Directfb, LiTE) ở ${PREFIX} xuống board (sdcard or mount NFS)
- Export biến môi trường
DEPEND_LIB_DIR=/friendlyarm
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
- Chạy test các ví dụ
3. Build LiTE application
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
DEPEND_LIB_DIR=/friendlyarm
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
arm-none-linux-gnueabi-gcc yourapp.c -o yourapp $(pkg-config --libs --cflags direct directfb directfb-internal lite leck)
Bạn có thể tham khảo các ví dụ nằm trong thư mục LiTE-0.8.10/examples
Tag :
DirectFB
Build DirectFB cho board nhúng FriendlyARM Mini2440
1. Build DirectFB-1.6.0
Thư viện phụ thuộc
- libpng
- freetype
# toolchain
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
export CROSS=arm-none-linux-gnueabi-
export HOST=arm-none-linux-gnueabi
#thư viện phụ thuộc
DEPEND_LIB_DIR=/friendlyarm
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
#cấu hình
export PREFIX=/friendlyarm
./configure --prefix=${PREFIX} --host=${HOST} \
--disable-x11 --enable-fbdev=yes --disable-devmem \
--with-gfxdrivers=none --with-inputdrivers=none \
CC=${CROSS}gcc
#compile
make
make install
2. Build DirectFB-examples-1.6.0
# toolchain
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
export CROSS=arm-none-linux-gnueabi-
export HOST=arm-none-linux-gnueabi
# thu vien phu thuoc: directfb
DEPEND_LIB_DIR=/friendlyarm/directfb
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
#config
export PREFIX=/friendlyarm/directfb
./configure --prefix=${PREFIX} --host=${HOST} \
CC=${CROSS}gcc
make
make install
3. Build Directfb application
df_matrix.c là một ví dụ được lấy ra từ gói DirectFB-examples-1.6.0
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
DEPEND_LIB_DIR=/friendlyarm
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
arm-none-linux-gnueabi-gcc df_matrix.c -o df_matrix $(pkg-config --libs --cflags direct directfb directfb-internal)
4. Chạy thử app directfb trên board
Chúng ta sẽ chạy thử các app đã build ở mục 3
- copy tất cả các lib và example xuống board (sdcard or mount NFS)
- export biến môi trường
DEPEND_LIB_DIR=/friendlyarm
export CFLAGS=-I${DEPEND_LIB_DIR}/include
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
- chạy thử các app
$ cd /friendlyarm/directfb-1.6.0-exam/bin
$ ./df_andi
Tag :
DirectFB
Giới thiệu DirectFB
Bài viết liên quan:
- Graphical Toolkits (DirectFB, X11, Wayland, Gtk, Qt)
DirectFB (DFB) là graphic library cấp thấp truy cập trược tiếp xuống framebuffer, DFB cung cấp đầy đủ các hàm API để thực hiện các thao tác vẽ:
+ Lines, rectangles, triangles drawing and filling
+ Blitting, flipping
+ Text drawing
+ Windows and transparency
+ Image loading and video display
Xử lý sự kiện từ các thiết bị ngoại vi:
+ mice
+ keyboards,
+ joysticks
+ touchscreens
Cung cấp khả năng hardware graphics acceleration trên một số hardware platform, có thể hiểu đó là các thao tác vẽ và xử lý hình ảnh bằng những DSP core phần cứng chuyên dụng thay vì làm điều đó bằng phần mềm, nhờ thế hình ảnh hiển thị trên màn hình rất mượt, không bị giật như xử lý bằng phần mềm.
DFB được dùng phổ biến trên các thiết bị nhúng vì nó truy cập trực tiếp framebuffer nên rất nhẹ, tuy nhiên có nhược điểm là các API khá phức tạp, chưa xây dựng thành các graphic component (Label, Button,, CheckBox, ListView, ...) làm mất thời gian phát triển giao diện.
Để khắc phục khó khăn đó một số Toolkit Engine như LiTE hay ilixi ra đời, chúng là một tập các graphic component được xây dụng dựa trên DFB, vì thế applications dùng các toolkit này được xây dựng rất nhanh.
Xem thêm
- eLinux Directfb
Tag :
DirectFB














