socfpga armv7 u-boot学习记录

2024-02-17 07:48
文章标签 学习 记录 boot armv7 socfpga

本文主要是介绍socfpga armv7 u-boot学习记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://blog.csdn.net/helonglong88/article/details/51209876

最近在学习altera的socfpga,写一下关于它的u-boot的学习心得。

关于altera的u-boot与linux的交叉编译环境可以在如下网页上查看:

http://www.alterawiki.com/wiki/Compiling_u-boot_and_Linux_Kernel_for_Cyclone_V_SoC

一、 u-boot编译环境的搭建:

下载编译软件: https://sourcery.mentor.com/GNUToolchain/package10928/public/arm-none-eabi/arm-2012.09-63-arm-none-eabi.bin
安装步骤如下:
1. sudo dpkg-reconfigure -plow dash //此步骤弹出对话框,要选择NO,即使用bash,不是dash
2. ls -lh /bin/sh //用来验证sh指向bash还是dash,应指向bash
3. sudo mkdir -p /usr/local/codebench_2012_09_63
4. sudo chown $USER.users /usr/local/codebench_2012_09_63/
5. echo "export PATH=/usr/local/codebench_2012_09_63/bin:\$PATH" >~/CodeBench_setup_linux.sh
6. /bin/sh arm-2012.09-63-arm-none-eabi.bin
 

 

二、u-boot安装编译下载步骤

从altera官方下载uboot原码 ftp://ftp.altera.com/outgoing/SoC_FPGA/ethernet_3.7/u-bootaltera-2012.10.tgz

1.tar xvzf u-boot-altera-2012.10.tgz  //Please make sure your PATH variable is set in the rightway so that thecompile tool armnone-eabi-gcc is available.
2. cd u-boot-altera-2012.10
3. export CROSS_COMPILE=arm-none-eabi-
4. ./MAKEALL socfpga_cyclone5
 

 

三、u-boot代码学习

3.1 socfpga芯片启动流程简介

socfpga的启动主要分为3步:首先执行片内ROM进行一般初始化,如一些外部载入设备的确定等基本信息,然后从外部存储器将preloader(u-boot-spl.bin)复制到片内RAM执行,执行完毕后将bootloader(u-boot.bin)从外部存储器复制到RAM中,跳转到uboot起始地址运行u-boot,u-boot将内核加载环境准备好后就复制内核映像到RAM中启动内核,u-boot使命完成。uboot编译后自动会生成uboot-spl.bin与u-boot.bin两个二进制文件。

socfpga的片内ROM固化了对nand flash,sd/mmc flash与spi flash的最基本支持。对于sd/mmc flash的支持是受限的,它不支持sd卡中有文件系统,支持两种方式MBR方式与RAW方式。由于固化的驱动不支持文件系统,因此在MBR模式下需要将存储preloader与bootloader的分区类型设置为0xA2,即无文件系统,芯片reset后选择SD/MMC启动方式(根据外部引脚电平设置选择),片内ROM经过简单初始化SD/MMC后,分别在MBR方式与RAW方式下去读取flash。若发现SD卡是MBR格式,则搜索类型为0xA2类型的分区,搜索到后读取该分区首地址开始的前64kB内容,即preloader,将其加载到片内RAM中,地址为0xFFFF0000,跳转到preloader的首地址,转移控制权,即PC指针指向了preloader。

3.2 u-boot代码启动流程简介

3.2.1 u-boot-spl启动流程

u-boot-spl代码与u-boot代码有很多是重合的。u-boot-spl的执行过程是start.s(位于/arch/arm/cpu/armv7/)——>board_init_f(位于/arch/arm/lib/board.c)——>board_init_r(位于/common/spl,完成环境变量、串口、DDR等初始化)——>spl_mmc_load_image(位于/drivers/mmc,这是从sd卡启动,从其他设备启动可以类推,将u-boot.bin加载到loadaddr地址)——>jump_to_image_no_args(位于/common/spl),跳转到u-boot的entypoint,一般与loadaddr相同。

3.2.2 u-boot启动流程

u-boot的启动流程也是从start.s开始,设置向量表等(位于/arch/arm/cpu/armv7/start.s)——>board_init_f(位于/arch/arm/lib/board.c)——>relocate_code(位于/arch/arm/cpu/armv7/start.s)——>board_init_r(位于/arch/arm/lib/board.c)——>main_loop (/common/main.c)——>run_command_list(位于/common/main.c)执行脚本命令“bootcmd”(/include/configs/socfpga_cyclone5.h中定义为"run mmcload; run mmcboot","run mmcload"与"run mmcboot"也定义在socfpga_cyclone5.h),内核开始加载并运行。

这篇关于socfpga armv7 u-boot学习记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt