声明:是参照了这位博客的文章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