1. 程式人生 > >davinci DM6467——linux開發環境搭建

davinci DM6467——linux開發環境搭建

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。註冊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的工具鏈)     DSP開發工具:     1)CCS3.3;     2)bios_setupwin32_5_33_06.exe;     (和LINUX裡的版本bios_setuplinux_5_33_06配對)
    補充一下,本人這裡基本上都是從TI上下載比較新的安裝包,很多公司和朋友目前還都停留在linux-2.6.10和mvl_4_0_1上開發; 第二步:linux環境搭建     有關如何搭建,本人已在之前發表一篇《RedHat Enterprise Linux Server 5 在VMware Workstation 6.5的安裝》裡有詳細介紹,一定要選擇安裝圖形介面的,這裡不重複。配置好samba後,把從TI上下載的安裝包COPY到一個temp的目錄裡; 第三步:ARM編譯環境搭建     上一步搞定後,以ROOT身份進入linux環境。     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_#######.tar.gz和DaVinciLSP_#_#_#_#.tar.gz的檔案,“#”表示版本。mvltools5_0_##包括GCC交叉編譯環境和根檔案系統(target),DaVinciLSP_##裡包含montavista linux-2.6.18的核心原始碼。用以下命令把它們解壓到當前目錄:        host $ tar zxf mvltools5_0_#######.tar.gz
       host $ tar zxf DaVinciLSP_#_#_#_#.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下安裝也沒問題。使用以下命令開始安裝dvsdk;      host $ ./dvsdk_setuplinux_2_00_00_22.bin      安裝完dvsdk後,使用以下命令,按照提示安裝xdctools和bios工具包到/home/<useracct>/dvsdk_2_00_00_22/目錄下,      host $ ./xdctools_setuplinux_3_10_03.bin      host $ ./bios_setuplinux_5_33_06.bin      然後在/home/<useracct>/dvsdk_2_00_00_22/下先使用      host $ mkdir cg6x_6_0_23          產生cg6x_6_0_23/目錄,執行以下命令安裝ti_cgt_c6000_6.0.23到/home/<useracct>/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 /home/<useracct>/dvsdk_2_00_00_22/cg6x_6_0_23/include:
/home/<useracct>/dvsdk_2_00_00_22/cg6x_6_0_23/lib
        或ksh or bash: host $ export C6X_C_DIR=/home/<useracct>/dvsdk_2_00_00_22/cg6x_6_0_23/include:
/home/<useracct>/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端演算法的一個服務機制,使用以下命令安裝DM6446的Codec Servers到/home/<useracct>/dvsdk_2_00_00_22下,      host $ ./dm6446_codecs_setuplinux_#_#_#_#.bin      4) 最後,把臨時的*.bin都刪除掉,畢竟檔案很大,保留在VM裡佔空間。到這裡,ARM端的開發環境已經搭建完。 第四步:設定TFTP SERVER         有兩種方法可以實現,一個在Redhat Linux 5裡設定 TFTP SERVER,在根目錄/下產生tftpboot目錄,使用chmod -R 777 /tftpboot/改變許可權屬性,然後配置linux 裡的TFTP server。另一個是直接使用windows下的TFTP SERVER軟體,把在LINUX下生成的檔案,比如U-BOOT,KERNEL,ROOTFS 通過samba機制COPY到windows下的TFTP SERVER的目錄。我們這裡只介紹第1中方法。     使用tftp server 之前,首先確保你的linux 主機安裝有xinetd,然後使用以下命令,檢視你linux主機是否安裝TFTP SERVER: host $ 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安裝。 進入根目錄/下,使用命令 host $ mkdir /tftpboot host $ chmod -R777 /tftpboot host $ /sbin/chkconfig tftp on host $ /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) 以普通使用者<useracct>進入linux host,如果你在ROOT下,使用exit,然後換成普通使用者進入。     2)使用命令進入 /home/<useracct>下,     host $ cd /home/<useracct>     host $ mkdir -p dm6446/nfs_rootfs     host $ cd dm6446/nfs_rootfs    3)切換到root     host $ su root     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燒到板子上的時候,再裁減不遲。     4)編輯linux host /etc/exports檔案,      host $ vi /etc/exports     內容:/home/<useracct>/dm6446/nfs_rootfs *(rw,no_root_squash,no_all_squash,sync)輸入,注意"*"和"("之間不能有空格,它們是連在一起寫的。使用wq儲存exports檔案退出。     5)還是在root賬號下,使用以下命令啟用nfs,     host $ /usr/sbin/exportfs -av
    host $ /sbin/service nfs restart     6)檢驗並關閉linux host的防火牆:     host $ /etc/init.d/iptables status     host $ /etc/init.d/iptables stop     到這裡linux host的nfs已經搞定,我們以後可以使用下面的方法測試nfs。     使用以下命令得到linux host的IP,gatewayip,netmask等資訊。     host $ /sbin/ifconfig     然後在板子上的U-BOOT命令下,輸入以下資訊:     myboard # setenv ipaddr 192.168.1.188(本人板子u-boot ip)     myboard # setenv serverip 192.168.1.251(本人linux host ip)
    myboard setenv netmask 255.255.255.0
    myboard setenv gatewayip 192.168.1.1
    myboard setenv nfshost 192.168.1.251
    myboard setenv rootpath /home/<useracct>/dm6446/nfs_rootfs
    myboard setenv bootargs console=ttyS0,115200n8 noinitrd rw ip=192.168.1.188:192.168.1.251:192.168.1.1:255.255.255.0:::off root=/dev/nfs nfsroot=192.168.1.251:/home/<useracct>//dm6446/nfs_rootfs,nolock mem=120M     myboard saveenv(儲存)     myboard printenv    (檢查剛才的輸入是否正確,否則NFS掛不上根檔案系統) 第六步:設定GCC交叉編譯環境     以普通使用者login,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" 儲存退出,然後使用以下命令生效,或者退出系統再登陸也可以。 host $ source ~/.bashrc 其實,使用root身份處理也行。