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

相关文章

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.