DSP

TI Davinci DM6446 开发环境搭建

2019-07-13 18:35发布

         声明:是参照了这位博客的文章http://zjbintsystem.blog.51cto.com/964211后自己的总结!


         TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间的通信和程序编译等问题,所以开发攻略第一步就是要搭好开发环境。其实TI的EVM(TI 的开发板)也提供相关的EVM start guide(sprue66f.pdf),适合参考。

        DAVINCI开发环境搭建基本上可分以下几步:         1) 准备好各种相关的windows,linux,DAVINCI 软件开发包安装软件;         2) linux环境搭建;         3) ARM编译环境搭建;         4) DSP编译环境搭建;         5) 编译DSP算法LIB,生成x64P,ARM端可执行程序调用运行;

第一步:相关软件准备

    LINUX下的软件工具包如下:

    1)VMware-workstation;     2)RedHat Enterprise Linux Server 5(server 4 也可以);     3)mvl_5_0_0801921_demo_sys_setuplinux.bin;        (这是GCC交叉编译工具,根文件系统target)
       mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin
       
包含montavista linux-2.6.18的内核源代码
    4)dm6446_codecs_setuplinux_2_00_00_22.bin;        (最新montavista linux-2.6.18内核等安装包)     5)dvsdk_setuplinux_2_00_00_22.bin;这个是TI 自己EVM的软件开发包)     6)bios_setuplinux_5_41_02_14.bin     7)xdctools_setuplinux_3_16_01_27.bin;     8)ti_cgt_c6000_6.1.9_setup_linux_x86.bin       (以上3个文件都是从TI上下载比较新的dvsdk的工具链)     DSP开发工具:     1)CCS3.3或者CCS4.2     2)bios_ccsv3_setupwin32_5_41_02_14.exe或者bios_ccsv4_setupwin32_5_41_02_14.exe     (和LINUX里的版本bios_setuplinux_5_41_02_14配对

补充一下,本人这里基本上都是从TI上下载比较新的安装包,很多公司和朋友目前还都停留在linux-2.6.10和mvl_4_0_1上开发;
第二步:linux环境搭建

安装虚拟机和RedHat linux
把以上的*.bin文件全部拷贝在一个/home/hugh的目录下

创建普通用户:"hugh"

[root]# useradd hugh

修改密码:

[root]# passwd hugh

第三步:ARM编译环境搭建

安装目录依个人爱好而定,你可以把要安装的东西放在专门的用户目录下,比如/home/hugh/下

以ROOT身份进入linux环境
1) 搭建montavista linux环境
按以下命令安装GCC(arm_v5t_le)交叉编译工具,安装过程按照提示操作,运行时会提示安装目录的选择。
[root]# mkdir/opt/mv_pro_5.0.0
以下两个程序安装到/opt/mv_pro_5.0.0目录下
[root]# ./mvl_5_0_0801921_demo_sys_setuplinux.bin [root]# ./mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin
     执行上面的命令后,会在/opt/mv_pro_5.0.0/目录下生成mvltools5_0_0801921_update.tar.gz和DaVinciLSP_02_00_00_140.tar.gz的文件。mvltools5_0_0801921_update.tar.gz包括GCC交叉编译环境和根文件系统(target),DaVinciLSP_02_00_00_140.tar.gz里包含montavista linux-2.6.18的内核源代码。用以下命令把它们解压到当前目录:

[root]# tar xzvf mvltools5_0_0801921_update.tar.gz
[root]# tar xzvf DaVinciLSP_02_00_00_140.tar.gz

      以上两个开发包是最基本的,至于下面要安装的TI 自己的dvsdk,没有它也可以照样开发DM6446,因为DSP算法开发也可以使用常用的方法生成*.bin文件,放到根文件系统,当做一个应用文件boot起来也是可以的,那是后话。       补充提示:由于mvl_5_0_0801921_demo_sys_setuplinux.bin和mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin等文件比较占用虚拟机的空间,建议安装完后,把它们删除。如果有些*.bin运行不了,请使用chmod +x *.bin改变文件属性。  2)安装TI DVSDK工具链
      dvsdk_setuplinux_2_00_00_22、
      xdctools_setuplinux_3_16_01_27.bin、
      bios_setuplinux_5_41_02_14.bin 
存放在
/home/hugh/下,TI 建议用户使用su 命令切换到用户账号的权限下安装dvsdk,其在root下安装也没问题。使用以下命令开始安装dvsdk
创建安装目录
[root]# mkdir /home/hugh/dm6446/dvsdk_setuplinux_2_00_00_22
[root]# mkdir/home/hugh/dm6446/bios_setuplinux_5_41_02_14
[root]# mkdir /home/hugh/dm6446/
xdctools_setuplinux_3_16_01_27
安装
[root]# ./dvsdk_setuplinux_2_00_00_22.bin
[root]# ./bios_setuplinux_5_41_02_14
[root]#
 ./xdctools_setuplinux_3_16_01_27
安装完dvsdk后,使用以下命令,按照提示安装xdctools和bios工具包到/home/hugh/dm6446/目录下,
然后在 /home/hugh/dm6446/dvsdk_2_00_00_22/创建安装目录
[root]# mkdir cg6x_6_1_9
安装ti_cgt_c6000_6.1.9到/home/hugh/dm6446/dvsdk_2_00_00_22/cg6x_6_1_9/
[root]# ./ti_cgt_c6000_6.1.9_setup_linux_x86.bin
安装完cg6x_6.1.09后,需要设置以下环境变量
在安装的最后有个提示界面,让你设置把它弄个截图,截下来

设置环境变量:大概如下,以上面所提的截图为准
[root]# export C6X_C_DIR=/home/hugh/xdctools_3_16_01_27/cg6x_6.1.09/include/:/home/hugh/xdctools_3_16_01_27/cg6x_6.1.09/lib
 3)安装Codec Servers
      Codec Servers就是提供ARM端调用DSP端算法的一个服务机制,使用以下命令安装DM6446的Codec Servers到/home/hugh/dm6446/dvsdk_setuplinux_2_00_00_22/dvsdk_2_00_00_22下
[root]# ./dm6446_codecs_setuplinux_2_00_00_22.bin

第四步:设置TFTP SERVER

使用tftp server 之前,首先确保你的linux 主机安装有xinetd,然后使用以下命令,查看你linux主机是否安装TFTP SERVER:   [root]# rpm -q tftp-server         如果出现: tftp-server-0.xx-x.x字样,表明安装成功。没有的话,你需要从REDHAT LINUX5的镜像光盘CD里SERVER目录下,使用命令(rpm -ivh tftp-server-0.42-3.1.i386.rpm)安装,或者直接把tftp-server-0.42-3.1.i386.rpm解压出来放到临时文件夹里同样使用rpm -ivh tftp-server-0.42-3.1.i386.rpm安装。
进入根目录/下,使用命令   [root]# mkdir /tftpboot [root]# chmod -R 777 /tftpboot [root]# /sbin/chkconfig tftp on [root]# /sbin/chkconfig --list   这时linux主机会显示 .............. xinetd based services:
        chargen-dgram:  off
        chargen-stream: off
        cvs:            off
        daytime-dgram:  off
        daytime-stream: off
        discard-dgram:  off
        discard-stream: off
        echo-dgram:     off
        echo-stream:    off
        eklogin:        off
        ekrb5-telnet:   off
        gssftp:         off
        klogin:         off
        krb5-telnet:    off
        kshell:         off
        rsync:          off
        tcpmux-server:  off
       
 tftp:           on
        time-dgram:     off
        time-stream:    off
       on 表示TFTP SERVER已经运行。这时你可以把ubl.bin uboot.bin kernel.bin之类的bin文件COPY到/tftpboot目录下,在板子上跑的UBOOT可以做很多update的工作了。

第五步:设置NFS

      开发嵌入式LINUX一定少不了NFS,目的是提高应用软件的开发效率。笨办法就是频繁烧写rootfs到板子上,那是不可取的。
 1) 以普通用户进入linux host,如果你在ROOT下,使用Ctrl+Alt+F5,然后换成普通用户命令模式。
 2)使用命令进入 /home/下,
[hugh]# cd /home/hugh/
[hugh]# mkdir -p dm6446/nfs_rootfs
如果不可创建,则切换到root用户下
[hugh]# su root
[root]# cd /home
[root]# chmod 777/hugh/
切换为普通用户
[root]# su hugh
[hugh]# mkdir -p dm6446/nfs_rootfs
[hugh]# cd dm6446/nfs_rootfs
这时说明以下命令的输入都是在/home/hugh/dm6446/nfs_rootfs中
 3)切换到root
[hugh]# su root
[hugh]# cp -a /opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le/target/* .
[hugh]# chown -R hugh opt //注意这个hugh上一个普通的用户名
      cp -a 命令很耗时间,因为东西很多,就是把之前安装的mvl_5_0_0801921_demo_sys_setuplinux.bin里的根文件系统target目录下的东西全部COPY到当前目录下(注意那个"."),其实这个target就是TI EVM的根文件系统,超级大!不过使用nfs不用管它的大小,等制作rootfs烧到板子上的时候,再裁减不迟
4)编辑linux host /etc/exports文件
[hugh]# vi /etc/exports
      内容改为:/home/hugh/dm6446/nfs_rootfs *(rw,no_root_squash,no_all_squash,sync),注意"*"和"("之间不能有空格,它们是连在一起写的。使用wq保存exports文件退出。
 5)还是在root账号下,使用以下命令激活nfs
[hugh]# /usr/sbin/exportfs -av
[hugh]# /sbin/service nfs restart
6)检验并关闭linux host的防火墙: [hugh]# /etc/init.d/iptables status [hugh]# /etc/init.d/iptables stop        到这里linux host的nfs已经搞定,我们以后可以使用下面的方法测试nfs。 使用以下命令得到linux host的IP,gatewayip,netmask等信息。 [hugh]# ifconfig
然后在板子上的U-BOOT命令下,输入以下信息:     DaVinci EVM # setenv ipaddr 192.168.1.10(本人板子u-boot ip)     DaVinci EVM # setenv serverip 192.168.1.254(本人linux host ip)
    DaVinci EVM # setenv netmask 255.255.255.0
    DaVinci EVM # setenv gatewayip 192.168.1.1
    DaVinci EVM # setenv nfshost 192.168.1.254
    DaVinci EVM # setenv rootpath /home/hugh/dm6446/nfs_rootfs
    DaVinci EVM # setenv bootargs console=ttyS0,115200n8 noinitrd rw ip=192.168.1.10:192.168.1.254:192.168.1.1:255.255.255.0 root=/dev/nfs nfsroot=192.168.1.254:/home/hugh/dm6446/nfs_rootfs,nolock mem=120M     DaVinci EVM # setenv bootcmd 'tftpboot 0x80700000 davinci_kernel; bootm'     //设置U-BOOT启动命令,NFS启动 注意用单引号括起来
    DaVinci EVM # saveenv(保存)     DaVinci EVM # printenv
    DaVinci EVM # reset

   (检查刚才的输入是否正确,否则NFS挂不上根文件系统)
以下是终端显示的画面
DaVinci EVM # printenv bootdelay=3 baudrate=115200 ethaddr=00:0E:99:EF:EF:22 bootfile=davinci_kernel filesize=1ce38c fileaddr=80700000 bootm=80008000 bootcmd=tftp 80008000 davinci_kernel; bootm 80008000 ipaddr=192.168.1.10 netmask=255.255.255.0 gatewayip=192.168.1.1 rootpath=/home/hugh/dm6446/nfs_rootfs serverip=192.168.1.254 nfshost=192.168.1.254 bootargs=console=ttyS0,115200n8 noinitrd rw ip=192.168.1.10:192.168.1.254:192.168.1.1:255.255.255.0 root=/dev/nfs nfsroot=192.168.1.254:/home/hugh/dm6446/nfs_rootfs,nolock mem=120M stdin=serial stdout=serial stderr=serial

第六步:设置GCC交叉编译环境

以普通用户login,vi 编辑~/.bashrc文件,添加

[root]# vi  ~/.bashrc PATH="/opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le/bin:
/opt/mv_pro_5.0.0/montavista/pro/bin:
/opt/mv_pro_5.0.0/montavista/common/bin:$PATH"
  保存退出,然后使用以下命令生效,或者退出系统再登陆也可以。 [root]#source ~/.bashrc   其实,使用root身份处理也行。

       注意:不是什么串口转接线都可以用于DM6446,有的是只有RX、TX、GND三根线相连的转接线(尽管两端都是9针的头,除了这三根,其它的根本不连接),必须用9根线全连的那种转接线。我的就是,以为是DM6446板子不好使,后来发现是这根串口转接线的毛病。

备注一下我的IP 设置,免得改来改去

DM6446板 IP地址 192.168.1.10 主机IP                 192.168.1.254 子网掩码              255.255.255.0 网关                           192.168.1.1
XP的IP                       192.168.1.20



      关于IP地址的设置:其实只要设置DM6446板子的IP、虚拟机中linux的IP即可,Windows XP的IP,可以设置为自动获取方式即可(但最好还是设置上)。
如果用刚将上面的工作做完,uImage镜像也放在 /tftpboot 目录中了,终端有显示,但就是不能启动linux,一种办法是将PC本机网卡设置为自动获取IP方式。再重起DM6446板即可正常启动linux了

注意虚拟机Network Adapter的设置


按上述设置后记得在终端里执行 #service network restart