tag 标签: sgx

相关博文
  • 热度 31
    2016-6-1 17:25
    1664 次阅读|
    0 个评论
    Step 9 : Build Qt Programs   编写 Qt 程序,首先要具备 C++ 基础知识;   A. 打开主机上的 Qt Creator : B. 创建一个新项目: File - New File or Project - Application - Qt Widgets Application 将名字设置为 serial_ test , 目录设置为 /home/maria/qt/qt_workspace/serial_test ; 然后在 manag e 里面,添加新的 Kit : 为 Qt Versions 添加: /home/maria/qt/qt-am335x/qt-everywhere/build/bin/qmake 为 Compilers 添加: /opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gcc 为 Debuggers 添加: /opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gdb 为 Kits 添加新的 am335x-kit ,并将其 sysroot 、 Compiler 、 Debugger 等选成实际的交叉编译类型。 选择 Kits 为刚刚创建的 am335x-kit ,然后一路点击 next 。   C. 将以前的项目 m ainwindow.ui 替代新项目的 mainwindow.ui : D. 将以前的项目 m ainwindow.h 替代新项目的 mainwindow.h : E . 将以前的项目 m ainwindow.cpp 替代新项目的 mainwindow.cpp : (其实我也不想这样的偷懒,但是以前在主机上编写了一个简单的串口应用,正好可以拿来搞这个 ^_^ ) F. 编译项目: Build - Build All G. 将可执行文件拷贝到目标板运行: 生成的可执行文件,存放在 serial_test/build-serial_test-am335x-Debug 目录下 ,将它拷贝到目标板上: ~ # tftp 192.168.1.118 -g -l serial_test ~ # chmod +x serial_test ~ # ./serial_test 然后可以看见 serial_test 的程序界面出现在液晶上 , 编写基础的 Qt 应用真的是很简单,因为它的开发环境和跨平台特性都非常的完善 ^_^ 。 到这里, SGX+OpenGL+Qt5 移植在 AM335x+Linux 上的基本步骤就算是完成了,虽然还有触摸屏 tslib 和字体的问题待解决,但还是不放在本文中啦, maybe 以后调试的时候再补充进来。   Step 10 : About Linux   后记:为什么要选择 Linux 做硬件开发?   如果 Linux 真的像很多人所认为的装 x 专 用,毫无用户体验可言,它不会受到那么多人的喜爱。它所能提供的通透、自由和参与的感觉,是做技术的人不可抗拒的诱惑。它的结构极其健壮简洁,并没有很多 内容来帮助用户,因此你需要花时间(对我来说是很长的时间)去学习它,但是随着学习的深入,你会发现一个自由的世界打开,你能用极其合理的开销实现非常强 大的功能。   对于计算机来说,你不是用户,而是上帝。   使用 Linux 环境做硬件开发,也是同样的感受,随着开发的进行,你会发现你不仅知道怎么做可以实现硬件的功能,你还能知道为什么要这样做。 Linux 对它的使用者完全真诚,它只忠实于事物本身的逻辑,而不会为自身的利益为使用者做任何决定,所有的决定都是为了一个最优的最合理的最强壮的未来,它每一个透明的自由的部件,最终提供给了使用者 unlimited possibility 。   Free 不是免费, free 是自由,你,值得拥有。
  • 热度 25
    2016-6-1 17:25
    1724 次阅读|
    0 个评论
    接下来编译示例程序( qmake 为上步编译时生成,在 /home/maria/qt/qt-am335x/qt-everywhere/build 目录下): $ cd qtbase/examples/ $ ../../build/bin/qmake examples.pro $ gmake -j8 $ gmake -j8 install   编译完成之后,会发现目标文件系统里面增加了 build/examples 目录: $ find . -mmin 1 ./home/maria/qt/qt-am335x/qt-everywhere/build/examples/*   将 ./home/maria 目录拷贝到 SD 的目标文件系统里; 将 ./usr/lib 和 ./usr/include 也拷贝到 SD 卡的目标文件系统里; 运行 Graphics SDK 的 335x-demo ; 此外,还需要执行下面的步骤( Qt 程序会试图获取 /etc/machine-id 的值,如果运行示例程序时报错,可以主机上的 machine-id 文件拷贝过来,另外还要设置屏幕的分辨率值): ~ # tftp 192.168.1.118 -g -l machine-id ~# cp machine-id /etc/ ~ # export QT_QPA_EGLFS_PHYSICAL_HEIGHT=272 ~ # export QT_QPA_EGLFS_PHYSICAL_WIDTH=480   然后执行 Qt 的示例程序(如果报找不到 platform 的错误信息,则执行第二条): ~ # /home/maria/qt/qt-am335x/qt-everywhere/build/examples/widgets/widgets/digitalclock/digitalclock ~ # /home/maria/qt/qt-am335x/qt-everywhere/build /examples/widgets/widgets/digitalclock/digitalclock -platform eglfs   到这里,就可以看到液晶上显示的数字时钟啦~ 运行 Qt 程序的时候,可能会发现终端会打印出很多错误,但是不要害怕这些错误,它们提示的信息往往非常关键,比如需要设置哪些环境变量,或者缺乏哪些库文件或者头文件。另外, arm-linux-gnueabihf-ldd 和 readelf 是非常有用的工具,通过它们来观察 .so 或者可执行程序,往往能够发现很多问题的答案。
  • 热度 27
    2016-6-1 17:23
    1114 次阅读|
    0 个评论
    NOTE :修改 qmake.conf 文件,要特别注意它的 inluce 目录、交叉编译器的设置,以及 INCDIR 和 LIBDIR 是否正确; NOTE :对比 Qt 的 mainline 里面的 qmake.conf ,观察它新增的内容; NOTE : $$QT_INSTALL_DIR/src/3rdparty/powervr/wsegl2 这个目录并不存在,但并不影响编译结果;   另外还要将交叉编译器的 bin 目录加入环境变量 PATH ,拷贝头文件和 lib (为了省事可以把 lib 的内容全都拷贝进目标文件系统,但是这里还是暂时采取需要什么就拷贝什么的方法,你甚至先什么都不做,等到编译报错的时候再去寻找对应的 lib 或者头文件,这样能够更加清晰的理解 Qt 的编译过程) ,再执行 configure 和 make 步骤:   $ export PATH=$PATH:/opt/i686-arago-linux/usr/bin $ mkdir /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/include /home/maria/qt/qt-am335x/roofts.withSDK/usr/ -r   $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/crt* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libts* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/librt. * /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libpthread* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libm.* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libc.* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libc_nonshared.a* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libz.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libjpeg.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libpng* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libnsl.* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libgthread-2.0.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libglib-2.0.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libasound.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libdl.* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libfreetype.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/glib-2.0 /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ -r $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libfontconfig.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/libexpat.so* /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/lib dbus * /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/lib u * /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/ $ cp /opt/ti-sdk-am335x-evm-07.00.00.00/linux-devkit/sysroots/cortexa8hf-vfp-neon-3.8-oe-linux-gnueabi/usr/lib/ libglslcompiler * /home/maria/qt/qt-am335x/roofts.withSDK/usr/lib/   另外,还要将目标文件系统的 include/freetypes2/freetype 软链接成 include/freetype : $ cd /home/maria/qt/qt-am335x/roofts.withSDK/usr/include $ ln -s freetype2/freetype freetype ( 如果 freetypes 报错了就做此修改,没有报错的话就不用管了~ )   $ ./configure –help $ ./configure \ -debug -opensource -confirm-license -shared \ -prefix /home/maria/qt/qt-am335x/qt-everywhere/build \ -sysroot /home/maria/qt/qt-am335x/roofts.withSDK \ -platform linux-g++-64 \ -device linux-TIarmv7-sgx-g++ \ -device-option CROSS_COMPILE=/opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf- \ -D QT_NO_QWS_CURSOR -D QT_QWS_CLIENTBLIT \ -eglfs -opengl es2 -qreal float -v \ -nomake examples -nomake tests   NOTE : configure 的编译选项,需要根据主机和目标板的实际情况慢慢摸索,有的编译选项随着新版本的发布不再支持,有的编译选项被添加在新版本中,有的编译错误即使存在也没有关系,有的编译错误则会影响结果。一般来说,提示“ Just run 'gmake'” 就算是成功。 NO TE : configure 会生成很多 .o 文件,在重新 configure 之前可以编写脚本 , 来删除旧有的 .o 文件。   -prefix: 主机上 Qt SDK 安装的目录; -sysroot: 目标文件系统的根目录; -platform: 主机使用的 mkspecs ; -device: 目标机使用的 mkspecs ,替代 xplatform ; -nomake examples -nomake tests: 不编译示例和测试程序,否则得花很长的时间;   $ gmake -j8 $ gmake -j8 install   这里的 gmake ,是指 GNU Make ,在 Fedora 主机上就是 make ; 编译完成之后,会发现目标文件系统里面增加了 build 目录: $ find . -mmin 1 ./home/maria/qt/qt-am335x/qt-everywhere/build/*  
  • 热度 29
    2016-6-1 17:22
    2142 次阅读|
    0 个评论
    Step 8: Build Qt   http://processors.wiki.ti.com/index.php/Building_Qt http://processors.wiki.ti.com/index.php/Building_Qt_with_OpenGL_ES_accelerated_by_SGX ( NOTE :触摸屏 tslib 的调试暂时不考虑。) 到目前为止的目标文件系统,具备了那些内容呢: 有 etc 目录和其中的启动文件,有存放在 bin 、 sbin 目录下的 busybox 可执行程序, lib 库,其他目录如 home 、 media 、 mnt 、 proc 等,以及存放在 opt 目录下的 Graphics SDK ,包括它的库文件、驱动文件和 demo 文件。只有 demo 文件无错误的运行在目标板上了,才可以往下进行,否则,要继续修改 Kernel 代码或者 Graphics SDK 编译方式。   准备好文件系统,以及解压 Qt 源代码: $ mkdir roofts.withSDK $ cp ../ro otfs/* rootfs.withSDK/ -rv $ tar xvf ../qt-everywhere-opensource-src-5.4.1.tar.gz -C .   从下面这个地址下载 qmake. conf 文件 ,并将它复制进 Qt 源代码目录 ,并根据主机的实际情况修改内容 : http://processors.wiki.ti.com/images/7/76/Linux-TIarmv7-sgx-g%2B%2B.tar.gz   $ tar xvf Linux-TIarmv7-sgx-g++.tar.gz $ ln -s qt-everywhere-opensource-src-5.4.1 qt-everywhere $ cp linux-TIarmv7-sgx-g++ qt-everywhere/qtbase/mkspecs/device/ -r $ vim qt-everywhere/qtbase/mkspecs/device/linux-TIarmv7-sgx-g++/qmake.conf MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib   include(../../common/linux.conf) include(../../common/gcc-base-unix.conf) include(../../common/g++-unix.conf)   load(device_config) QT_QPA_DEFAULT_PLATFORM = eglfs   QT_INSTALL_DIR = /home/maria/qt/qt-am335x/qt-everywhere/qtbase SGX_SDK_ROOT = /home/maria/qt/graphics/Graphics_SDK_5_01_01_02   COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard QMAKE_CFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard   QMAKE_CC = arm-linux-gnueabihf-gcc QMAKE_CXX = arm-linux-gnueabihf-g++ QMAKE_LINK = arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++ QMAKE_AR = arm-linux-gnueabihf-ar cqs QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy QMAKE_STRIP = arm-linux-gnueabihf-strip QMAKE_NM = arm-linux-gnueabihf-nm -P   QMAKE_INCDIR_OPENGL_ES2 = $$SGX_SDK_ROOT/GFX_Linux_SDK/OGLES2/SDKPackage/Builds/OGLES2/Include/ QMAKE_INCDIR_OPENGL_ES2 += $$SGX_SDK_ROOT/include QMAKE_INCDIR_OPENGL_ES2 += $$SGX_SDK_ROOT/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/ QMAKE_LIBDIR_OPENGL_ES2 = $$SGX_SDK_ROOT/gfx_dbg_es8.x/ QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lusc   QMAKE_INCDIR_OPENGL += $$SGX_SDK_ROOT/GFX_Linux_SDK/OGLES/SDKPackage/Builds/OGLES/Include/ QMAKE_LIBDIR_OPENGL = $$SGX_SDK_ROOT/gfx_dbg_es8.x QMAKE_LIBDIR_OPENGL_QT = $$SGX_SDK_ROOT/gfx_dbg_es8.x QMAKE_LIBS_OPENGL_ES1 = -lEGL -lGLES_CM -lIMGegl -lsrv_um -lusc   QMAKE_INCDIR_OPENVG = $$SGX_SDK_ROOT/GFX_Linux_SDK/OVG/SDKPackage/Builds/OVG/Include/ QMAKE_LIBDIR_OPENVG = $$SGX_SDK_ROOT/gfx_dbg_es8.x/ QMAKE_LIBS_OPENVG = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lOpenVG -lOpenVGU   QMAKE_INCDIR_EGL = $$QMAKE_INCDIR_OPENGL_ES2 QMAKE_INCDIR_EGL += $$QT_INSTALL_DIR/src/3rdparty/powervr/wsegl2 QMAKE_INCDIR_POWERVR = $$QT_INSTALL_DIR/src/3rdparty/powervr/wsegl2 QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2 QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um -lGLESv2 -lGLES_CM -lusc   QMAKE_INCDIR += $$QMAKE_INCDIR_OPENGL_ES2 QMAKE_LIBDIR += $$QMAKE_LIBDIR_OPENGL_ES2 QMAKE_LIBS = $$QMAKE_LIBS_OPENGL_ES2 -lts -lrt -lpthread   deviceSanityCheckCompiler() load(qt_config)
  • 热度 20
    2016-6-1 17:20
    1255 次阅读|
    0 个评论
    Step 7 : Use the SDK   首先要修改 bootargs : 修改 bootargs 有很多种方法,比如在编译内核的 menuconfig 时修改其 Boot options ,或者修改 U-Boot 里面的 config 文件,或者在 U-Boot 运行时指定,等等。由于 U-Boot 在 autoboot 的时候会读取 boot 分区下的 uEnv.txt 文件,因此将 bootargs 添加在这个文件中: bootargs=console=ttyO0,115200n8 root=/dev/mmcblk0p2 rootwait init=/sbin/init.sysvinit mem=1024M vram=50M bootcmd=mmc rescan; fatload mmc 0 0x82000000 uImage; \ fatload mmc 0 0x83000000 maria-am335x.dtb; bootm 0x82000000 - 0x83000000 uenvcmd=boot 这个 uEnv.txt 的内容是,设置 bootargs ,并且设置 U-Boot 自启动时从 SD 卡读取 dts 和 uImage 。 U-Boot 是非常轻量且灵活的,它给人很多意想不到的惊喜。   运行 gfxsdkdemos 目录下的示例 : ~ # cd /opt/gfxsdkdemos/ogles2/ /opt/gfxsdkdemos/ogles2 # ./OGLES2ChameleonMan /opt/gfxsdkdemos/ogles2 # ./ OGLES2MagicLantern /opt/gfxsdkdemos/ogles2 # cd /opt/gfxsdkdemos/ogles/ /opt/gfxsdkdemos/ogles # ./OGLESEvilSkull /opt/gfxsdkdemos/ogles # ./OGLESFilmTV   运行 OGLES2ChameleonMan 这个程序的时候 ,有没有觉得画面上的这个人跑得很快,图形也没有命令行界面下的拖影呢 ( 好吧,可能只是俺的心理作用 ~ )。