调试经验--工具链
davinci的工具链就是dvsdk,是TI公司推出的一个软件套件,主要作用是建立ARM与DSP之间的联系。
在工具链的使用中,我总结了遇到的3个问题:
1,切换工具链时遇到的问题;2,ccs编译环境的升级;3,单独升级dvsdk中的bios。
一、切换工具链时遇到的问题
在调试dm6446过程中,遇到问题,TI的技术支持推荐使用新工具链试试。就进行了一次工具链的升级。
原工具链:dvsdk1.3
新工具链:dvsdk2.0
总的思路:
先用TI板卡试验,再用自己的板卡。毕竟,TI提供的dvsdk都是针对TI的开发板的,若是自己开发的板卡,硬件有改动,首次使用新工具链,出了问题不好确定问题的原因是新工具链没用好,还是与板卡硬件不匹配。
测试过程,也是逐步进行:
(1)安装mvl+dvsdk ;
(2)运行小例程;
工具链的安装,比较顺利,按照dvsdk的使用指南操作即可。
问题1:在编译内核时出错,信息如下:
UIMAGE arch/arm/boot/uImage
"mkimage" command not found - U-Boot images will not be built
从uboot的tools中复制mkimage到/usr/bin中,ok。
问题2:内核编译通过后,使用新内核,挂载nfs文件系统,此时出错,信息如下:
nfsd: unexporting all filesystems
RPC: failed to contact portmap (errno -5)
Starting RPC idmapd: FATAL: Module sunrpc not found.
两种解决方法:
1,在内核中配置编译选项:如下,注意 CONFIG_NFS_V4 不能选中
CONFIG_SUNRPC=m,CONFIG_SUNRPC_GSS=m,CONFIG_RPCSEC_GSS_KRB5=m,CONFIG_RPCSEC_GSS_SPKM3=m
2,由于SUNRPC其实已经编译进内核,不需要load modules,在/etc/init.d/rpcidmapd中屏蔽该部分代码
此处我采用第一种方法,修改编译选项,重新编译内核,继续挂载nfs文件系统,再次报错:
Starting RPC idmapd: Error: RPC MTAB does not exist.
解决方法:把以下内容加入到"/etc/fstab"里面
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0
nfsd /proc/fs/nfsd nfsd defaults 0 0
至此,nfs mount成功。
继续测试,用旧的uboot,新的内核与文件系统,板卡启动成功,运行hello程序成功。
二、ccs编译环境的升级
在升级linux下的工具链之后,由于我们的算法也是自己开发的,所以,相应的,需要升级开发算法的环境,即ccs。
ccs下编译的是算法库,是在ccs下最终生成一个a64P文件,然后拷贝到dvsdk下,根据工具链下的配置,生成可执行文件x64P。
在ccs中,需要相应升级bios、cgtools至与dvsdk相同的版本。
升级步骤如下:
1,查看dvsdk中软件版本(bios_5_32_04,cgx_6_0_16),在TI的网站上下载相应版本的的windows下的安装文件。
2,分别运行,安装下载的新工具。安装时,对路径没有限制。
3,在ccs中设置使用新的工具:
说明:我使用的是ccs3.3,其它ccs版本的设置方法可能有所不同。
在ccs中,依次选择Help -> About -> Component Manager;
选择工具,处理器,选中新安装版本的工具;
File -> Save.
重新打开ccs,修改工程中与旧工具相关的文件,特别是编译选项中与bios路径相关的内容。
重新编译。
三、单独升级dvsdk中的bios
1,在TI的网站上下载bios_5_32_04的linux下的安装文件。
2,在linux下运行,安装。安装时,应该将路径设置为dvsdk目录下,保证与旧的bios在同一目录下,那么后面的配置修改,相应会简单一些。
3,修改dvsdk中相关编译配置:
dvsdk中,rules.make,
app的makefile
codec的makefile
4,先编译dvsdk下的combos,再替换a64P,编译servers,得到x64P;
5,整个工程重新编译,运行,ok。