DSP

DM6446的开发环境搭建

2019-07-13 19:02发布

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
[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/dvsdk_setuplinux_2_00_00_22
[root]# mkdir/home/hugh/bios_setuplinux_5_41_02_14
[root]# mkdir/home/hugh/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/目录下,
然后在 /home/hugh/dvsdk_2_00_00_22/创建安装目录
[root]# mkdir cg6x_6_1_9
安装ti_cgt_c6000_6.1.9到/home/hugh/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/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 /usr/local/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:::off root=/dev/nfs nfsroot=192.168.1.254:/usr/local/dm6446/nfs_rootfs,nolock mem=120M
    DaVinci EVM # saveenv(保存)
    DaVinci EVM # printenv
   (检查刚才的输入是否正确,否则NFS挂不上根文件系统)
以下是终端显示的画面
DaVinci EVM # printenv
bootdelay=3
baudrate=115200
ethaddr=00:0E:99:EF:EF:22
bootfile=uImage-back2
filesize=1ce38c
fileaddr=80700000
bootm=80008000
bootcmd=tftp 80008000 uImage-back2; bootm 80008000
ipaddr=192.168.1.10
netmask=255.255.255.0
gatewayip=192.168.1.1
rootpath=/usr/local/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:::off root=/dev/nfsnfsroot=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




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