存档在 2014年10月

nand: ECC uncorrectable error detected问题的解决

2014年10月31日
  • 1.uboot命令行中运行下面命令:
  • nand erase 0
    该命令将删除整块nandflash。

  • 2.使用SD启动的uboot重新烧写各个镜像文件。

请按照下面的步骤调试:

  • 1.使用uboot下使用nand erase 0擦除flash。
  • 2.使用SD启动的uboot烧写nand启动的uboot。
  • 3.使用nand启动的uboot烧写linux内核与cramfs。

如何进行SCI、EI检索

2014年10月31日

如何进行SCI检索
学校图书馆-外文数据-分析工具类数据库-SCI科学引文索引-WEB OF SCIENC ETM核心合集

如何进行EI检索
学校图书馆-外文数据-理工类数据库-Engineering Village 2

某算法配置

2014年10月31日

该工程需要glut库,我在网上下载了以下文件,并放入在SoftEngProject目录下新建的一个文件夹3rdl(第三方库的意思):
0.glut.h
1.glut.lib
2.glut.dll
3.glut32.dll
4.glut.lib

在SoftEngProject\GL\glut.h的如下代码
#ifndef __glut_h__
#define __glut_h__
后面添加代码

#ifndef GLUT_DISABLE_ATEXIT_HACK
	#define GLUT_DISABLE_ATEXIT_HACK
#endif
#ifdef WIN32
	#include<windows.h>
#endif
#include <stdlib.h>

/*第一种配置方法*/

一,简单配置(无需修改SoftEngProject\QtProject\Mesh\MeshLoaderQt\MeshLoaderQt.pro)

1.将SoftEngProject\3rdl目录下glut.lib,glut32.lib拷贝到Qt的库下(我的为路径D:\Qt\Qt5.2.1\5.2.1\msvc2012\lib)
2.将SoftEngProject\3rdl目录下glut.dll,glut32.dll拷贝到系统的PATH路径下。(win7_32位一般为C:\Windows\System32)
3.解压SoftEngProject\VRML目录下的david.zip,会看到david.wrl文件
4.编译Qt工程即可,生成的可执行文件路径一般为(以Debug版为例,SoftEngProject\QtProject\Mesh\build-MeshLoaderQt-Desktop_Qt_5_2_1_MSVC2012_32bit-Debug\debug\MeshLoaderQt.exe)

/*第二种配置方法*/

二,标准配置(需修改.\SoftEngProject\QtProject\Mesh\MeshLoaderQt\MeshLoaderQt.pro)
1.将SoftEngProject\3rdl目录下glut.dll,glut32.dll拷贝到系统的PATH路径下。(win7_32位一般为C:\Windows\System32,不想做这一步,可在系统环境变量PATH中添加这些dll的目录)
2.解压SoftEngProject\VRML目录下的david.zip,会看到david.wrl文件
3.修改SoftEngProject\QtProject\Mesh\MeshLoaderQt\MeshLoaderQt.pro最后一行为LIBS += -L../../../3rdl/ -lglut32 -lglu32 -lopengl32

IPNC RDK Link

2014年10月29日
  • 每个link都有自己独立的任务/线程用于完成视频采集或播放等处理;
  • 每个link都可以处理来自多个通道的视频帧数据,每个通道的视频宽高和数据格式都可以不同;
  • A8作为HOST可以用来连接多个link形成数据流的链并对其进行控制;
  • 数据链被建立并启动时,数据链中的每个link将和它的下游link进行帧数据的交互;
  • links之间的帧数据交互可以在多个核心之间进行,并且并不需要A8 HOST的干涉,从而降低A8的开销;
  • 在数据链运行过程中用户可以发送控制信令给任意link来动态设置相关的link参数;

link接口可以分成以下几类:

     
  • link API——被用户调用来配置和控制link的接口;
  •   

  • Inter link API——被其他links调用来交换帧数据的接口;
  •  

  •  link output queue——被其他links通过Inter Link API接口实用的帧buffer队列;

link间的消息传递:
  

每个Link通过一个32位的该LinkId来识别,ID高4位标识了这个Link是在哪个核上运行,低24位标识了该Link的名称.

  

每个Link API都需要这个LinkID参数来发送消息,当用户发送消息到一个Link时,根据这ID函数内部判断这个消息是发给本地的Link还是远端核心的 Link;如果是本地的直接调用BIOS/LINUX API函数,否则就通过Syslink模块的MessageQ发送这个消息到指定的核心,让对端的核心调用对应的函数处理。

link API
  

下面来看看link API的部分接口及相关功能:

System_linkCreate Creates a link ——allocates driver, codec, memory resources.
System_linkGetInfo Get information about a link like number of channels, properties of each channel. MUST be called after System_linkCreate() for a link
System_linkStart Start the link ——starts the driver or codec
System_linkControl Send a link specific control command with optional arguments
System_linkStop Stop the link —— stops the driver or codec
System_linkDelete Deletes a link —— free’s driver, codec, memory resources

Inter link API
  

下面的介绍了在link内部实现的交换帧数据的API,对于用户来说,这部分API是不需要关心的:

System_GetLinkInfoCb Function to return information about a link like number of channels, properties of each channel
System_LinkGetOutputFramesCb unction to return captured or generated or output frames to the caller (another link)
System_LinkPutEmptyFramesCb Function to release consumed frames back to the original link for reuse
System_LinkGetOutputBitBufsCb Function to return generated or output bitstream frame to the caller (another link) –Valid only for Encode Link
System_LinkPutEmptyBitBufsCb Function to release consumed bitstream frames back to the original link for reuse –Valid only for Encode Link

  

在每个link中必须实现一些函数并在初始化时注册这些函数指针给link管理的核心模块,用于帧数据的获取、释放、dump相关状态等。

  

对于任一个link想从它的上游link获取帧数据都需要调用link管理核心函数System_getLinksFullFrames(),该函数内部会发送消息到对应的上游link,触发该link向管理模块注册的回调函数System_LinkGetOutputFramesCb()将帧数据传递给该link;

  

同样的,在当一个link想释放处理完毕的帧buffer给上游link时需要调用link管理核心函数 System_putLinksEmptyFrames(),该函数内部会发送消息到对应的上游link,触发它注册的回调函数 System_LinkPutEmptyFramesCb()将帧buffer回收,用于后续的数据处理;

DM8127″Error initializing emulator:”错误解决办法

2014年10月28日

Linux系统中用SEED-XDS560v2PLUS连接到DM8127,在CCS的target Configurations中的”launch selected configuration”时出现错误

Error initializing emulator:
(Error -2083 @ 0x0)
Unable to communicate with the emulator. Confirm emulator configuration and connections, reset the emulator, and retry the operation.

解决办法:由于使用了转接板,需要使用TI XDS100V1 usb emulator仿真器。

DM8127 IPNC_RDK视频捕获-显示设置

2014年10月26日

今天在阅读Rules.make时,有了一个发现,就是关于视频捕获与显示,前几天测试板子的时候,显示器没显示,会不会是这里的原因呢,先备注,明天测试。

在该文件中有如下的描述,我先解释了,后面再粘贴原文。(以下说的这些标记会覆盖IPNC的普通设置),且要使用如下的标记需要让“IPNC_CONFIG := FULL_FEATURE”,即为全功能。

  • 1.ENC_A8_DEC_USE_CASE
  • 这个usecase用于使能”捕获-编码-解码-显示“这样的数据流,整个选项对于基于IPNC开发的视频会议usecase非常有用。

  • 2.QUAD_STREAM_NF_USE_CASE
  • 这个选项用于四种流的usecase,分别为 H264 1080p@30fps+H264 D1@30fps+H264 CIF@30fps+MJPEG 1080p@5fps,如果设置为yes则1080p的视频流就能被加上噪声滤波,注意是1080P的视频流。

  • 3.CAPTURE_DISPLAY_MODE_ON
  • 这个为一个开关,使能捕获->显示模式。

  • 4.FRAMES_TO_A8
    • 4.1 设置为”YUV”,则会再发送一个流到标准显示器,流向为M3-A8-M3-显示器。
    • 4.2 设置为”RAW”,则会发送原始流到A8,并返回到M3。
    • 4.3注意事项:要这个选项生效,CAPTURE_DISPLAY_MODE_ON必须设置成YES。

如下为标准文件描述:

################################################################################
# Special usecase flags are given here, will override the normal IPNC setting
# User need to ensure that IPNC_CONFIG is in FULL_FEATURE mode for this usecase
################################################################################

# This usecase enables capture + encode + decode + display dataflow
# this  is normally useful for video-conf(视频会议) usecase who use IPNCRDK as codebase
ENC_A8_DEC_USE_CASE := NO

# This is Quad stream usecase of H264 1080p@30fps+H264 D1@30fps+H264 CIF@30fps+MJPEG 1080p@5fps
# In this mode noisefilter is applied only once on 1080p stream and all other resolution are derived from it
QUAD_STREAM_NF_USE_CASE := NO

# This usecase enables Capture + Display mode, normally used for sensor bringup and during IPIPE tunnning
# Set this flag FRAMES_TO_A8 to "YUV" will send secondary stream only with a round trip M3-A8-M3 to reach the SD display
# Set this flag FRAMES_TO_A8 to "RAW" will send RAW frames to A8 and then back to M3
# This flag FRAMES_TO_A8 can be set only if CAPTURE_DISPLAY_MODE_ON is set to YES
CAPTURE_DISPLAY_MODE_ON := NO
FRAMES_TO_A8 := NO

ifeq ($(ENC_A8_DEC_USE_CASE), YES)
    CAPTURE_DISPLAY_MODE_ON := NO
    QUAD_STREAM_NF_USE_CASE := NO
    IPNC_CONFIG := FULL_FEATURE
endif
ifeq ($(QUAD_STREAM_NF_USE_CASE), YES)
    CAPTURE_DISPLAY_MODE_ON := NO
    ENC_A8_DEC_USE_CASE := NO
    IPNC_CONFIG := FULL_FEATURE
endif
ifeq ($(CAPTURE_DISPLAY_MODE_ON), YES)
    QUAD_STREAM_NF_USE_CASE := NO
    ENC_A8_DEC_USE_CASE := NO
    IPNC_CONFIG := FULL_FEATURE
endif
    

512M DM8127 IPNC_RDK存储分布与配置

2014年10月26日

今天看了下关于内存管理的文档,特地记录一下。
内存图在如下的文件中可以看到,如下所示:

Memory Map - 512MB DDR
+--------------+ 
| 80MB         | Linux
|              |
|              |
+--------------+
| 64MB         | CMEM
|              |
|              | 
+--------------+
| 60MB         | (SR1) Bitstream buffer (Cached)
|              |
+--------------+
| 3MB          | Video M3 code
+--------------+
| 14MB         | Video M3 data
+--------------+
| 2MB          | VPSS / DSS M3 code
+--------------+
| 22MB         | VPSS / DSS M3 data
+--------------+
| 1MB          | DSP code
+--------------+
| 10MB         | DSP data
+--------------+
| 128MB        | Tiler buffer 
|              |
+--------------+
| 105MB        | SR(2) Frame buffer 
|              |
|              |
|              | VPSS-VID M3 Frame buffer
|              |
|              |
|              |
|              |
|              |
+--------------+
| 16MB         | (SR0) Syslink MsgQ / IPC List MP (Non-cached)
+--------------+
| 2MB          | VPSS M3 - VPDMA descriptor
+--------------+
| 2MB          | VPSS M3 - FBDev
+--------------+
| 2MB          | Host - VPSS M3 Notify (for FBDev)
+--------------+
| 1MB          | Remote Printf
+--------------+

这只是默认的内存图,我们可以修改各自的大小,但是必须有几点需要遵守。

  • 1. M3 Vedio与M3 VPSS的代码区必须位于内存图的高256M上,从图上可以看出,确实是在高256M内。
  • 2.至少2M的空间分配给Linux内核,用于支持Syslink-Notify,完成VPSS M3与Linux内核在RDK中通信,如果修改了这项配置,需要在uboot中更新参数”notifyk,vpssm3_sva”
  • 3.至少保留2M空间用于RDK的FBDev缓冲区,如果修改了该缓冲区的基地址,需要修改以下文件:
  • ipnc_rdk\ipnc_mcfw\bin\load.sh
    insmod ./kermod/vpss.ko omx=1 sbufaddr=0xbfb00000
  • 4.需要1M空间用于远程调试时各个核之间的共享数据,A8处理器不停的读取该共享存储区并在A8上产生调试信息,如果修改了该项地址则需要按照以下顺序修改文件:
  • ipnc_rdk\ipnc_mcfw\bin\scripts\wait_cmd.sh
    ipnc_rdk\ipnc_mcfw\bin\scripts\send_cmd.sh
    ipnc_rdk\ipnc_mcfw\bin\scripts\send_str.sh

    修改

    ../bin/remote_debug_client.out 0xbff00000 --waitch $1 $2

grep排除文件类型搜索

2014年10月26日

grep 不能指定文件类型,但是可以用find指定文件类型。

  • 指定文件类型搜索,如下为在cpp文件中搜索main_app串。
  • find . -name "*.cpp" | xargs grep -e “main_app”
  • 排除文件类型搜索,排除asm文件,并查找main_app串。
  • find ./ ! -name '*.asm' -type f | xargs egrep -rn "main_app"