海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南

本文主要是介绍海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文档主要介绍本在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文档。

表1-1 U-boot 的主要目录结构

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 下载到单板的脚本,该脚本能够对存储器和芯片进行初始化。在  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*/

这篇关于海思Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C U-boot 移植应用 开发指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787699

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例