软件环境:本文基于dm81xx DVR RDK Release-03.00.00.00
硬件环境:ETV-HDV8168-HDMI
背景:
前一篇文章介绍 :
其中算法编译完成后会生成一些库,以及.out文件,我将.out文件直接运行的时候发现并没按预期的执行输出结果,查看代码没有发现异常,因此从程序加载执行的层面去看程序执行所需的组件。本文介绍程序加载的过程。(linux启动加载不在此文范围内)
默认的运行demo的脚本位于/home/root/demo.sh追踪此脚本的执行顺序:
脚本执行顺序如下图:
结论:
在上图中可见dvr_rdk_demo_link_api.out执行前还需要晕fw_load.out将相应核的库(执行文件)加载进系统。
因此仅执行dvr_rdk_demo_link_api.out是不够的。
执行用户程序的方案:
我们这边采用nfs挂载的方式执行自己的程序,大部分的库以及驱动都已经烧写到nand中,如何在不更改nand中数据的前提下,运行自己的程序呢。
为此,将脚本做一些更改:
用户目录如下
demo.sh如下:
#!/bin/sh
#set your demo dir,here my is /mnt/test
cd /mnt/test
chmod +x *.out
chmod +x *.sh
chmod +x ./scripts/*.sh
chmod +x ./firmware/*.out
#cp -rf firmware/dvr_rdk_fw_*/home/root/opt/dvr_rdk/ti816x/firmware
cd /home/root/opt/dvr_rdk/ti816x
./init.sh
cd -
./load.sh
#run your software
cd /mnt/test
./dvr_rdk_demo_link_api.out 720P30 RTSPH264 8000 VBR HIG
将load.sh做如下修改,以让/load_XXX.sh加载m3及DSP核可执行程序时加载用户目录(这里为/mnt/test/firmware)下的程序:
cd /home/root/opt/dvr_rdk/ti816x
./env.sh
#return to my folder
cd -
cd ./scripts/
./load_vpss.sh
./load_video.sh
./load_c6xdsp.sh
#wait for the completion of load
sleep 8
#cd to system folder
cd /home/root/opt/dvr_rdk/ti816x/scripts
./osa_kermod_load.sh
./wait_cmd.sh s m3vpss ${REMOTE_DEBUG_ADDR}
./wait_cmd.sh s m3video${REMOTE_DEBUG_ADDR}
./wait_cmd.sh s c6xdsp ${REMOTE_DEBUG_ADDR}
cd /home/root/opt/dvr_rdk/ti816x/
# load module fb
insmod ./kermod/vpss.ko i2c_mode=1sbufaddr=${HDVPSS_SHARED_MEM}
insmod ./kermod/ti81xxfb.kovram=0:8M,1:8M,2:4M
insmod ./kermod/ti81xxhdmi.ko
sleep 1
#
# enable range compression in HDMI 0..255to 16..235.
# This is needed for consumer HDTVs
#
./bin/mem_rdwr.out --wr 0x46c00524 2
#
# enable range compression in HDMI 0..255to 16..235.
# This is needed for consumer HDTVs
#
./bin/mem_rdwr.out --wr 0x46c00524 2