天天看點

Hi3531 SDK 安裝以及更新使用說明

hi3531 sdk 安裝以及更新使用說明

第一章 hi3531_sdk_vx.x.x.x版本更新操作說明

   如果您是首次安裝本sdk,請直接參看第2章。

第二章 首次安裝sdk

1、hi3531 sdk包位置

    在"hi3531_v100r001***/01.software/board"目錄下,您可以看到一個 hi3531_sdk_vx.x.x.x.tgz 的檔案,

該檔案就是hi3531的軟體開發包。

2、解壓縮sdk包

    在linux伺服器上(或者一台裝有linux的pc上,主流的linux發行版本均可以),使用指令:tar -zxf hi3531_sdk_vx.x.x.x.tgz ,

解壓縮該檔案,可以得到一個hi3531_sdk_vx.x.x.x目錄。

3、展開sdk包内容

    傳回hi3531_sdk_vx.x.x.x目錄,運作./sdk.unpack(請用root或sudo權限執行)将會展開sdk包打包壓縮存放的内容,請按照提示完成操作。

如果您需要通過windows作業系統中轉拷貝sdk包,請先運作./sdk.cleanup,收起sdk包的内容,拷貝到新的目錄後再展開。

4、在linux伺服器上安裝交叉編譯器

    1)安裝uclibc交叉編譯器(注意,需要有sudo權限或者root權限):

       進入hi3531_sdk_vx.x.x.x/osdrv/toolchain/arm-hisiv100-linux目錄,運作chmod +x cross.install,然後運作./cross.install即可。

    2) 安裝glibc交叉編譯器(注意,需要有sudo權限或者root權限):

       進入hi3531_sdk_vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目錄,運作chmod +x cross.install,然後運作./cross.install即可。

    3) 執行source /etc/profile, 安裝交叉編譯器的腳本配置的環境變量就可以生效了,或者請重新登陸也可。

5、編譯osdrv

    參見osdrv目錄下readme

6、sdk目錄介紹

hi3531_sdk_vx.x.x.x 目錄結構如下:   

    |-- sdk.cleanup                 # sdk清理腳本

    |-- sdk.unpack                  # sdk展開腳本

    |-- osdrv                       # 存放作業系統及相關驅動的目錄

    |   |-- busybox                 # busybox源代碼

    |   |-- drv                     # drv源代碼

    |   |-- kernel                  # linux核心源代碼

    |   |-- pub                     # 編譯好的鏡像、工具、drv驅動等

    |   |-- rootfs_scripts          # rootfs源代碼

    |   |-- toolchain               # 交叉編譯器

    |   |-- tools                   # linux工具源代碼

    |   |-- uboot                   # uboot源代碼

    |   `-- makefile                # osdrv makefile

    |-- package                     # 存放sdk各種壓縮包的目錄

    |   |-- osdrv.tgz               # linux核心/uboot/rootfs/tools源碼壓縮包

    |   |-- mpp.tgz                 # 媒體處理平台軟體壓縮包

    |   `-- image                   # 可供flash燒寫的映像檔案,如核心、根檔案系統

    |-- scripts                     # 存放shell腳本的目錄

    |-- mpp                         # 存放媒體處理平台的目錄

        |-- component               # 元件源代碼

        |-- extdrv                  # 闆級外圍驅動源代碼

        |-- include                 # 對外頭檔案

        |-- ko                      # 核心子產品

        |-- lib                     # release版本庫以及音頻庫

        |-- tools                   # 媒體處理相關工具

        `-- sample                  # 樣例源代碼

第三章、安裝、更新hi3531demo闆開發開發環境

    # 如果您使用的hi3531的demo闆,可以按照以下步驟燒寫u-boot,核心以及檔案系統,以下步驟均使用網絡來更新。

    # 通常,您拿到的單闆中已經有u-boot,如果沒有的話,就需要使用仿真器進行燒寫。

    # 更詳細的操作步驟及說明,請參見01.software\board\documents目錄下的《linux開發環境使用者指南》。

    # 以下操作假設您的單闆上已經有u-boot,使用網口燒寫uboot、kernel及rootfs到flash中。

    # demo單闆預設為從spi flahs啟動。

1、配置tftp伺服器

    # 可以使用任意的tftp伺服器,将package/image_uclibc(或image_glibc)下的相關檔案拷貝到tftp伺服器目錄下。

2、參數配置

    # 單闆上電後,敲任意鍵進入u-boot。設定serverip(即tftp伺服器的ip)、ipaddr(單闆ip)和ethaddr(單闆的mac位址)。

    setenv serverip xx.xx.xx.xx

    setenv ipaddr xx.xx.xx.xx

    setenv ethaddr xx:xx:xx:xx:xx:xx

    setenv netmask xx.xx.xx.xx

    setenv gatewayip xx.xx.xx.xx

    ping serverip,確定網絡暢通。

3、燒寫映像檔案到spi flash

    以16m spi flash為例。

    1)位址空間說明

        |      1m       |      4m       |      11m      |

        |---------------|---------------|---------------|

        |     boot      |     kernel    |     rootfs    |

        以下的操作均基于圖示的位址空間配置設定,您也可以根據實際情況進行調整。

    2)燒寫u-boot

        sf probe 0

        mw.b 82000000 ff 100000

        tftp 0x82000000 u-boot-hi3531_930mhz.bin

        sf erase 0 100000

        sf write 82000000 0 100000 

        reset   

    3)燒寫核心

        mw.b 82000000 ff 400000

        tftp 82000000 uimage

        sf erase 100000 400000

        sf write 82000000 100000 400000

    4)燒寫檔案系統

        mw.b 82000000 ff b00000

        tftp 0x82000000 rootfs_256k.jffs2

        sf erase 500000 b00000

        sf write 82000000 500000 b00000

    5)設定啟動參數

        setenv bootargs 'mem=64m console=ttyama0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1m(boot),4m(kernel),11m(rootfs)'

        setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'

        sa

4、燒寫映像檔案到nand flash

    以64m nand flash為例。

        |      1m       |     15m       |     32m       |         16m            |

        |---------------|---------------|---------------|------------------------|

        |     boot      |    kernel     |    rootfs     |        other           |

        tftp 82000000 u-boot-hi3531_930mhz.bin

        nand erase 0 100000

        nand write 82000000 0 100000

        reset

        mw.b 82000000 ff f00000

        nand erase 100000 f00000

        nand write 82000000 100000 f00000

        mw.b 82000000 ff 2000000

        tftp 82000000 rootfs_2k_1bit.yaffs2

        nand erase 1000000 2000000

        nand write.yaffs 82000000 1000000 9435c0    #注意:9435c0為rootfs檔案實際大小(16進制)

 setenv bootargs 'mem=64m console=ttyama0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1m(boot),15m(kernel),32m(rootfs),16m(test)'

        setenv bootcmd 'nand read 0x82000000 0x100000 0x500000;bootm 0x82000000'

5、啟動新系統

    reset # 重新開機進入新系統。

第四章、開發前環境準備

1、管腳複用

    與媒體業務相關的管腳複用都在mpp/ko_hi3531目錄下的sh腳本中配置,如果與實際情況不符請直接修改,此腳本被load3531_asic調用,在加載mpp核心子產品之前被執行;

         mpp之外的其他管腳複用統一在uboot中配置,詳細說明請參見《u-boot移植應用開發指南》。

第五章、使用sdk和demo闆進行開發

1、開啟linux下的網絡

    # 設定網絡

    ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx;

    ifconfig eth0 xx.xx.xx.xx netmask xx.xx.xx.xx;

    route add default gw xx.xx.xx.xx

    # 然後ping一下其他機器,如無意外,網絡将能正常工作。

2、使用nfs檔案系統進行開發

    # 在開發階段,推薦使用nfs作為開發環境,可以省去重新制作和燒寫根檔案系統的工作。

    # 挂載nfs檔案系統的操作指令:

    mount -t nfs -o nolock -o tcp xx.xx.xx.xx:/your-nfs-path /mnt

    # 然後就可以在/mnt目錄下通路伺服器上的檔案,并進行開發工作。

3、開啟telnet服務

    # 網絡正常後,運作指令 telnetd& 就可以啟動單闆telnet服務,然後才能使用telnet登入到單闆。

4、運作mpp業務

    # 在單闆linux系統下,進入mpp/ko_hi3531目錄,加載ko

    cd mpp/ko_hi3531

    ./load3531_asic -i

    # 進入各sample目錄下執行相應樣例程式(sample需要先在伺服器上成功編譯過)

    cd mpp/sample/vio

    ./sample_vio 0

第六章 位址空間配置設定與使用

1、ddr記憶體管理說明

    1)所有ddr記憶體中,一部分由作業系統管理,稱為os記憶體;另一部分由mmz子產品管理,供媒體業務單獨使用,稱為mmz記憶體。

    2)os記憶體起始位址為0x80000000,記憶體大小可通過bootargs進行配置,例如第三章中的setenv bootargs 'mem=64m ... ',表示配置設定給作業系統記憶體為64m,您可以根據實際情況進行調整。

    3)mmz記憶體由mmz核心子產品管理(mpp/ko_hi35xx目錄下的mmz.ko),加載mmz子產品時,通過子產品參數指定其起始位址及大小,例如:

    insmod mmz.ko mmz=anonymous,0,0x84000000,447m:ddr1,0,0xc0000000,511m anony=1 || report_error

    表示mmz兩塊區域,區域一的名稱為anonymous,起始位址為0x84000000,大小為447m;區域二的名稱為ddr1,起始位址為0xc0000000,大小為511m。

    您可以通過修改mpp/ko_hi35xx目錄下load3531腳本中的mmz子產品參數,來修改其起始位址和總大小。

    4)請注意mmz記憶體位址範圍不能與os記憶體重疊。

2、demo闆ddr記憶體管理示意

    1) 以容量為512mbytes的ddr0,為512mbytes的ddr1記憶體為例,以下為根據本文檔和sdk預設配置得到的記憶體管理示意圖:

    ddr0:                                                           ddr1:

    -----|-------|  0x80000000   # memory managed by os.            -----|-------|  0xc0000000   # memory managed by mmz.    

    64m  | os    |                                                       |       |                                      

         |       |                                                       |       |                                      

    -----|-------|  0x84000000   # memory managed by mmz.                |       | 

    447m | mmz   |                                                  511m | mmz   |                                      

    -----|-------|  0x9ff00000   # not used.                        -----|-------|  0xdff00000   # not used.            

    1m   |       |                                                   1m  |       |                                      

    -----|-------|  0xa0000000   # end of ddr.                      -----|-------|  0xe0000000   # end of ddr.          

    注意:

 (1)使用者在配置啟動參數時需要設定os的管理記憶體為64m,“setenv bootargs 'mem=64m ...”。  

 (2)系統啟動後,配置load3531的腳本中mmz的管理記憶體為447m(ddr0)和511m(ddr1),“insmod mmz.ko mmz=anonymous,0,0x84000000,447m:ddr1,0,0xc0000000,511m anony=1 || report_error”。   

   2) 以容量為256mbytes的ddr記憶體為例,可以采用如下配置來節省記憶體使用。

    ddr0:                                                         ddr1: 

    -----|-------|  0x80000000   # memory managed by os.           -----|-------|  0xc0000000   # memory managed by mmz.

    48m  | os    |                                                      |       |                                       

    -----|-------|  0x83000000   # memory managed by mmz.               |       |   

    208m | mmz   |                                                 256m | mmz   |                                       

         |       |                                                      |       |                                       

    -----|-------|               # end of ddr.                     -----|-------|               # end of ddr.           

 (1)使用者在配置啟動參數時需要設定os的管理記憶體為48m,“setenv bootargs 'mem=48m ...”。  

 (2)系統啟動後,配置load3531的腳本中mmz的管理記憶體為208m(ddr0)和256m(ddr1),“insmod mmz.ko mmz=anonymous,0,0x83000000,208m:ddr1,0,0xc0000000,256m anony=1 || report_error”。

繼續閱讀