海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot移植應用開發指南

SZX511發表於2019-06-18

本文件主要介紹本在Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C單板上如何移植和燒寫 U-boot(Hi3521 單板的 Bootloader)的相關操作及如何使用ARM 除錯工具。

Hi3521單板的Bootloader 採用U-boot。當選用的外圍晶片的型號與單板上外圍晶片的型號不同時,需要修改 U-boot 配置檔案,主要包括儲存器配置、管腳複用。

1.2 U-boot 目錄結構
U-boot 的主要目錄結構如表 1-1 所示,詳細目錄說明請閱讀 U-boot 目錄下的 README文件。


2.1 概述
在 Hi3521 單板上所選用的外圍晶片型號如下:
DDR SDRAM:K4B2G1646C-HCK0 
NAND Flash:TC58NVG1S3ETA00 
SPI Flash:FL128PIFL121QQ030 
如果選用的外圍晶片不是以上型號時,需要適當修改 SDK 中的“osdrv/ 
tools/pc_tools/uboot_tools/”目錄下的配置表格,對應的單板才能正常執行。

2.2 編譯 U-boot 
當所有以上移植步驟完成後,就可以編譯 U-boot,操作如下:
make ARCH=arm CROSS_COMPILE=arm-hisivXXX-linux- godarm_config //選擇Hi3521 
make ARCH=arm CROSS_COMPILE=arm-hisivXXX-linux- godcare_config //選擇Hi3520A 
make ARCH=arm CROSS_COMPILE=arm-hisivXXX-linux- hi3520d_config //選擇Hi3520D/Hi3515A 
編譯成功後,將在 U-boot 目錄下生成 u-boot.bin。

其中 CROSS_COMPILE 表示工具鏈。文件中統一以 CROSS_COMPILE=arm-hisiXXX-linux-來
表示兩種情況。
Hi35xx_V100R001C01SPCxxx 對應 uclibc,使用 uclibc 工具鏈時,CROSS_COMPILE=armhisiv100nptl-linux-。
Hi35xx_V100R001C02SPCxxx 對應 glibc,使用 glibc 工具鏈時,CROSS_COMPILE=armhisiv200-linux-。

2.3 配置 DDR 儲存器
在 Windows 下開啟 SDK 中的“osdrv/ tools/pc_tools/uboot_tools/”目錄下的配置表格。
當選用不同的 DDR SDRAM 時,需要針對不同器件的特性,對配置工作表中的相關標籤頁進行修改。

2.4 配置管腳複用
如果管腳複用有變化,還需要對配置表格中的相關標籤頁進行修改。

2.5 生成最終使用的 U-boot 映象
完成配置表格的修改後,儲存表格。單擊表格第一個標籤頁上的按鈕“Generage reg bin file”,生成臨時檔案 reg_info.bin。
將臨時檔案 reg_info.bin 和編譯 u-boot 得到的 u-boot.bin 都複製到 SDK 中的“osdrv/tools/pc_tools/uboot_tools/目錄下,執行命令:
mkboot.sh reg_info.bin u-boot-hi3521_930MHz.bin
其中 u-boot-hi3521_930MHz.bin 就是能夠在單板上執行的 U-boot 映象。

目前是將 Hi3520D 和 Hi3515A/Hi3515C 做成一個 U-boot 映象,需要將 Hi3520D、Hi3515A 表格生成的臨時檔案,分別命名為 reg_info_hi3520d.bin、reg_info_hi3515a.bin,然後將兩個臨時檔案和編譯好的 u-boot.bin 一起複製到 SDK 中的“osdrv/tools/pc_tools/uboot_tools/目錄下,執行命令:mkboot-hi3520d.sh 
reg_info_hi3520d.bin reg_info_hi3515a.bin u-boot-hi3520d.bin 
需要特別注意 Hi3520D 的 reg_info 在前、15a 的 reg_info 在後,這個順序不能隨意更改。

在 u-boot 的程式碼段中需要預留 4800Byte 的空白區,用來存放 reg_info_hi3520d.bin、reg_info_hi3515a.bin 檔案的內容,兩個檔案各佔 2400Byte。由於受片內 RAM 的限制,預留空白區的大小最好不要超過 4800Byte,如果超過這個限制將會導致 FastBoot
無法正常燒寫。如果確實需要預留超過 4800Byte 的空白區,可以考慮先用 FastBoot 工具燒寫一個未超過 4800Byte 限制的 U-boot 映象,然後透過網路把超過限制的 U-boot映象燒進 Flash。

如果只需將 Hi3520D 或者 Hi3515A/Hi3515C 的 reg_info 檔案放入 U-boot 映象,需要把U-boot 目錄下./include/configs/hi3520d.h 檔案中的 ENABLE_HI3520D_BLANK 或者ENABLE_HI3515A_BLANK 宏註釋掉即可。

為臨時檔案(reg_info_xxx.bin)預留的空白區的大小由宏 REG_INFO_BLANK_SIZE決定,預設是 2400,如果需要可以調整 REG_INFO_BLANK_SIZE 的大小。

如果想要把更多的臨時檔案放入 U-boot 映象,需要以下步驟:
首先,需要修改./arch/arm/cpu/hi3520d/start.S54~61 行程式碼,具體程式碼如下:
__blank_zone_start: 
#ifdef ENABLE_HI3520D_BLANK 
.fill REG_INFO_BLANK_SIZE,1,0 /* 空白區*/ 
#endif 
#ifdef ENABLE_HI3515A_BLANK 
.fill REG_INFO_BLANK_SIZE,1,0 /* 空白區*/ 
#endif 
/* 在此處新增空白區 */ 
__blank_zone_end: 
其次,需要修改 osdrv/tools/pc_tools/uboot_tools/ mkboot-hi3520d.sh 檔案,如下:
dd if=$1 of=./fb2 bs=2400 conv=sync 
dd if=$2 of=./fb3 bs=2400 conv=sync 
/* 可以在此處增加類似上面兩個命令 */ 
dd if=./u-boot.bin of=./fb4 bs=1 skip=4864 /* 大小為 64 + 所有空白區的大小 */ 
cat fb1 fb2 fb3 fb4 > $3

3.1 概述

如果待移植單板中已有 U-boot 執行,則可以透過串列埠或網口與伺服器連線,直接更新U-boot。
如果是第一次燒寫,則需要透過網口使用 RVDS 工具進行燒寫。由於晶片特性,必須有透過 RVDS 下載到單板的指令碼,該指令碼能夠對儲存器和晶片進行初始化。在 HI3521 SDK 中提供了相應的初始化指令碼,當選用了不同的外圍晶片,則需要重新配置初始化指令碼才能使用。

3.2 透過 bootrom 工具燒寫 U-boot 
具體操作方式請參考《Fastboot 工具使用說明 Application Notes》。

3.3 兩種 Flash 的 U-boot 燒寫方法
3.3.1 SPI Flash 燒寫方法
SPI Flash 燒寫方法如下:
1. 在記憶體中執行起來之後在超級終端中輸入:
hisilicon# mw.b 0x82000000 ff 0x100000 /* 對記憶體初始化*/ 
hisilicon# tftp 0x82000000 u-boot-hi3521_930MHz.bin /*U-boot下載到記憶體
*/ 
hisilicon# sf probe 0 /*探測並初始化SPI flash*/ 
hisilicon# sf erase 0x0 0x100000 /*擦除 1M大小*/ 
hisilicon# sf write 0x82000000 0x0 0x100000 /*從記憶體寫入SPI Flash*/

2. 上述步驟操作完成後,重啟系統可以看到 U-boot 燒寫成功。

----結束

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529038/viewspace-2647995/,如需轉載,請註明出處,否則將追究法律責任。

相關文章