第一章 Hi3518_SDK_Vx.x.x.x版本升級操做說明linux
若是您是首次安裝本SDK,請直接參看第2章。shell
第二章 首次安裝SDKbash
一、Hi3518 SDK包位置服務器
在"Hi3518_V100R001SPC***/01.software/board"目錄下,您能夠看到一個 Hi3518_SDK_Vx.x.x.x.tgz 的文件,該文件就是Hi3518的軟件開發包。網絡
其中,Hi3518_V100R001SPC01xxx對應的是uclib版本,Hi3518_V100R001SPC02xxx對應的是glibc版本。tcp
二、解壓縮SDK包工具
在linux服務器上(或者一臺裝有linux的PC上,主流的linux發行版本都可以),使用命令:tar -zxf Hi3518_SDK_Vx.x.x.x.tgz ,操作系統
解壓縮該文件,能夠獲得一個Hi3518_SDK_Vx.x.x.x目錄。component
三、展開SDK包內容server
1) 在執行安裝腳本前建議修改系統默認shell爲bash。
2) 返回Hi3518_SDK_Vx.x.x.x目錄,運行source sdk.unpack(請用root或sudo權限執行)將會展開SDK包打包壓縮存放的內容,請按照提示完成操做。
若是您須要經過WINDOWS操做系統中轉拷貝SDK包,請先運行source sdk.cleanup,收起SDK包的內容,拷貝到新的目錄後再展開。
四、在linux服務器上安裝交叉編譯器
1)安裝uclibc交叉編譯器(注意,須要有sudo權限或者root權限):
進入Hi3518_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100nptl-linux目錄,運行chmod +x cross.install,而後運行./cross.install便可。
2) 安裝glibc交叉編譯器(注意,須要有sudo權限或者root權限):
進入Hi3518_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目錄,運行chmod +x cross.install,而後運行./cross.install便可。
3) 執行source /etc/profile, 安裝交叉編譯器的腳本配置的環境變量就能夠生效了,或者請從新登錄也可。
五、編譯osdrv
參見osdrv目錄下readme
六、SDK目錄介紹
Hi3518_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 # 樣例源代碼
第三章、安裝、升級Hi3518DEMO板開發開發環境
# 若是您使用的Hi3518的DEMO板,能夠按照如下步驟燒寫u-boot,內核以及文件系統,如下步驟均使用網絡來更新。
# 一般,您拿到的單板中已經有燒寫u-boot,若是沒有的話,建議更換帶u-boot的Flash。
# 更詳細的操做步驟及說明,請參見01.software\board\documents目錄下的《Linux開發環境用戶指南》。
# 如下操做假設您的單板上已經有u-boot,使用網口燒寫uboot、kernel及rootfs到Flash中。
# Demo單板默認爲從SPI Flahs啓動。
一、配置tftp服務器
# 可使用任意的tftp服務器;
# 若是使用hi3518a,將package/image_uclibc_hi3518a(或image_glibc_hi3518a)下的相關文件拷貝到tftp服務器目錄下;
# 若是使用hi3518c,將package/image_uclibc_hi3518c(或image_glibc_hi3518c)下的相關文件拷貝到tftp服務器目錄下;
# 若是使用hi3516c,則使用package/image_uclibc_hi3516c(或image_glibc_hi3516c)目錄下的相關文件鏡像。
二、參數配置
# 單板上電後,敲任意鍵進入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,確保網絡暢通。
三、燒寫映像文件到SPI Flash
以16M SPI Flash爲例。
1)地址空間說明
| 1M | 3M | 12M |
|------------|---------------|-----------------------|
| boot | kernel | rootfs |
如下的操做均基於圖示的地址空間分配,您也能夠根據實際狀況進行調整。
2)燒寫u-boot
sf probe 0
sf erase 0 0x100000
mw.b 82000000 ff 100000
tftp 0x82000000 u-boot-200MHZ.bin #若是是hi3516c,使用u-boot-220MHZ.bin
sf write 82000000 0 100000
reset
3)燒寫內核
sf probe 0
sf erase 100000 0x300000
mw.b 82000000 ff 300000
tftp 82000000 uImage
sf write 82000000 100000 300000
4)燒寫文件系統
sf probe 0
sf erase 400000 0xc00000
mw.b 82000000 ff c00000
tftp 82000000 rootfs_64k.jffs2
sf write 82000000 400000 0xc00000
5)設置啓動參數
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
save
四、燒寫映像文件到NAND Flash
注意:Hi3518c不支持nand flash
下面以128M 2k1bit類型的Nand Flash爲例。
1)地址空間說明
| 1M | 3M | 12M | 112M |
|------------|---------------|-----------------------|-----------------------|
| boot | kernel | rootfs | others |
如下的操做均基於圖示的地址空間分配,您也能夠根據實際狀況進行調整。
2)燒寫u-boot
mw.b 82000000 ff 100000
tftp 82000000 u-boot-200MHZ.bin #若是是hi3516c,使用u-boot-220MHZ.bin
nand erase 0 100000
nand write 82000000 0 100000
reset
3)燒寫內核
mw.b 82000000 ff f00000
tftp 82000000 uImage
nand erase 100000 300000
nand write 82000000 100000 300000
4)燒寫文件系統
mw.b 82000000 ff c00000
tftp 82000000 rootfs_2k_1bit.yaffs2
nand erase 400000 c00000
nand write.yaffs 82000000 400000 $(filesize)
5)設置啓動參數
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),3M(kernel),12M(rootfs),112M(others)'
setenv bootcmd 'nand read 0x82000000 0x100000 0x300000;bootm 0x82000000'
save
五、啓動新系統
reset # 重啓進入新系統。
第四章、開發前環境準備
一、管腳複用
與媒體業務相關的管腳複用都在mpp/ko_Hi3518目錄下的sh腳本中配置,若是與實際狀況不符請直接修改,此腳本被load3518調用,在加載mpp內核模塊以前被執行;
mpp以外的其餘管腳複用統一在uboot中配置,詳細說明請參見《U-boot移植應用開發指南》。
第五章、使用SDK和DEMO板進行開發
一、開啓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一下其餘機器,如無心外,網絡將能正常工做。
二、使用NFS文件系統進行開發
# 在開發階段,推薦使用NFS做爲開發環境,能夠省去從新制做和燒寫根文件系統的工做。
# 掛載NFS文件系統的操做命令:
mount -t nfs -o nolock -o tcp xx.xx.xx.xx:/your-nfs-path /mnt
# 而後就能夠在/mnt目錄下訪問服務器上的文件,並進行開發工做。
三、開啓telnet服務
# 網絡正常後,運行命令 telnetd& 就能夠啓動單板telnet服務,而後才能使用telnet登陸到單板。
四、運行MPP業務
# 在單板linux系統下,進入mpp/ko_Hi3518目錄,加載KO。執行load3518腳本時須要帶sensor名,如使用ar0130 sensor:
cd mpp/ko_hi3518
./load3518 -i ar0130
# 進入各sample目錄下執行相應樣例程序(sample須要先在服務器上成功編譯過)
cd mpp/sample/vio
./sample_vio 0
第六章 地址空間分配與使用
一、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,64M anony=1
表示mmz一塊區域,區域的名稱爲anonymous,起始地址爲0x84000000,大小爲64M。
您能夠經過修改mpp/ko_Hi3518目錄下load3518腳本中的mmz模塊參數,來修改其起始地址和總大小。
4)請注意MMZ內存地址範圍不能與OS內存重疊。
二、DEMO板DDR內存管理示意
1) 以容量爲128MBytes的DDR內存爲例,如下爲根據本文檔和SDK默認配置獲得的內存管理示意圖:
-----|-------| 0x80000000 # Memory managed by OS.
64M | OS |
| |
-----|-------| 0x84000000 # Memory managed by MMZ block anonymous.
64M | MMZ |
| |
-----|-------| 0x88000000 # End of DDR.
注意:
(1)用戶在配置啓動參數時須要設置OS的管理內存爲64M,「setenv bootargs 'mem=64M ...」。
(2)系統啓動後,配置load3518的腳本中mmz的管理內存爲64M,「insmod mmz.ko mmz=anonymous,0,0x84000000,64M」。