DirectFB porting to RTS7751R2D (SH-4/SM501) platform

Development Environment

SH-4 target platform environment

Item

Element

Resources

Hardware

Renesas RTS7751R2D (Renesas SH-4 processor board)

RTS7751R2DHandlingManual

Silicon Motion Inc SM501 (Renesas platform on board graphics)

Software

kernel = CE-LINUX-2.4.20

ToolChains

loader = SH-LILO

DirectFB = DirectFB-0.9.20

http://www.directfb.org/download/DirectFB/DirectFB-0.9.20.tar.gz

freetype = freetype-2.1.3

http://heanet.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.3.tar.gz

libjpeg = jpeg-6b

ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz

libpng = png-1.2.2

http://keihanna.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.2.tar.gz

zlib = zlib-1.1.4

http://www.zlib.net/zlib-1.1.4.tar.gz

x86 host machine environment

Item

Element

Resources

OS

Linux ( Redhat 7.3 )

http://ftp.redhat.com/pub/redhat/linux/7.3/

host compiler

gcc 2.9.6

http://www.gnu.org/software/gcc/

cross compiler

gcc 3.2.3 ( CELF sh-4 compiler posted by Lineo Solutions )

ToolChains

Install DirectFB

Prepare libraries used in DirectFB

        CC  = /usr/local/bin/sh4-linux-gcc 
        CPP = /usr/local/bin/sh4-linux-cpp 
        CXX = /usr/local/bin/sh4-linux-g++ 

        modify configure file for cross compile
        line 548 : change "gcc" to "sh4-linux-gcc"

        # ./configure --enable-shared
        # make
        # cp .libs/libjpeg.so* /usr/local/sh4-linux/lib

        # ./configure --shared

        modify Makefile for cross compile
        line 24 : LDSHARED=/usr/local/bin/sh4-linux-gcc -shared -Wl,-soname,libz.so.1
        line 28 : LIBS=libz.so.1.1.4

        # make
        # cp libz* /usr/local/sh4-linux/lib

        # cp scripts/makefile.linux Makefile

        modify Makefile for cross compile
        line 11 : change "gcc" to "sh4-linux-gcc"

        # make
        # cp libpng12.so* /usr/local/sh4-linux/lib

        # ./configure --host=sh4-linux
        # make 
        # cp objs/.libs/libfreetype.so* /usr/local/sh4-linux/lib
        # cp -r include/* /usr/local/sh4-linux/include

        adopt patch upon DirectFb source directory

        # gzip -d -c DirectFB-0.9.20-ftpath.patch.gz | patch -p0 
        # ./configure --host=sh4-linux \ 
        #             --disable-sdl \ 
        #             --with-ftpath=/usr/local/sh4-linux  
        #             --with-gfxdrivers=sm501 
        # make 

        If error occurs modify interfaces/IDirectFBFont/Makefile
        line 86 : remove "-lfreetype"

        # mkdir /usr/lib
        # mkdir /usr/local/share
        # mkdir /usr/local/share/directfb-examples
        # mkdir /usr/local/lib/
        # mkdir /usr/local/lib/directfb-0.9.20
        # mkdir /usr/local/lib/directfb-0.9.20/gfxdrivers
        # mkdir /usr/local/lib/directfb-0.9.20/inputdrivers
        # mkdir /usr/local/lib/directfb-0.9.20/interfaces
        # mkdir /usr/local/lib/directfb-0.9.20/interfaces/IDirectFBFont
        # mkdir /usr/local/lib/directfb-0.9.20/interfaces/IDirectFBImageProvider
        # mkdir /usr/local/lib/directfb-0.9.20/interfaces/IDirectFBVideoProvider
        # mkdir /usr/local/lib/directfb-0.9.20/systems

        move to libjpeg's directory
        # cp .libs/libjpeg.so* /mnt/usr/lib

        move to zlib's directory
        # cp libz.so* /mnt/usr/lib

        move to libpng's directory
        # cp libpng12.so /mnt/usr/lib/libpng.so
        # cp libpng12.so.0 /mnt/usr/lib/libpng.so.0
        # cp libpng12.so.0.1.2.2 /mnt/usr/lib/libpng.so.0.1.2.2

        move to freetype's directory
        # cp objs/.libs/libfreetype.so* /mnt/usr/lib

        move to DirectFB's directory
        # cp src/.libs/libdirectfb.so /mnt/usr/lib
        # cp src/.libs/libdirectfb-0.9.so* /mnt/usr/lib
        # cp gfxdrivers/sm501/.libs/libdirectfb_sm501.so /mnt/usr/local/lib/directfb-0.9.20/gfxdrivers
        # cp inputdrivers/joystick/.libs/libdirectfb_joystick.so /mnt/usr/local/lib/directfb-0.9.20/inputdrivers
        # cp inputdrivers/keyboard/.libs/libdirectfb_keyboard.so /mnt/usr/local/lib/directfb-0.9.20/inputdrivers
        # cp inputdrivers/ps2mouse/.libs/libdirectfb_ps2mouse.so /mnt/usr/local/lib/directfb-0.9.20/inputdrivers
        # cp inputdrivers/serialmouse/.libs/libdirectfb_serialmouse.so /mnt/usr/local/lib/directfb-0.9.20/inputdrivers
        # cp inputdrivers/sonypi/.libs/libdirectfb_sonypi.so /mnt/usr/local/lib/directfb-0.9.20/inputdrivers
        # cp interfaces/IDirectFBFont/.libs/libidirectfbfont_*.so /mnt/usr/local/lib/directfb-0.9.20/interfaces/IDirectFBFont
        # cp interfaces/IDirectFBImageProvider/.libs/libidirectfbimageprovider_*.so /mnt/usr/local/lib/directfb-0.9.20/interfaces/IDirectFBImageProvider
        # cp interfaces/IDirectFBVideoProvider/.libs/libidirectfbvideoprovider_*.so /mnt/usr/local/lib/directfb-0.9.20/interfaces/IDirectFBVideoProvider

Prepare Demo software

        Modify Makefile in src directry as
                "CC = gcc" to "CC = sh4-linux-gcc" 
                "LIBADDS = -L/usr/local/lib -ldirectfb -lpthread -ldl" to 
                "LIBADDS = -L/usr/local/sh4-linux/lib -ldirectfb -lpthread -ldl" 
        Adopt same modification to each Makefile in src/df_knuckles、src/df_neo、src/spacedream

Install Demo program

Benchmark program

Cross compiling

Writing DirectFB driver

Graphics driver detection procedure

Enabling hardware graphics acceleration capability

SM501 driver development

reference driver

Drawing API prepared for SM501

API

Operations

sm501_set_src

Set source address for BLIT operation. You need to assign VRAM physical address to source address.

sm501_set_dest

Set destination physical address and color depth for BLIT and drawing operation.

sm501_set_colorkey

colorkey setting, it defines transparent color for colorkeyed BLIT operation. Color compare regiser is used in SM501 to enable this operation. You can define transparent color to the SM501 color compare register, then SM501 does not transfer this color when doing BLIT operation. So it looks transparent.

sm501_set_color

Define drawing color setting

sm501_set_clip

Save clipping coordinates value to the structure, and set SM501 clipping register as well

sm501CheckState

This bit returns hardware acceleration capability. You need to refer each graphics spec, and you also care for color format that graphics supports

sm501SetState

Do pre-process for acceleration

sm501FillRectangle

Do fill rectangle, using SM501 2D drawing engine

sm501DrawRectangle

Draw rectangles. SM501 does not have rectangle drawing capability, so draw four lines to draw rectangle in this driver

sm501Blit

Do BLIT operation, using SM501 2D drawing engine

sm501StretchBlit

Do Stretch BLIT To avoid SM501 2D engine stretch function limitation, we use CSC (color space conversion) function instead. Colorkeyed stretch BLIT can not be support in this driver.

sm501DrawLine

Draw line, using SM501 2D drawing engine. Use shortstroke command for simple vertical / holizontal line,and use line command for other kind of line.

sm501fill_tri

Draw triangle with filling inside. As SM501 does not have hardware triangle drawing capability,we draw triangle by software. However we can use horizontal line draw capability in SM501, so seems to achieved a little better performance than all software drawing.

sm501FillTriangle

Fill triangle, actual operation execute in subroutine sm501fill_tri

driver_get_abi_version

Returns version information

driver_probe

This should return check result of expected graphics chip is exist or not. At this moment, this driver retunes always TRUE (=SM501 exist)

driver_get_info

Returns driver's information

sm501_release_resource

Do close operation

driver_init_driver

Initialize SM501 2D engine and create function table

driver_init_device

Initialize device structure

driver_close_device

Do nothing at this moment

driver_close_driver

Do nothing at this moment

DirectFB porting notes

Reference

Resources

logs

source archives

patches

kernel, root_fs

PortDirectFB (last edited 2008-05-07 18:22:14 by localhost)