NXP STB225指南
一、NXP STB225主要的Driver介绍
1、LinuxDVB
LinuxDVB用于控制:
(1) 前端(调谐器、频道解码器)
(2) 程序标识符PID过滤
(3) 节Section过滤
(4) 传输流TS的多路分配
2、DirectFB
DirectFB用于控制视频管道的:
(1) 非传输流的多路分配
(2) 视频解码
(3) 视频输出
(4) 静止图像解码
(5) 带图形加速的屏显OSD
3、ALSA
ALSA用于控制音频管道的:
(1) 音频解码
(2) 音频后处理器(post-processor)
(3) 音频输出
二、STB225内核模块关系
1、phStbMmio
2、I2C
at24c64
saa1064
tda9983
ak470x
3、phStbCore
(1) phStbOsal
phStbAlsa
phStblpc
phStbKey
phStbRCprotocol
phStbSbmDev
phStbDemux833x
phStbRSServer
phStblr
(2) phStbDbg
phStbBootDsp
phStbNetDev
phStbKBufMgr
phStbFB
phStbVo
phStbVideoRenderer
phStbKernellfce
phStbWmdrmPd
三、内部处理器通信
两个MIPS都使用相同的通信栈。
注意:
(1) IPC消息只用于控制
(2) IPC消息参考有效负载数据
(3) 有效负载数据存储到共享内存(避免复制)
四、STB225主要用例
(1) 直播(Live Broadcast)
(2) 个人录像机PVR
(3) 经IP传输的TS流(组播或单播)
(4) 其它经IP传输的格式(如WMV)
(5) 其它可能的用例
· “streaming System” 允许多种类型的流通过连接结构化到组件或缓冲
· 单个高清流或两路标清流
· 条件接收系统CAS:
在VMSP解扰输入;
如需硬盘存储,能用分组密码(block cipher)重编码/解码
· 基本流ES的回放,如:MP3、WMA
· 来自内存的短视频片段的回放。能为UI提供动画
五、DirectFB集成
1、DirectFB需要:
(1) 帧缓冲设备
(2) 输入事件机制
(3) 移植层(Porting Layer)映射硬件功能
2、移植层
(1) 基础结构
· phStbDFB
· DirectFB概念和硬件实现之间的映射
(2) 图片provider
· phStbDFBImageProvider
· 支持JPEG、PNG、GIF、BMP等格式
(3) 视频provider
· phStbDFBVideoPrivoderTS,phStbDFBVideoProviderES,
phStbDFBVideoPrivoderASF 和phStbDFBVideoPrivoderCommon
· 支持传输流TS、ASF和基本流ES
六、帧缓冲实现
1、phStbFB分配所需内存建立帧缓冲
2、phStbFB还分配DirectFB所需的任意内存
3、STB225在视频输出时能支持1~2个帧缓冲
4、帧缓冲:
· 总是ARGB32位格式
· 能够是单或双缓冲
· 能放大以适应输出屏幕
· 不能缩小以适合输出屏幕
注意:只能支持一个全高清帧缓冲
5、帧缓冲内存(标清情况)
(1) 内存使用2MB的倍数作为连续块进行分配
(2) 帧缓冲必须符合64KB边界
(3) 显示的FB0使用OSD层1,FB1使用OSD层2
(4) DirectFB被分配为FB0的结束位置到FB1的开始位置之间的任意内存
(5) DirectFB内存的数量可以使用gfx_memory模块参数增加,缺省为4MB
6、帧缓冲内存(高清情况)
高清帧缓冲使用两个OSD层
(1) 这是由于硬件局限限制了OSD层的宽度最大为960像素
(2) 单个连续的内存块分配到帧缓冲
· 不同的起始地址和步距(Stride)允许使用两个OSD层
· OSD层1用于显示帧缓冲的左手边
· OSD层2用于显示帧缓冲的右手边
七、STB225建立命令
1、首次建立,在stb225/ 运行:
../setup.sh
Make all
2、建立组件
make comp.lnx.clean/make/install
3、建立应用
make apps.lnx.clean/make/install
4、建立buildroot
make buildroot.menuconfig
make buildroot.busybox.menuconfig
make buildroot.clean/make/install
5、建立Linux
make linux.menuconfig
make linux.clean/make/install
6、建立U-Boot
make u-boot.clean/make
八、STB225调试(MIPS1:控制MIPS)
1、Linux 内核/模块跟踪
echo 9>/proc/sys/kernel/printk 增加printk的输出级
cat/proc/kmsg 查看内核消息
cat/var/log/messages 查看Linux消息
(存储在RAM盘,因此不出现在rootfs,使用telnet连接192.168.0.2查看)
tail -f /var/log/messages& 持续地查看Linux消息
2、tmdbg程序的用法
-h 打印基本的用法信息
help 打印所有有效的命令
dbg enable Module [flag...] 在Linux打开debug标志
dbg disable Module [flag...] 在Linux关闭debug标志
dbg show Module 显示设置的模块标志
dbg list 在Linux为所有模块列出DBG标志设置
例如:
tmdbg dbg enable tmgdrAudioIO 0x700
tmdbg dbg enable tmdlMsvd 0xa0000030
3、标志的含义
Level_5 0x00001000 非常详细的调试(/var/log/messages)
Level_4 0x00000800 详细的调试
Enter 0x00000010 显示外部接口函数调用入口
Leave 0x00000020 显示外部接口函数退出
IEnter 0x00000040 显示内部函数调用入口
ILeave 0x00000080 显示内部函数退出
九、STB225调试(MIPS2:音频编解码器)
1、telnet到MIPS1(192.168.0.2)
2、然后从DSP MIPS(192.168.251.2)telnet
3、“tmdbg dbg l” 列出能够使用的模块
4、输出到循环(circular)日志缓冲区,而不是var/log/messages目录
5、可以通过“logread”读它
6、如使用“logread -f”,会得到连续的输出
7、tmdbg dbg enable命令,例如:
“tmdbg dbg e phdspMpgal2 0x00001f00” 将提供5到1级的调试
8、logread -f>logfile.txt 可保存信息到一个文件
十、STB225样例程序
1、exStbDemo
基于DirectFB、LinuxDVB和ALSA
通用应用程序,说明了大量的系统特征:
(1) DVB:接收、频道安装、节目信息
(2) PVR:录制、回放
(3) IP接收和回放:组播、单播
(4) 媒体文件回放:TS、ES、ASF(WMV、WMA、WM-DRM)
(5) 图像解码:幻灯片和thumbnail播放、JPG/PNG/BMP/GIF
(6) 显示和输出操作:视频缩放、分辨率/TV标准切换、Gamma校正、
层(Alpha混合、闪烁过滤、Z顺序、显示/不显示)、WSS/防复制保护/内容保护系统体系CGMS
(7) 性能分析
(8)访问ALSA音频组件
2、exStbFb
简单图像解码和显示的应用程序
(1) 不使用DirectFB
(2) 使用图像解码库和帧缓冲设备
(3) 能解码、缩放和定位:JPG/PNG/BMP/GIF(包括动画)/从视频层抓屏(使用/dev/vrend/display[1|2])
3、exStbResolution
修改帧缓冲尺寸和放大的程序
(1) 可改变的帧缓冲宽度、高度和目的矩形窗口
(2) 例如:用exStbFb在两个不同的屏幕位置、两个不同的层显示不同的动画GIF。
注意:
· 帧缓冲只能放大(即目的矩形窗口必须>=宽度和高度)
· 多种对宽度、高度和目的窗口的同步改变(显示可能中断)
· 一定要小心,一次只能改变一个参数
4、exStbLED
测试前面板LED输出的应用程序
(1) 字符显示
(2) 数字显示
(3) 点“.”显示
(4) 卷动Scrolling(向前、向后、速度控制)
(5) 亮度(Brightness)
(6) 时间显示
注意:由于7位的显示,部分字符不能显示。
5、exStbCC
说明相关字幕数据插入的应用程序
(1) 使用视频显示设备接口 /dev/vdenc/renderer0/vdenc[0|1]
(2) 检查查看是否设备支持相关字幕
(3) 注入一系列的相关字幕数据(只对CC1有效)
6、exStbThumbs
基于视频和图像的thumbnail显示的DirectFB应用程序
(1) 必须运行在1280×720p、使用两个帧缓冲的模式
(2) 在视频层循环的H.264流
(3) 图像序列快速显示到屏幕
(4) 随即视频帧捕捉和显示
(5) 图像层alpha混合用于平滑过渡
7、exStbVideo
基于视频显示的DirectFB应用程序
(1) 目前支持:ASF媒体文件、TS文件、ES文件
(2) 非常简单的例子——只从头到尾播放命令行指定的文件
(3) 能使用ctrl+c中断
8、exStbHwAcc
说明硬件图形加速的应用程序(包括彩 {MOD}键控的使用)
(1) 以两种方式实现图形功能
· 使用软件执行操作
· 使用硬件加速设备(/dev/phStbDraw)
(2) 命令行选项用于选择使用的功能
十一、STB225烧写
1、Flash概述
(1) 支持的Flash类型:
· NOR
· NAND
小页/大页
小容量/大容量
MTD驱动器提供软件海明错误校验码ECC和坏块管理
(2)能经u-boot或Linux烧写(两者都使用MTD驱动器)
(3) 烧写nandboot/u-boot应仔细
如果不工作,那么你需要EJTAG恢复主板
(4) 使用NFS最小化重烧写
经TFTP内核引导
2、经U-Boot烧写
(1) 从建立的PC复制文件到DRAM,例如:
· EJTAG
· 串口(Kermit/Z-modem,很慢!)
· TFTP(即以太网)
(2) 擦除Flash分区
(3) 从DRAM复制到Flash分区
(4) 能烧写空主板,使用:
· EJTAG下载
烧写映像
u-boot恢复映像,从DRAM编译运行
· 从预写Flash引导,然后从flash复制烧写
3、经Linux烧写
(1) 从建立的PC传输文件到目标,例如:
· USB驱动器
· 串口(Kermit/Z-modem,很慢!)
· NFS(即以太网)
· 从互联网下载,为flash升级
(2) 擦除Flash分区
(3) 复制文件到Flash分区
(4) Only works if the board already has a working linux build
(5) NAND例子:
flash_eraseall -j /dev/mtd3
nandwrite /dev/mtd3 my_padded_file
(6) Must pad file to multiple of erase block size
4、烧写工具
(1) 重烧写
· 烧写单个文件到单个分区
· 从Linux命令行运行,易于脚本
(2) 支持
· 串口(Kermit/Z-modem)
· TFTP 即以太网(未来)
· EJTAG(未来,能bring-up new boards)
例如:reflash -z -d nand0 -n Kernel $KSRC/ulmage
(3)烧写包
· 烧写所有分区(使用bring-up new boards)
· 在Linux建立包,但在Windows运行
· 使用Ashling Pathfinder + Opella EJTAG
例如:make_windows_flash dirname