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”。