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.


 <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   
  =&gt; linux-2.6.32.2/arch/arm/boot   
     
  export INSTALL_MOD_PATH=${PREFIX}   
  make modules   
  make modules_install   
  =&gt; ${PREFIX}/lib/modules   
     
     
  I had the same issue, removing __initdata in   
  &gt; arch/arm/mach-s3c2440/mach-mini2440.c   
  &gt; in mini2440_lcd_cfg array and mini2440_fb_info data structure, solves   
  &gt; the issue.   
  &gt; But after that, I ran other issues, may be I miscompile directfb, i need   
  &gt; to investigate more.    
     
  #=======================================================================   
  # build Directfb 1.7 &amp; 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   
     
  =&gt; install fusion.ko and linux-one.ko to ${PREFIX}/lib/modules/2.6.32.2-FriendlyARM/drivers/char/fusion   
   fusion.h &amp;&amp; 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 &gt;=2.7.7   
  ./configure --prefix=${PREFIX}/usr/local --build=${BUILD} --host=${HOST}   
     
  #fontconfig-2.11.1 &gt;= 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 &amp; 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>  







Wednesday, September 30, 2015
Tag :

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

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  




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

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -