声明:本文参考网友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-hpahost $ sudo apt-get install xinetd
2. 建立tftp服务文件目录(上传与下载文件的位置)
host $ sudo mkdir /tftpboothost $ 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/下建立一个配置文件tftphost $ 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-server2. 修改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_sharehost $ touch /home/usrname/nfs_share/test
4. 重新启动NFS
host $ sudo /etc/init.d/nfs-kernel-server restart6. 挂载主机本地目录,测试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身份处理也行。