加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]如何在TI的AM335x上面使用SGX加速的有OpenGL支持的QT

(2014-05-30 16:35:08)
标签:

转载

分类: 学习笔记
2014年2月11日增加:
这篇文章讲的是QT4.8,QT5.0的效果更好,请看这篇文章

TI官方的指南请看这里,因为发布时间的关系,这里面已经有很多和最新的软件包不匹配的地方。经过我的努力,我把这个指南中间复杂的部分给做到Buildroot里面去了,基本上实现了“傻瓜式”编译,可通过菜单选择,简单地实现QT下使用SGX硬件加速的OpenGL。
由于本文还涉及到了SGX硬件驱动程序模块的编译,所以看上去还会比较长,但这部分内容没有什么难度。转载请注明来自EE小站,cosine@126.com。

简单的梳理下:
  • 前提是U-boot、内核、文件系统都搞利索了,板子能启动了
TI的Wiki提供了U-boot和内核的说明,地址点这里
TI的SDK里提供了制作好的文件系统,但是太庞大了,可以下载Buildroot自己做一个。
  • 下载我做的Buildroot补丁,和TI图形SDK
补丁的地址在这里
这个补丁是我给Buildroot 2013.05做的,与之相配的TI图形SDK在这里,下“Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin”就可以。
应该2013.05之后一段时间Buildroot版本都可以使用这个补丁。
  • 用SDK编译内核模块
可以参照TI的指南,地址点这里。也可以直接看本文。
  • 用Buildroot制作根文件系统


具体过程如下:

假设Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin下载到了/home/cdu,那么

~ # cd /home/cdu
/home/cdu # chmod 744 ./Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin
/home/cdu # ./Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin

会出来一个交互的安装界面,安装的时候选择“8.x”那项(因为处理器是AM335x),并且把SDK安装到,例如/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01
安装完后,打开/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01/Rules.make

假设你的ARM交叉编译器安装在/usr/local/arm/4.7.3-2,前缀是arm-none-linux-gnueabi-,你的内核在/home/cdu/core335x_bsp/linux-3.2.21,那么就Rules.make中的内容修改成这样

# Set home area (ex /home/user/)
HOME=/home/cdu/core335x_bsp

# Set Toolchain path (ex /home/user/toolchain/arago-2011.09/armv7a)
CSTOOL_DIR=/usr/local/arm/4.7.3-2

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

# Set kernel installation path ( ex /home/user/linux-04.00.01.13 )
KERNEL_INSTALL_DIR=/home/cdu/core335x_bsp/linux-3.2.21

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

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

然后就可以编译了

/home/cdu # cd core335x_bsp/graphics_sdk_4_10_00_01
/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01 # make DESTDIR=/home/cdu/nfsroot OMAPES=8.x

假设你的根文件系统在/home/cdu/nfsroot,那么请确保有/home/cdu/nfsroot/etc和/home/cdu/nfsroot/etc/init.d这两个目录,否则安装时候会出错,接下来安装

/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01 # make DESTDIR=/home/cdu/nfsroot OMAPES=8.x install

这样,SDK库就编译好了,接下来把内核的模块安装到文件系统里,假设内核在/home/cdu/core335x_bsp/linux-3.2.21,已经配置并且编译好了

/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01 # cd /home/cdu/core335x_bsp/linux-3.2.21
/home/cdu/core335x_bsp/linux-3.2.21 # make ARCH=arm modules_install INSTALL_MOD_PATH=/home/cdu/nfsroot

然后需要把内核驱动模块增加到依赖表中,位置在/home/cdu/nfsroot/lib/modules/3.2.21/kernel/drivers/modules.dep,在里面增加这两行:

extra/omaplfb.ko:
extra/pvrsrvkm.ko:

接下来就可以用Buildroot制作文件系统了,假设Buildroot的压缩包buildroot-2013.05.tar.bz2下载到了/home/cdu/core335x_bsp,我做的Buildroot补丁buildroot-am335x.patch下载到了/home/cdu/core335x_bsp

/home/cdu/core335x_bsp/linux-3.2.21 # cd /home/cdu/core335x_bsp
/home/cdu/core335x_bsp # tar xf buildroot-2013.05.tar.bz2
/home/cdu/core335x_bsp # cp buildroot-am335x.patch buildroot-2013.05
/home/cdu/core335x_bsp # cd buildroot-2013.05
/home/cdu/core335x_bsp/buildroot-2013.05 # patch -p1 < buildroot-am335x.patch
/home/cdu/core335x_bsp/buildroot-2013.05 # make menuconfig

然后就可以进行配置,QT在Package Selection for the target > Graphic libraries and applications (graphic/text) > Qt,AM335x的OpenGL支持设置选项在Qt下的Graphics drivers,必须先选中Linux Framebuffer,会出现AM335x SGX OpenGL Dirver,选中并在下方输入图形SDK的路径,例如/home/cdu/core335x_bsp/graphics_sdk_4_10_00_01,其他的选项按需选择即可,接下来就可以编译

/home/cdu/core335x_bsp/buildroot-2013.05 # make

编译过程会自动下载所需的各种软件包,如果没有选中Qt下的Approve free license,中间会提示选择授权类型,编译完成之后,将映像释放到根文件系统里

/home/cdu/core335x_bsp/buildroot-2013.05 # tar xf output/image/rootfs.tar -C /home/cdu/nfsroot

之后,打开/home/cdu/nfsroot/etc/init.d/powervr.ini,把这里面改成

[default]
WindowSystem=libpvrQWSWSEGL.so

将/home/cdu/nfsroot下的文件系统挂载到目标板上,启动以后,输入用户名root登陆,运行

# /etc/init.d/335x-demo
# mv /etc/init.d/rc.pvr /etc/init.d/S99powervr

至此,这个文件系统就支持QT使用SGX硬件加速的OpenGL了。

如果你在配置QT的时候选择了Compile and install demos and examples (with code),那么你可以找到/home/cdu/core335x_bsp/buildroot-2013.05/output/build/qt-4.8.4/examples/opengl/hellogl_es2/hellogl_es2这个文件,把它拷贝到根文件系统里,运行

# hellogl_es2 -qws -display powervr

可以检验是否可以正常工作。

需要说明一下,为了让QT支持OpenGL,AM335x图形处理器的厂家(不是TI,是Imagination Technologies)提供的插件程序让QT的动态链接库禁止鼠标光标显示。现象就是,虽然看不到鼠标,但是还可以用。这个目前还没有解决方法,因为貌似图形处理器是直接操作Frame Buffer的,有鼠标估计程序不好写,性能也会下降吧。如果你要用鼠标的话,需要自己写个显示鼠标光标的程序。

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有