TI Davinci DM6441嵌入式Linux移植攻略——开发环境搭建篇

时间:2021-04-25 08:45:39

声明:本文参考网友zjb_integrated的文章《TI Davinci DM6446开发攻略——开发环境搭建》,原文地址为http://zjbintsystem.blog.51cto.com/964211/273687,内容有增删,特此声明。由于DM6441和DM6446两款芯片大同小异,在进行嵌入式Linux系统移植时可相互参考。


TI DAVINCI DM6441的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6441还有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端可执行程序调用运行;

PS:本人的开发工作没涉及到DSP,因此只是搭建了前3项。后两项的操作仅供参考!

第一步:相关软件准备

LINUX下的软件工具包如下:

    1)VMware-workstation(本开发主机使用版本为7.1.2);

    2)Ubuntu Linux(Red Hat Linux当然也可以,本开发主机为Ubuntu 8.04);

    3)mvl_5_0_0801921_demo_sys_setuplinux.bin;

      (这是GCC交叉编译工具,根文件系统target。注册TI的账号,可以从TI的网站上下载)

    4)mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin;

       (最新montavista linux-2.6.18内核等安装包)

    5)dvsdk_setuplinux_2_00_00_22.bin(这个是TI 自己EVM的软件开发包)

    6)bios_setuplinux_5_33_06.bin;

    7)xdctools_setuplinux_3_10_03.bin;

    8)ti_cgt_c6000_6.0.23_setup_linux_x86.bin

      (以上3个文件都是从TI上下载比较新的dvsdk的工具链)

PS:以上软件工具都可在Ti上下载,这是下载网页:http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_2_00/latest/index_FDS.html由于本人本次只是进行Linux移植,只安装第3、第4两个。为了开发环境搭建的完整性,这里还是保留了其他软件工具包的安装说明。

DSP开发工具:

    1)CCS3.3;

    2)bios_setupwin32_5_33_06.exe;

    (和LINUX里的版本bios_setuplinux_5_33_06配对)

第二步:linux环境搭建

    有关如何搭建Linux,网上有很多非常详细介绍和教程,一定要选择安装图形界面的,这里不再详述。配置好samba后,把从TI上下载的安装包COPY到一个temp的目录里;另外也可以放在VM设置的共享文件夹中(强烈推荐使用这种方式)。

第三步:ARM编译环境搭建

上一步搞定后,使用su命令切换到root权限的帐户。

    1) 搭建montavista linux环境

    按以下命令安装GCC(arm_v5t_le)交叉编译工具,安装过程按照提示操作,运行时会提示安装目录的选择,建议放在/opt/mv_pro_5.0.0;

    host $ ./mvl_5_0_0801921_demo_sys_setuplinux.bin

    host $ ./mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin

    执行上面的命令后,会在/opt/mv_pro_5.0.0/目录下生成mvltools5_0_081921_update.tar.gz和DaVinciLSP_02_00_00_140.tar.gz两个文件。mvltools5_0_081921_update.tar.gz包括GCC交叉编译环境和根文件系统(target),DaVinciLSP_02_00_00_140.tar.gz里包含montavista linux-2.6.18的内核源代码。用以下命令把它们解压到当前目录:

       host $ tar zxf mvltools5_0_081921_update.tar.gz
       host $ tar zxf 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存放路径/home/<useracct>/下,<useracct>就是你的linux系统普通用户账号,不是root账号。TI 建议用户使用su <user>命令切换到用户账号的权限下安装dvsdk,其在root下安装也没问题。使用su切换的root帐户,会安装在/root/下,产生文件夹dvsdk_2_00_00_22。下文假设安装在/root/下。

     使用以下命令开始安装dvsdk:

     host $ ./dvsdk_setuplinux_2_00_00_22.bin

     安装完dvsdk后,使用以下命令,按照提示安装xdctools和bios工具包到/root/dvsdk_2_00_00_22/目录下:

     host $ ./xdctools_setuplinux_3_10_03.bin

     host $ ./bios_setuplinux_5_33_06.bin

     然后在/root/dvsdk_2_00_00_22/下先使用:

     host $ mkdir cg6x_6_0_23

         产生cg6x_6_0_23/目录,执行以下命令安装ti_cgt_c6000_6.0.23到/root/dvsdk_2_00_00_22/cg6x_6_0_23/:

     host $ ./ti_cgt_c6000_6.0.23_setup_linux_x86.bin

     设置环境变量:

     csh:

         host $ setenv C6X_C_DIR /root/dvsdk_2_00_00_22/cg6x_6_0_23/include:
/root/dvsdk_2_00_00_22/cg6x_6_0_23/lib

        或ksh or bash:

host $ export C6X_C_DIR=/root/dvsdk_2_00_00_22/cg6x_6_0_23/include:
/root/dvsdk_2_00_00_22/cg6x_6_0_23/lib

    其实以上的环境变量的设计也可以在dvsdk_2_00_00_22/Rules.make里设置。对应XDC_INSTALL_DIR宏及BIOS_INSTALL_DIR宏,需要改成如下值:

XDC_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/xdctools_3_10_03

BIOS_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/bios_5_33_06

在需要使用到DSP程序编译处,需要改动相应的CODEGEN_INSTALL_DIR宏如下:

CODEGEN_INSTALL_DIR = $(DVSDK_INSTALL_DIR)/cg6x_6_0_23

     3)安装Codec Servers

     Codec Servers就是提供ARM端调用DSP端算法的一个服务机制,使用以下命令安装DM6441的Codec Servers到/root/dvsdk_2_00_00_22下,

     host $ ./dm6446_codecs_setuplinux_2_00_00_22.bin

     4) 清除临时文件

      最后,把临时的*.bin都删除掉,毕竟文件很大,保留在VM里占空间。到这里,ARM端的开发环境已经搭建完。

第四步:设置TFTP SERVER

在进行tftp配置之前,请确保Linux能够上网,推荐使用nat方式共享上网,网上也有很多教程,不再详述。另外,最好关闭防火墙,命令为sudo ufw disable(该设置是永远关闭防火墙)。

1. 安装相关软件包:tftp-hpa(客户端),tftpd-hpa(服务端),xinetd

   host $ sudo apt-get install tftp-hpa tftpd-hpa
   host $ sudo apt-get install xinetd

2. 建立tftp服务文件目录(上传与下载文件的位置)

   host $ sudo mkdir /tftpboot
   host $ sudo chmod 777 /tftpboot

3. 启动tftp服务器

    host $ sudo in.tftpd -l /tftpboot
    这样tftp服务器就启动了,下面可以做一个测试,检测服务端配置是否成功:
1)在目录中建立一个文件test,作为下载测试用
    host $ cd /tftpboot
    host $ sudo gedit test (随便写点内容,保存关闭)
2)登录到另一个目录
    host $ cd /home/usrname (usrname为当前用户帐户名)
3)用自己的ip登陆tftp
    host $ tftp 192.168.150.129
    tftp> get test(如果成功,则没任何提示)
    tftp> quit 
4)查看是否下载成功
    host $ ls
   若成功可看到/home/usrname下已多了个test文件,打开可看到里面内容与刚才写的一样。
只要严格按照上面步骤来做,一般都会成功的。至此,服务端的配置已完成,实现了下载的功能。接下来配置客户端实现上传功能。

4. 建立与修改配置文件

1)在/etc/xinetd.d/下建立一个配置文件tftp
host $ sudo gedit /etc/xinetd.d/tftp
在文件输入以下内容:
service tftp
{
disable =no
socket_type = dgram 
protocol = udp 
wait = yes 
user = root 
server = /usr/sbin/in.tftpd 
server_args = -s /tftpboot -c 
per_source = 11 
cps = 1002 
flags = IPv4
}


保存退出

2)修改/etc/default/tftpd-hpa
修改文件内容如下:
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s -c /tftpboot"

其它常用选项如下:
-l        使用standalone模式运行,此模式下,将会忽略-t选项
-a address:port    在standalone模式下服务所在的IP与端口,如果不指定,则在本机所有IP,/etc/service中指定的port上侦听连接
-c         允许在服务器上新建文件,否则只允许更新现有的文件。如果未指定-U或-p选项,则允许任何人上传文件
-s directory    服务器端默认的目录,默认为/var/lib/tftpdboot
-u username    tftpd服务以什么身份运行,默认是nobody,一般可以新建一个tftpd的账号来运行
-U umask    上传的文件的掩码,如果未指定-p则为000,如果指定了-p,则采用指定的umask
-p        对于通过-u指定的用户执行的动作,不做额外的权限检查

至此,TFTP的配置完成了。重启。

这时你可以把ubl.bin uboot.bin kernel.bin之类的bin文件COPY到/tftpboot目录下,在板子上跑的UBOOT可以做很多update的工作了。


第五步:设置NFS

开发嵌入式LINUX一定少不了NFS,目的是提高应用软件的开发效率。笨办法就是频繁烧写rootfs到板子上,那是不可取的。

Ubuntu 默认是没有NFS 服务的,所以需要自己安装。 

在开始配置之前,同样确保LINUX能上网和关闭防火墙。

    1.  安装NFS 服务版 

         host $ sudo apt-get install nfs-kernel-server 

    2.  修改NFS 配置文件 /etc/exports 

         host $ sudo gedit  /etc/exports 
       在文件(exports)中添加NFS 的目录格式如下, 并存盘退出。 
         /home/usrname/nfs_share *(rw,sync,no_root_squash) 

usrname是自己的用户帐户名,/home/usrname/nfs_share是NFS的共享目录(当然你也可以随意改为你喜欢的路径和目录名),*表示任何IP都可以共享这个目录,你可以改为受限的IP,rw表示的是权限,sync是默认的。

    3.  在根目录下建立共享的目录,并创建test 文件放在目录里 

         host $ mkdir /home/usrname/nfs_share 
         host $ touch /home/usrname/nfs_share/test 

    4.  重新启动NFS 

         host $ sudo /etc/init.d/nfs-kernel-server restart 

    6.  挂载主机本地目录,测试NFS 

          host $ sudo mount 192.168.150.129:/home/usrname/nfs_share/ /tmp/

  192.168.150.129是本机ip,可用ifconfig查看获取。这里是把nfs_share目录挂载到tmp目录下。

  host $ ls /tmp/

  这时可看到/tmp/只有一个文件test,说明NFS已配置成功。

  卸载目录:

  host $ sudo umount   /tmp/

    7. 复制根文件系统到nfs_share目录下

    host $ cd /home/usrname/nfs_share

    host $ su 

    host $ cp -a /opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le/target/* .
    host $ chown -R <useracct> opt

    cp -a 命令很耗时间,因为东西很多,就是把之前安装的mvl_5_0_0801921_demo_sys_setuplinux.bin里的根文件系统target目录下的东西全部COPY到当前目录下(注意那个"."),其实这个target就是TI EVM的根文件系统,超级大!不过使用nfs不用管它的大小,等制作rootfs烧到板子上的时候,再裁减不迟。

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

    其实主要是设置环境变量,以普通用户login, 编辑~/.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"

    保存退出,然后使用以下命令生效,或者退出系统再登陆也可以。

    host $ source ~/.bashrc

    其实,使用root身份处理也行。