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

时间:2017-04-11     作者:


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


   前提是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 folderGRAPHICS_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 freelicense,中间会提示选择授权类型,编译完成之后,将映像释放到根文件系统里/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的,有鼠标估计程序不好写,性能也会下降吧。如果你要用鼠标的话,需要自己写个显示鼠标光标的程序。