遇到的几个错误:
Cannot set the output
Error in opening display device不知道是不是驱动加载有问题,重启了下电脑和板子就好了
===================
root@210.42.106.200:/opt/Free_demo/1ch_video_loopback# ls
1ch_loopbak cmemk.ko drv.ko loadmodules.sh unloadmodules.sh
root@210.42.106.200:/opt/Free_demo/1ch_video_loopback# ./unloadmodules.sh
ERROR: Module drv does not exist in /proc/modules
ERROR: Module cmemk does not exist in /proc/modules
root@210.42.106.200:/opt/Free_demo/1ch_video_loopback#
驱动先加载后,才能卸载,否则会出错。
lsmod //查看已经加载的驱动的
============================
ccs工程拷贝的时候,会出现的问题:
无法找到 XXX.h
但是 显然这个头文件是存在的
原因是: 加载头文件的时候 找不到路径了
在 ccs 的 project--build options[选中 dsp 这个工程 ,然后 ````]
Build 下面的 C6000 Compile
下面的 Include Options
的 add dir to #include search path 里面
添加上 该头文件所在的目录 即可。
==============================
nfs 出现问题后,try了好久,一直未果,再看一遍关于nfs的:
Host #tar -zxvf SEED-_DVS6467_SDK.tar.gz
dvsdk_1_40_02_33 该目录下为 DVEVM 与 DVSDK 套件,包括各种 cmen、
dsplink、framework components、codec engine、demo 源码等
mv_pro_4.0.1 该目录下为 ARM 端的 armv5t 交叉编译,linux 内核以 及目标文件系统;
nfs 该目录为配置完毕的 NFS 文件系统;
配置 NFS 文件系统服务
修改/etc/exports 文件,添加如下内容
/opt/nfs
*(rw,sync,no_root_squash,no_all_squash)
运行以下命令启动 nfs 服务:
Host# /usr/sbin/exportfs -a
Host# /sbin/service nfs restart
=======================
关于uImage, 关于通过tftp下载内核到开发板
uImage 是内核镜像
通过tftp下载到开发板上
SEED-DVS6467 的内核可以通过 tftp 服务下载到 SEED-DVS6467 的 DDR 空间进
行引导启动 Linux 内核,测试新编译的内核。----------------------------------------这就是 linux内核的TFTP Boot启动
【uImage 可以在这个目录找到:
/opt/mv_pro_4.0.1/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.10_mvl401
_LSP_01_30_00_082/arch/arm/boot/uImage
】
uImage 是通过 tftp 服务下载到开发板的,
是通过串口线,
参数设置如下:
特率 115200,数据位 8,奇偶校验无,停止位 1,数据流控制无;
在autoboot之前按下 enter ,中断系统,可以配置U-Boot 环境变量,用于tftp下载内核启动:
配置 TFTP 服务器 IP 地址:
Target# setenv serverip xxx.xxx.xxx.xxx
[其中,xxx.xxx.xxx.xxx 为 Linux 服务器的 IP 地址;]
配置 SEED-DVS6467 平台的 IP 地址:
Target# setenv ipaddr xxx.xxx.xxx.xxx
[其中,xxx.xxx.xxx.xxx 为 SEED-DVS6467 的 IP 地址;]
配置网卡地址
Target# setenv ethaddr 00:0C:29:94:D7:D6
[这个地址怎么得到的来着?]
配置设置启动方式
Target# setenv bootcmd tftp
保存以上设置,并将 SEED-DVS6467 重新上电
Target# save
Note:重新上电的作用是使刚刚设置的 MAC 地
Note:重新上电的作用是使刚刚设置的 MAC 地址生效
配置启动参数,在提示符下输入以下配置参数:
Target# setenv bootargs mem=80M console=ttyUSB0,115200n8 noinitrd rw
ip=210.42.106.200:255.255.255.0:210.42.106.200:251 root=/dev/nfs
nfsroot=210.42.106.153:/opt/nfs video=dm64xxfb:output=pal↙
Note:ip 也可以根据实际情况设置;
其中 rw ip 后 IP 为 SEED-DVS6467 平台的 IP 地址,掩码,网关,
nfsroot 后 IP 为 Linux 服务器的 IP 地址;
↙为回车;
以上 IP 地址仅为参考;
配置自动启动并保存:
Target# setenv autostart yes
Target# save
下载内核:
Target# tftp 0x80800000 uImage
其中,0x80800000 为 DDR 的地址空间,该命令将 uImage 内核下载到 DDR 中,
下载完成时从 DDR 地址引导 Linux 内核启动;
内核启动完成,
显示登陆提示符: xxxxx
如
login: 此时系统启动已经完毕,用户以 root 账号登陆,可以进行相关操作。
Note: 关 于 U-Boot 启 动 更 详 细 的 命 令 解 释 , 可 以 参 考
====================================
seed sdk 解压后得到:
压SEED-DVS6467_SDK.tar.gz文件后得到:
nfs调试网络文件系统目录/opt/nfs
DVSDK目录: /opt/dvsdk_1_40_02_33
ARM v5t交叉编译器目录: /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/bin
NFS文件系统目录: /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/target
Linux内核源码目录: /opt/mv_pro_4.0.1/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.10_mv l401_LSP_01_30_00_082
=============================================================
关于开发板de功能模块:
CMEM 模块==========
============
由于应用程序是运行在 MontaVista Linux 之上,
在应用程序里进行的地址空间都是虚拟地址,
实际上的物理地址空间不一定是连续的,
当将这个指针传递给 DSP 端的算法时,
DSP 不能够进行处理,
因为 DSP 端的算法运行在 DSPBIOS 之上,
而 DSP端只能访问实的物理地址,
为了解决这个问题,
TI 提供了一个 CMEM 模块,用于解决这个问题。
CMEM 是一个连续物理存储空间分配模块,
使得 ARM 端 Linux 进程和 DSP 端算法之间能够共享缓冲区。
当应用程序需要在共享缓存区动态申请一个连续的物理空间时,
通过调用 CMEM 的 API 可以实现,申请得到的空间可以供 DSP 端访问,
进行算法处理时数据的传递与处理。
====SEED-SDK 中集成了 CMEM 模块,CMEM 模块安装在 Linux 服务器下的路径为:
/opt/dvsdk_1_40_02_33/cmem_2_10;
DSPLINK 模块==========
============
DSPLINK 即 DSP/BIOS(TM) LINK 是基于 DaVinci 架构处理器的 ARM 与 DSP 端进行通信,
DSP LINK 提供了一套通用的 API,
从应用层抽象出 ARM 与 DSP 的物理连接特性,
从而降低用户开发程序的复杂度。
DSPLINK 可以为用户提供以下 API 服务:
基本的处理器控制;
基于逻辑通道的数据传输;
基于 DSP/BIOS 的 MSGQ 模块的消息传递机制,
支持 Zero Copy 和 Processor Copy 两种物理机制的消息传递。
在实际应用中,应用可能不需要 DSPLINK 提供的所有模块功能,而且可能只需要
一种消息传递机制,因此 TI 的 DSPLINK 提供了可配置功能,用户可以根据自己的需
要进行裁剪配置,以满足应用需求。
=====================================
DSP LINK 软件架构如下图所示:
DSPLINK GPP端
从上图看, 在GPP端,一般运行一个操作系统,基于 GPP上还有以下模块:
OS抽象层 :该层包含了 DSPLINK需要的一些通用的OS服务部件,
提供 一套通用的 API 与OS的其他组件隔离,其他
组件通过API 访问不进行直接的访问。而此特性也使
DSPLINK可以方便的移植到不同操作系统中。
LINK Driver :该层包含了基于 GPP与DSP的物理连接的底层控制
操作,负责GPP与DSP之间的数据传输和DSP的运行等操作
Processor Manager:该层维护一个针对所有模块的Book-Keeping信息,
通过API 给用户提供通过 LINK Driver的控制操作。
DSP/BIOS LINK API:该层是提供给 GPP端的接口,是非常轻小型的组件,
API 层可以认为是基于 PROCESSOR MANAGER 和LINK DRIVER之上的层。
DSPLINK DSP端
LINK DRIVER是DSP/BIOS 中驱动的一部分,该部分驱动只负责基于物理连接之
上与GPP之间的交互。DSP端没有DSPLINK的API,通信是基于 DSP/BIOS
TM模块上的SIO 、GIO 、MSGQ模块实现
PROC组件表述应用空间的DSP处理器,PROC 是处理器的缩写。该组件提供以下服务:
初始化DSP,使之能从GPP端进行访问;
加载DSP的代码至 DSP处理器;
从DSP代码制定的地址运行 DSP程序;
读写DSP端的地址空间;
停止DSP端程序的运行;
其他一些平台专有的控制操作;
目前版本只支持一个处理器,而 API 设计支持多个 DSP处理器,因此为提供了一
个processorId参数以支持以后的多处理器功能。
CHNL 是channel 的缩写,该组件表述应用空间的一个逻辑数据传输通道,负责
GPP与DSP之间的数据传输。通道 channel 的概念如下述:
一种GPP与DSP端传输数据方式
一个基于GPP与DSP的物理连接上的逻辑实体映射
唯一的一个数字标识一个专用连接到DSP的一组 channel 中的某个channel 无方向性,
通道方向可以在运行时进行配置;
多通道复用在DSP端与GPP端的一条物理连接上,物理连接基于link 和相关 link驱动的特性。
被传输的数据中不包含目的和源地址的任何信息,数据发送与接收端的数据通路需要应用前进行显式的建立。
该组件采用issue-reclaim 模式进行数据传输,基于
DSP/BIOS TM的SIO 模块模仿 issue-reclaim 行为模式。
MSGQ是message queue的缩写,表述基于message的队列,
负责GPP与DSP端的可变长度的短消息交互,
基于DSP/BIOS[TM]的MSGQ模块实现。
message的发送接收都通过消息队列实现,消息接收者从消息队列接收信息,
而消息发送者将数据写入到消息队列中,一个消息队列只可以有一个接收者,但可以
有多个发送者。一个任务可以读写多个消息队列。
POOL
此模块提供了API 用于配置共享内存区域,同时还提供两个 CPU间的缓存数据同步的API 接口。
此模块提供如下功能:
通过调用打开(open)和关闭(close)配置共享内存区域;
在共享内存区域内分配或释放缓存;
分配的内存地址可以在不同的地址空间内转换;
在不同CPU核之间实现内存数据的同步。
NOTIFY
此组件允许应用程序为发生在远程处理器上的事件通知(Notification )注册,并发送事
件通知给远程的处理器。允许应用程序为远程处理器上的事件注册一个带事件回调函数;使
能应用程序发送事件通知到远程处理器;同时,应用程序也可以发送一个事件处理的选项值。
Notify组件为事件通知定义了优先级,优先级通过事件编号来实现,低编号的事件享有
更高的优先级。如果事件通知不再需要使用,应用程序也可以实时注销其相应的回调函数。
MPCS
应用程序MPCS 实现GPP和DSP(Multi-Processor Critical Section)互斥访问共享
的数据结构。应用程序有时候需要定义属于自己的,并能够被多个处理器访问的数据结构,
用于多个处理器之间信息的通信。但是,应用程序必须保证多个处理器,或者每个处理上的
各个任务之间互斥的访问这些数据结构,从来保证数据的连贯性。为了实现这个设想,MPCS
被用来支持这个功能。
在拥有可以共同访问的内存区域的多处理器系统中,可以实现GPP和DPS之间的
MPCS 。为了防止没有共享存储区域的情况出现,该模块内部实现了MPCS 组件要求的带
保护的同步。
MPCS 组件提供了APIs接口来创建和删除MPCS 的实体。每个MPCS 实体通过一个
系统唯一的字符串名字来标识。每一个需要使用MPCS 的客户端都需要调用API 打开函数
来获取句柄。当不再需要使用MPCS 时,通过相应的API 函数来关闭句柄。同时也提供了
进入和离开MPCS 对象句柄指定的临界区域的 API 函数。
如果MPCS 对象要求的存储空间由用户提供的话,它必须位于所有处理器都可以访问
到的池(Pool )中;如果在创建对象的时候不提供存储空间,则指定池的 ID号将被MPCS
对象用来内部分配空间。
MPLIST
此组件提供给予GPP和DSP之间传输机制的双重循环连接列表。在GPP和DSP之
间存在共享存储空间的设备上,该模块实现共享存储空间的连接列表。对于不存在共享存储
空间的设备,该模块内部保持远程处理器上连接列表的一致。
该组件提供了创建和删除MPLIST 实体的APIs函数。每个MPLIST 实体通过一个系统
宽唯一的字符串名字来标识。每一个需要使用MPLIST 的客户端都需要调用 API 打开函数
来获取句柄。当不再需要使用MPLIST 时,通过相应的 API 函数来关闭句柄。
MPLIST 组件提供的 API 函数,可以在列表中最后加入一个新的元素,或者删除列表前
面的一个元素。也允许应用程序在某个已有的列表元素前插入一个缓冲,删除列表中任意一
个指定的元素。并提供了检查列表是否为空的API 函数。另外,还有 API 函数,通过获取
列表首元素的指针和指定元素后的一个元素,横断列表。
RING IO
该组件提供基于数据流的循环缓冲区。该组件允许在共享存储空间创建循环缓冲区。不
同的处理都能够读取或者写入循环缓冲区。RINGIO 组件允许写指针获取数据缓冲区的空存
储空间,当该存储空间被释放之后,相应存储空间可以再次写入。
RINGIO 组件允许读指针获取缓冲区中读取空间的有效数据。当被释放之后,相应存储
空间的数据被标记为无效。每个 RINGIO 实体拥有一个读指针和一个写指针。RINGIO 组件
也有API 函数,可以使能数据属性的同步传输。如:EOS(End Of Stream)、事件戳、流偏
移地址等,也可能伴随着循环缓冲区的偏移值。
SEED -SDK安装后,DSPLINK的源码位于安装目录下的如下目录下:
/opt/dvsdk_1_40_02_33/dsplink-davinci -v1.50-prebuilt/packages/dsplink,目录下
的源码架构如下图示: