This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3358移植SGX的问题

Other Parts Discussed in Thread: AM3358, DM3730, AM3357, AM3354, AM3359

最近开发一个项目,使用AM3358,硬件平台,uboot,linux,文件系统都已经调好,现在LCD上能够显示出小企鹅的图标出来.

由于我是用的linux kernel3.2.0,好多工作环境,工具,软件包都已经在这个平台下工作了,不想折腾,就想将ti最新的ti-sdk-am335x-evm-01000000中的Graphics_SDK_

5010102移植到我的系统平台上,编译通过,并正确安装到nfs文件系统中后,安装pvrsrvkm.ko没有大问题,但是安装omaplfb.ko出现以下的错误:

[   90.237843] Unable to handle kernel NULL pointer dereference at virtual addr0
[   90.246411] pgd = ce908000
[   90.249237] [00000000] *pgd=8e17f831, *pte=00000000, *ppte=00000000
[   90.255827] Internal error: Oops: 17 [#1]
[   90.260016] Modules linked in: omaplfb(O+) pvrsrvkm(O)
[   90.265411] CPU: 0    Tainted: G           O  (3.2.0 #1)
[   90.271147] PC is at AllocateDeviceID+0xc/0x54 [pvrsrvkm]
[   90.276832] LR is at PVRSRVRegisterDCDeviceKM+0xfc/0x188 [pvrsrvkm]
[   90.283384] pc : [<bf006d2c>]    lr : [<bf00299c>]    psr: 40000013
[   90.283394] sp : ce913e18  ip : ce913e28  fp : ce913e24
[   90.295382] r10: bf037434  r9 : bf0371ec  r8 : bf037080
[   90.300839] r7 : ce2a2e7c  r6 : 00000000  r5 : ce2a2e04  r4 : 00000000
[   90.307659] r3 : ce757180  r2 : 00000001  r1 : ce757188  r0 : 00000000
[   90.314484] Flags: nZcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[   90.321940] Control: 10c5387d  Table: 8e908019  DAC: 00000015
[   90.327943] Process insmod (pid: 657, stack limit = 0xce9122f0)
[   90.334130] Stack: (0xce913e18 to 0xce914000)
[   90.338684] 3e00:                                                       ce918
[   90.347235] 3e20: bf00299c bf006d2c ce774c80 ce757180 ce2a2e00 bf0391ac bf034
[   90.355787] 3e40: ce913e8c ce913e50 bf037d90 bf0028ac ce913e50 ce913e50 c0040
[   90.364339] 3e60: 00000000 bf039078 bf039078 c05fcdc0 ce912000 0000001c c0060
[   90.372891] 3e80: ce913e9c ce913e90 bf03b010 bf037a50 ce913ef4 ce913ea0 c000c
[   90.381443] 3ea0: ce913ec4 ce913eb0 00000002 00000000 ce919380 d0b46000 ce918
[   90.389994] 3ec0: bf039078 bf039078 ce774140 bf039078 bf039078 ce774140 0000c
[   90.398546] 3ee0: c00678e8 000007fa ce913fa4 ce913ef8 c0068d80 c00085e8 bf034
[   90.407096] 3f00: 00000000 c00679e8 d0b48a40 d0b4ba94 00000000 bf0390c0 c00bc
[   90.415647] 3f20: 00000000 00000000 00000000 00000000 00000000 00000000 d0b46
[   90.424197] 3f40: d0b4b5bc d0b4b485 d0b4d7dc ce757180 000021b4 00002764 00000
[   90.432747] 3f60: 0000001e 0000001f 0000000f 0000000d 0000000c 00000000 ce910
[   90.441297] 3f80: bea07b14 00000069 00000080 c0014868 ce912000 00000000 00008
[   90.449849] 3fa0: c00146c0 c00689a8 4016f540 bea07b14 000ed040 00007fd6 000e0
[   90.458399] 3fc0: 4016f540 bea07b14 00000069 00000080 bea07b1c 000e0956 bea00
[   90.466951] 3fe0: 402a35a0 bea077b0 00027414 402a35b0 80000010 000ed040 00000
[   90.475493] Backtrace:
[   90.478155] [<bf006d20>] (AllocateDeviceID+0x0/0x54 [pvrsrvkm]) from [<bf002)
[   90.490489] [<bf0028a0>] (PVRSRVRegisterDCDeviceKM+0x0/0x188 [pvrsrvkm]) fro)
[   90.502390]  r7:bf037094 r6:bf0370a8 r5:bf0391ac r4:ce2a2e00
[   90.508362] [<bf037a44>] (OMAPLFBInit+0x0/0x57c [omaplfb]) from [<bf03b010>])
[   90.518934] [<bf03b000>] (OMAPLFB_Init+0x0/0x34 [omaplfb]) from [<c0008704>])
[   90.529056] [<c00085dc>] (do_one_initcall+0x0/0x1a8) from [<c0068d80>] (sys_)
[   90.538716] [<c006899c>] (sys_init_module+0x0/0x1b68) from [<c00146c0>] (ret)
[   90.548176] Code: e89da830 e1a0c00d e92dd800 e24cb004 (e5902000)
[   90.554780] ---[ end trace 200998351928e7e7 ]---
Segmentation fault

检查后发现是omaplfb.ko在通过这个函数SysAcquireData(&psSysData),获取kernel系统信息是,psSysData返回空指针导致的.

请问有没有遇到这样现象的?有没有什么解决思路?

谢谢!

  • 今天将SGX去掉,然后QT5.4.1选择使用linuxfb,然后交叉编译产生qmake后,用qmake已经能够生成qt应用程序,而且程序能够在am3358+linux3.2上跑起来.

    但是虽然移植了tslib, qt5.4.1配置时也选择了tslib选项,而且最后plugins/generic下也能找到libqtslibplugin.so,但是程序接收不到触摸屏的输入.

    另外,如果启动ts_print,能够正确得到触摸屏的数据,点击位置,点击或者放开.但是这里发现一个奇怪的现象,当linux启动后,不运行任何程序,超级终端就只显示命令行提示符,这是不断在触摸屏上拖动的话, 超级终端上会自动打印出提示信息,显示USB 1-1: USB disconnect, device number X, X在不断增加,但是如果启动ts_print程序,从USB Touch不断接收数据, 就不会出现USB 1-1的信息.

    感觉像是kernel中usb触摸屏驱动的bug.

  • 没有哪一位回答啊?!自己再顶一顶.

    今天将qt5.4.1和tslib搞定,但是SGX的移植问题还是没有进展.

    有没有哪一位做过将Graphics_SDK_5.01.01.02移植到am3358的kernel 3.2.0上的?帮忙看看问题.谢谢.

  • 你试试

    http://downloads.ti.com/dsps/dsps_public_sw/gfxsdk/4_09_00_01/exports/0001_SGX_AM335x_SGX_graphics_device_registration_using_HW.patch

    我之前omaplfb.ko是类似的crash

    打了这个补丁就好了。

    但我的pvrsrvctl运行的有问题,非常头疼,目前已没搞定sgx移植。

    这个论坛没人懂这个sgx。之前发了个帖子也没人理

  • 请问目前您用的是哪个版本的sdk,如果是ezsdk,直接用sdk自带的graphics sdk就可以。

    如果是processor sdk,已经把sgx集成到了驱动中,http://processors.wiki.ti.com/index.php/Processor_Linux_SDK_Graphics_and_Display#Migration_Guide_from_Processor_SDK_1.x_to_2.x_for_AM3.2C_AM4 

  • qin工

    我用的graphic sdk是Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin这个

    bsp是基于linux-3.2.0-psp04.06.00.08.sdk这个的

  • Processor SDK 02.00.00.00 文件系统里有qt5.5的库,但是没有测试程序,TI能否出一个QT5.5的编译、配置教程。我现在编译通过了,但是运行一直提示This application failed to start because it could not find or load the Qt platform plugin "eglfs",

    即使切换linuxfb,也会提示This application failed to start because it could not find or load the Qt platform plugin "linuxfb"

  • 看了一下,在hands on training的里面关于QT的内容是更新到了processor SDK,可以参考这个来做个demo
    http://processors.wiki.ti.com/index.php/Sitara_Linux_Training:_Hands_on_with_QT?keyMatch=Processor%20Linux%20SDK%20QT&tisearch=Search-EN

    另外,还有一个可以从QT4到QT5的移植参考:

    http://processors.wiki.ti.com/index.php/Qt_4_to_5_Migration?keyMatch=Processor%20Linux%20SDK%20QT&tisearch=Search-EN

    Window System

    One impact of this transition, especially on Embedded Linux systems, is to move away from a native window system like the Qt Window System (QWS) that was provided with Qt 4. Qt 5 does not support QWS. If a Qt application depends on QWS for proper operation, it will need to be adapted. Please see the below for more information:

    The Window System provided with Processor SDK 1.0 on the AM335x and AM437x platforms is EGLFS. Please see the link EGLFS for more information

    EGLFS forces the first top-level window (be it either a QWidget or a QQuickView) to become fullscreen. This window is also chosen to be the root widget window into which all other top-level widgets (for example dialogs, popup menus or combobox dropdowns) are composited. This is necessary because with EGLFS there is always exactly one native window and EGL window surface, and these belong to the widget or window that is created first. This approach works well when there is a main window that exists for the entire lifetime of the application and all other widgets are either non top-levels or are created afterwards, once the main window is shown.

    Matrix Application Launcher included in the Processor Software Development Kit (SDK) is a Qt5 browser, with icons to launch several out of box example applications. Non GUI demos work fine within the browser context., however, Qt5 demos (calculator, browser, etc.) launched via Matrix interfere with Matrix, competing for the same surface. When these competing applications attempt to repaint the surface concurrently, it appears like flicker. Hence, we disable Matrix when any GUI based demo is launched, and re-launch Matrix upon exiting of that GUI demo.

  • dong yan1 说:

    qin工

    我用的graphic sdk是Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin这个

    bsp是基于linux-3.2.0-psp04.06.00.08.sdk这个的

    请问您用的是哪个版本的sdk?

    AM335x有两套sdk,对于3。2的kernel,属于ezsdk,graphics sdk 和 kernel在一个sdk包中就是配套的,不建议分别升级,也就是说按sdk升级。

    对于processor sdk,sgx驱动以及集成到qt中了,建议直接使用sdk中qt版本。

    请问您目前编译graphics sdk的需求是什么?

  • qin工

    需求就是跑qt5,发现很卡,刷屏很慢。所以想到如果把sgx530用起来,会不会快点。

    我用的是天嵌科技的3.2.0的kernel

    我看代码和linux-3.2.0-psp04.06.00.08这个版本比较像,所以就判断大概是这个sdk里面出来的内核代码。


    你是说我的graphics sdk不应该用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin,而是应该用和目前kernel配套的?

    能告诉我哪里有下载吗?

    谢谢!

  • 我想问的不是应用的编译,是QT库的编译。直接用SDK的QT库运行普通程序没问题。现在我们想自己编译QT库,不想要SDK现成的

    按照MariannaZhu 是文章操作,./configure时去掉了qreal float,否则无法编译通过,提示找不到qBound。

    http://www.eefocus.com/marianna/blog/15-04/311437_e4f0a.html

    我的configure:

    #!/bin/bash

    CRTOOL_DIR=/opt/ti-processor-sdk-linux-am335x-evm-01.00.00.03/linux-devkit/sysroots/x86_64-arago-linux/usr/bin

    ./configure \
    -opensource -confirm-license -shared \
    -prefix ../../qt-5.5-arm \
    -platform linux-g++-64 \
    -device linux-TIarmv7-sgx-g++ \
    -device-option CROSS_COMPILE=$CRTOOL_DIR/arm-linux-gnueabihf- \
    -qt-libjpeg \
    -qt-libpng \
    -no-sse2 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle \
    -D QT_NO_QWS_CURSOR -D QT_QWS_CLIENTBLIT \
    -eglfs -opengl es2 -v \
    -I/usr/local/tslib/include \
    -L/usr/local/tslib/lib

    qmake.conf文件修改为:

    #
    # qmake configuration for building with arm-linux-g++ - DM3730
    #

    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          = $$PWD/../../..
    QT_INSTALL_DIR          = /opt/QT/qt-everywhere-opensource-src-5.5.0/qtbase
    SGX_SDK_ROOT            = /usr/local/Graphics_SDK_5_01_01_02

    TSLIB_INSTALL_DIR        = /usr/local/tslib/
    TSLIB_INCDIR            = $$TSLIB_INSTALL_DIR/include
    TSLIB_LIBDIR            = $$TSLIB_INSTALL_DIR/lib
     
    # CRTOOL_DIR=/opt/ti-processor-sdk-linux-am335x-evm-01.00.00.03/linux-devkit/sysroots/i686-arago-linux/usr/bin
    CRTOOL_DIR=/opt/ti-processor-sdk-linux-am335x-evm-01.00.00.03/linux-devkit/sysroots/x86_64-arago-linux/usr/bin
    COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard

    # modifications to g++.conf
    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++

    # modifications to linux.conf
    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

    #Do not edit beyond this
    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 += $$TSLIB_INCDIR
    QMAKE_INCDIR += $$QMAKE_INCDIR_OPENGL_ES2
    QMAKE_LIBDIR += $$QMAKE_LIBDIR_OPENGL_ES2
    QMAKE_LIBDIR += $$TSLIB_LIBDIR
    QMAKE_LIBS = $$QMAKE_LIBS_OPENGL_ES2 -lts -lrt -lpthread
     
    deviceSanityCheckCompiler()
    load(qt_config)

    编译完成后运行:

    /usr/share/qt5/examples/widgets/widgets/calculator/calculator   -platform linuxfb
    This application failed to start because it could not find or load the Qt platform plugin "linuxfb".

    Reinstalling the application may fix this problem.
    Aborted
    root@am335x-evm:~#



  • 因为现在 客户对编译器版本、内核版本和QT版本都有 要求,内核必须采用3.14 ,交叉编译器必须采用linaro4.9的,QT要求QT5。

    但是sgx驱动是信赖内核的,现在不能用SDK 02.00.00.00里的QT库,因为无法运行opengl的QT程序。目前我们选择使用采用sdk 02.00.00.00的编译器,内核和用sdk 1.0的。文件系统用2.0的,qt库不能直接用,需要重新编译。

  • dong yan1 说:

    qin工

    需求就是跑qt5,发现很卡,刷屏很慢。所以想到如果把sgx530用起来,会不会快点。

    我用的是天嵌科技的3.2.0的kernel

    我看代码和linux-3.2.0-psp04.06.00.08这个版本比较像,所以就判断大概是这个sdk里面出来的内核代码。


    你是说我的graphics sdk不应该用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin,而是应该用和目前kernel配套的?

    能告诉我哪里有下载吗?

    谢谢!

    我建议您升级kernel,因为您的kernel非常老了,请用ti最新的kernel。

  • qin工

         如果我升级到am335x-evm-sdk-src-02.00.00.00.gz  这个bsp,里面的kernel是4.1.6的

       然后sgx的sdk用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 

        这样的组合能匹配吗?


    谢。

  • 不能,这个是4.1内核和uboot源码,缺少很多资源,建议用ti-processor-sdk-linux-am335x-evm-02.00.00.00-Linux-x86-Install.bin安装完整的SDK。

    Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 可以在3.14内核上用,但是4.1内核改动很大,Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 应该是不支持的。 TI自己也并没有使用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin来制作 SDK 2.0,而的用新的代码(针对4.1内核的)。

    看SDK里的software_manifest.htm就知道了。

    没特殊需求的话,直接使用SDK 2.0 里自带的QT库,理论上支持opengl。TI没有提供针对processor-sdk 移植sgx和qt 的文档,要移植的话只能自己摸索,难度较大。

  • 你好,我想咨询下,我用的是processor sdk 1.0 ,系统是3.14 我不太明白,你说的SGX直接支持是什么意思?我把系统移植好,用提供的QT 库就可以直接跑opengl了吗? 我看了点网上的资料,说如果QT用SGX 做OPENGL,2D加速,好像系统里要改很多东西,设备树也的改,,请问是这样吗?

  • xiyuan ma 说:

    你好,我想咨询下,我用的是processor sdk 1.0 ,系统是3.14 我不太明白,你说的SGX直接支持是什么意思?我把系统移植好,用提供的QT 库就可以直接跑opengl了吗? 我看了点网上的资料,说如果QT用SGX 做OPENGL,2D加速,好像系统里要改很多东西,设备树也的改,,请问是这样吗?

    SGX 是GPU 核,只有AM3354、AM3357、AM3359有这个核,这个核可以进行3D或者后端显示的加速。

    如果您选的AM335x有GPU核,建议最好升级到processor sdk 2.0, 在2.0中,Linux已经默认集成了SGX到系统中,不用特别的配置。

    可以参考 http://processors.wiki.ti.com/index.php/Processor_Linux_SDK_Graphics_and_Display#Migration_Guide_from_Processor_SDK_1.x_to_2.x_for_AM3.2C_AM4

  • dong yan1 说:

    qin工

         如果我升级到am335x-evm-sdk-src-02.00.00.00.gz  这个bsp,里面的kernel是4.1.6的

       然后sgx的sdk用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 

        这样的组合能匹配吗?


    谢。

    请您下载ti的processor sdk 2.0,就不用配置这个了

  • Richard.T 说:

    不能,这个是4.1内核和uboot源码,缺少很多资源,建议用ti-processor-sdk-linux-am335x-evm-02.00.00.00-Linux-x86-Install.bin安装完整的SDK。

    Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 可以在3.14内核上用,但是4.1内核改动很大,Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 应该是不支持的。 TI自己也并没有使用Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin来制作 SDK 2.0,而的用新的代码(针对4.1内核的)。

    看SDK里的software_manifest.htm就知道了。

    没特殊需求的话,直接使用SDK 2.0 里自带的QT库,理论上支持opengl。TI没有提供针对processor-sdk 移植sgx和qt 的文档,要移植的话只能自己摸索,难度较大。

    是的,graphic sdk下对应的库不开放源码,不推荐自己移植,建议按照sdk里的匹配。

  • 你好,十分谢谢了!我选的芯片是3354带GPU的,我本来相装2.0的,但我的系统是32位的,我看2.0是64位的BIN,,我是不要是要换个64位系统才可以·?

    或者我内核取出来,用32位的GCC编译,可以不?

  • xiyuan ma 说:

    你好,十分谢谢了!我选的芯片是3354带GPU的,我本来相装2.0的,但我的系统是32位的,我看2.0是64位的BIN,,我是不要是要换个64位系统才可以·?

    或者我内核取出来,用32位的GCC编译,可以不?

    最好按照sdk文档的要求搭建环境,用32位的GCC编译,我没有试过,如果有问题,有点麻烦,没必要花时间搞这个。

  • 谢谢了!我还是先装64位ubuntn 试试!

  • 不开源不是问题,关键是TI并没有3.14内核对应的Graphic SDK,

    Graphics_SDK_setuplinux_hardfp_5_01_01_02.bin 只支持到3.14内核,QT版本5.4.1。

    SDK 2.0才支持QT 5.5,但是内核已经升级到4.1了。

    有些客户原本用了3.14的内核,但是又想用QT5.5,TI并没有考虑这点,强制换内核无疑是增加了开发周期,还要重新进行测试。

  • 明白了。多谢!

  • @Jerry Wu     我之前在335x的平台上编译过qt4,现在想编译qt5,最近在尝试,但是一直没能成功。

    碰巧看到你有做过这块,麻烦分享一下你的经验。最好发一份编译文档,万分感谢!

  • @Richard.T,问题解决了没有,学习学习

  • 这是我的笔记,你可以看看: http://bbs.21ic.com/blog-62511-140024.html

  • 我也遇到了和你一样的问题,你解决了吗?我是3.14内核,QT5.6.1 GPU应该么问题了,反正那人可以跑

    运行程序后就是 

    This application failed to start because it could not find or load the Qt platform plugin "xcb"
    in "".