am3354 SGX移植

am3354 SGX移植

什么是SGX

官方手册上说明TI am3354使用POWERVR SGX530图形核心,加速2D/3D图形应用。那么如果要使用3D加速,就必须基于SGX技术,使用视频加速需要Opengl ES2.0,需要调用SGX驱动。

而SGX core并没有包含在ARM core中,但是它的Graphics drivers需要跑在ARM核上,Graphics drivers中含有OS specific driver,它能够将SGX core做内存映射,因此可在ARM core上对图形引擎SGX编程。

  • 首先,移植Qt需要指定它的platform,也就是eglfsdirectfblinuxfb等等;
  • 其次,安装eglfs需要OpenGL图形库;
  • 最后,OpenGL会调用SGX,驱动delicated hardware

linux主线代码中并没有SGX Driver,这部分代码并未开源,而TI提供的Linux SDK添加了这部分代码。

编译SDK

首先从官方获Graphics SDK

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/gfxsdk/latest/index_FDS.html

在编译Graphics SDK前,需要保证内核符号表是新的,因为Graphics SDK需要调用内核符号表。

执行安装Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin

$ ./Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin
This will install Graphics SDK on your computer.  Continue? [n/Y]    y
Type 'y' if you agree to the license agreement [y/N]  y
Where do you want to install Graphics SDK? [/home/long/Graphics_SDK_5_01_01_02] 
  • 修改默认Rules.make文件
HOME=$(SDK_INSTALL_DIR)/graphics

# Set Toolchain path (ex /home/user/toolchain/arago-2011.09/armv7a)
CSTOOL_DIR=$(LINUX_DEVKIT_PATH)

# Set Tool chain prefix (ex arm-arago-linux-gnueabi- )
CSTOOL_PREFIX=`basename $CROSS_COMPILE`

# Set kernel installation path ( ex /home/user/linux-04.00.01.13 )
KERNEL_INSTALL_DIR=$(LINUXKERNEL_INSTALL_DIR)

# Set Target filesystem path ( ex /home/user/targetfs )
TARGETFS_INSTALL_DIR=$(DESTDIR)

# Set installation folder
GRAPHICS_INSTALL_DIR=$(HOME)/Graphics_SDK_5_01_01_02

修改为

HOME=/home/long

# Set Toolchain path (ex /home/user/toolchain/arago-2011.09/armv7a)
CSTOOL_DIR=/work/am335x/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux

# Set Tool chain prefix (ex arm-arago-linux-gnueabi- )
CSTOOL_PREFIX=arm-linux-gnueabihf-

# Set kernel installation path ( ex /home/user/linux-04.00.01.13 )
KERNEL_INSTALL_DIR=/work/am335x/tisdk-7/am335x-linux-3.12.10

# Set Target filesystem path ( ex /home/user/targetfs )
TARGETFS_INSTALL_DIR=/work/am335x/tisdk-7/rootfs

# Set installation folder
GRAPHICS_INSTALL_DIR=$(HOME)/Graphics_SDK_5_01_01_02
  • 执行编译
$ make help
Usage (for build): make BUILD={debug | release} OMAPES={ 5.x | 8.x | 9.x} FBDEV={yes | no} all
      Platform                       OMAPES
      --------                    ------
      OMAP37x/AM37x(SGX core 1.2.5)                5.x
      335x(SGX core 1.2.5 )                      8.x
      43xx(SGX core 1.2.5 )                      9.x
--> Specifying OMAPES is mandatory. BUILD=release and FBDEV=yes by default
Usage (for install): make BUILD=(debug | release} OMAPES={ 5.x | 8.x | 9.x} install
--> See online Graphics Getting Started Guide for further details.

执行编译命令 make BUILD=release OMAPES=8.x SUPPORT_XORG=0 FBDEV=yes all

$ make BUILD=release OMAPES=8.x SUPPORT_XORG=0 FBDEV=yes all
...
$ find -name *.ko
./gfx_dbg_es8.x/bufferclass_ti.ko
./gfx_dbg_es8.x/omaplfb.ko
./gfx_dbg_es8.x/pvrsrvkm.ko
./GFX_Linux_KM/pvrsrvkm.ko
./GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb.ko
./GFX_Linux_KM/services4/3rdparty/bufferclass_ti/bufferclass_ti.ko
./gfx_dbg_es9.x/bufferclass_ti.ko
./gfx_dbg_es9.x/omaplfb.ko
./gfx_dbg_es9.x/pvrsrvkm.ko
./gfx_rel_es8.x/bufferclass_ti.ko
./gfx_rel_es8.x/omaplfb.ko
./gfx_rel_es8.x/pvrsrvkm.ko
./gfx_rel_es9.x/bufferclass_ti.ko
./gfx_rel_es9.x/omaplfb.ko
./gfx_rel_es9.x/pvrsrvkm.ko

编译生成omaplfb.kopvrsrvkm.kobufferclass_ti.ko三个模块文件,其中omaplfs负责和framebuffer的接口,pvrsrvkm负责和用户层服务的接口,bufferclass_ti负责使用proprietary extension,它允许streaming playback through SGX。

  • 安装make OMAPES=8.x install,安装模块到指定TARGETFS_INSTALL_DIR目录
$ make OMAPES=8.x install
exporting necessary variables and installing...
########################################################
Please ensure that PSP Linux kernel is re-built atleast once,
Please refer online guide for further details.
########################################################
creating directories...
copying startup files...
copying user space graphics libraries to target file system...
copying install information to target file system...
copying graphics SDK demos to target file system...

$ find -name *.ko
./opt/gfxlibraries/gfx_rel_es8.x/bufferclass_ti.ko
./opt/gfxlibraries/gfx_rel_es8.x/omaplfb.ko
./opt/gfxlibraries/gfx_rel_es8.x/pvrsrvkm.ko
  • 编译安装内核相关模块
$ make modules
$ make modules_install INSTALL_MOD_PATH=/work/am335x/tisdk-7/rootfs
  • 修改./lib/modules/3.12.10/modules.dep文件,结尾添加
extra/omaplfb.ko:
extra/pvrsrvkm.ko:

测试验证

  • 安装驱动模块
# modprobe pvrsrvkm.ko
# modprobe omaplfb.ko
# lsmod
Module                  Size  Used by    Tainted: G
omaplfb                11188  0
pvrsrvkm              173366  1 omaplfb
  • 运行测试demo
# cd /opt/gfxsdkdemos/
# ls
335x-demo           gfxinstallinfo.txt  ogles2
devmem2             ogles               rc.pvr
# ./335x-demo
0x10205
release8.x
installing 8.x SGX release user libraries

Installing PowerVR Consumer/Embedded DDK 'sgxddk_1.10@2359475' on target

File system installation root is /

Uninstalling existing version sgxddk_1.10@2359475
Uninstallation completed.
boot script rc.pvr -> /etc/init.d/rc.pvr
kernel module pvrsrvkm.ko -> /lib/modules/3.12.10/extra/pvrsrvkm.ko
kernel module omaplfb.ko -> /lib/modules/3.12.10/extra/omaplfb.ko
shared library libGLES_CM.so -> /usr/lib/libGLES_CM.so.1.10.2359475
shared library libusc.so -> /usr/lib/libusc.so.1.10.2359475
shared library libGLESv2.so -> /usr/lib/libGLESv2.so.1.10.2359475
shared library libglslcompiler.so -> /usr/lib/libglslcompiler.so.1.10.2359475
shared library libIMGegl.so -> /usr/lib/libIMGegl.so.1.10.2359475
shared library libEGL.so -> /usr/lib/libEGL.so.1.10.2359475
shared library libpvr2d.so -> /usr/lib/libpvr2d.so.1.10.2359475
shared library libpvrPVR2D_BLITWSEGL.so -> /usr/lib/libpvrPVR2D_BLITWSEGL.so.1.10.2359475
shared library libpvrPVR2D_FLIPWSEGL.so -> /usr/lib/libpvrPVR2D_FLIPWSEGL.so.1.10.2359475
shared library libpvrPVR2D_FRONTWSEGL.so -> /usr/lib/libpvrPVR2D_FRONTWSEGL.so.1.10.2359475
shared library libpvrPVR2D_LINUXFBWSEGL.so -> /usr/lib/libpvrPVR2D_LINUXFBWSEGL.so.1.10.2359475
shared library libsrv_um.so -> /usr/lib/libsrv_um.so.1.10.2359475
shared library libsrv_init.so -> /usr/lib/libsrv_init.so.1.10.2359475
shared library libPVRScopeServices.so -> /usr/lib/libPVRScopeServices.so.1.10.2359475
binary pvrsrvctl -> /usr/local/bin/pvrsrvctl
binary sgx_init_test -> /usr/local/bin/sgx_init_test
binary services_test -> /usr/local/bin/services_test
binary sgx_blit_test -> /usr/local/bin/sgx_blit_test
binary sgx_clipblit_test -> /usr/local/bin/sgx_clipblit_test
binary sgx_flip_test -> /usr/local/bin/sgx_flip_test
binary sgx_render_flip_test -> /usr/local/bin/sgx_render_flip_test
binary pvr2d_test -> /usr/local/bin/pvr2d_test
shader glsltest1_vertshader.txt -> /usr/local/bin/glsltest1_vertshader.txt
shader glsltest1_fragshaderA.txt -> /usr/local/bin/glsltest1_fragshaderA.txt
shader glsltest1_fragshaderB.txt -> /usr/local/bin/glsltest1_fragshaderB.txt

Installation complete!
You may now reboot your target.

Loaded PowerVR consumer services.

测试程序可以正常运行,基本完成了这方面的移植。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值