u-boot/mips移植分析

嵌入式Mips平台YAMON烧写flash 1.打开tftp:tftpd32.exe(用来传输烧写的文件)2.打开串口3.启动目标板,一直按ESC键或者0,使之进入yamon命令行下YAMON> 4、在yamon命令行下初始化网络配置。YAMON> net init                        (查看网络设置)Ethernet driver for EM86XX (v1.0)(MAC 00:16:e8:ee:d 阅读详情
1.    引言
文章是2年前移植u-boot时候分析的,u-boot方面文章比较多,但是mips方面的稍微少一点,因此贴上来就当资料搜集贴吧.
(Note: 图片上传后和原图有些出入,不知道什么原因,不过总体框图还是正确的)

1.1.    参考资料
詹荣开 <Bootloader技术内幕>
原作者未考证 <au1500(mips)及yamon启动过程>

2.    需求分析
Bootloader 在嵌入式系统中一般起硬件初始化和内核引导的作用,在产品中使用的Bootloader只要保证基本的功能和引导速度即可, 而作为开发使用的Bootloader,要求能提供灵活的配置方式和调试手段,一般选择已有的开源软件作为移植,下面主要分析Bootloader移植的 需求
2.1.    基本功能需求
基本功能包括:
1. 硬件初始化:
    根据具体的硬件环境,初始化必要的寄存器和外设
2. 内核引导
    从存储介质中读取内核映象, 并引导
3. 代码下载
    提供一种或几种机制能从主机直接下载文件到SDRAM中
2.2.    扩展功能需求
扩展功能主要是为了提供调试手段的多样化和便利化做的一些工作,包括:
1.    环境变量的保存:
提供一种能将用户定制的一些参数和脚本保存的机制;
2.    文件写入存储介质:
提供将SDRAM中文件写入存储介质的功能;
3.    USB调试手段:
提供使用USB作为控制终端和下载方式的调试开发功能;
4.    文件系统解析:
提供文件系统解析功能,使Bootloader能从存储介质的文件系统目录里读取文件。
3.    原理分析
3.1.    Bootloader原理分析
(1)    Boot Loader简介
     Bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
(2)    Boot Loader的操作模式(Operation Mode)
大多数 Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
启 动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。
下载(Downloading)模式:在这种 模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 Boot Loader 写到目标机上的FLASH 类固态存储设备中。
(3)    Bootloader的两段式启动
由 于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。
Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):
?硬件设备初始化。
?为加载 Boot Loader 的 stage2 准备 RAM 空间。
?拷贝 Boot Loader 的 stage2 到 RAM 空间中。
?设置好堆栈。
?跳转到 stage2 的 C 入口点。
Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):
?初始化本阶段要使用到的硬件设备。
?检测系统内存映射(memory map)。
?将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。
?为内核设置启动参数。
?调用内核。
(4)    Bootloader结构
    Bootloader的组成模块结构如下图所示:
Shell控制台(通过串口输出和接收命令来控制)
上层功能(包括monitor功能,和最基本的启动linux kernel功能)
底层驱动
(主要两种:一种是读写存储介质<硬盘,flash驱动等>,一种是与主机通信<网卡和串口>)
架构相关代码(架构相关的初始化代码)

3.2.    U-boot与Yamon比较
目前支持MIPS架构的Bootloader主要有U-Boot与Yamon两种,下面我们来分析比较一下
,如下表所示:
特点和功能
U-boot
Yamon
支持的cpu和board
1.      支持种类繁多,包括arm的各个系列,ppc,mips
2.      mips的支持较差,目前支持au1100,au1500系列,4kec的需要自己移植
(工作量主要在起始代码的初始化部分,包括cahe和中断的初始化)
1.基本上对mips系列的都支持,包括SEAD TM ,SEAD-2 TM Malta TM, Altas TM
2.基本上属于mips系列专用,未听说过将Yamon应用去其他架构的实例(可行性低,相当于重写)
Image大小
通常200k~300k左右,可对一些功能进行裁减至100k下
一般最小500k
主要包括初始代码(start code)+大端image+小端image,通过修改,可裁减掉一种endian的image,大概减少200k左右
最小化裁减:可能接近100k
代码结构
1.采用了将平台无关和平台相关的代码分开处理的方法
1.采用了将平台无关和平台相关的代码分开处理的方法
内核启动方式
串口,tftp,本地, DHCP
串口,tftp,本地
内核支持格式
Vmlinux,或gzip压缩,或bzip2压缩,或zImage
只支持原始的vmlinux,网上有人也尝试修改过yamon来支持zImage(amd的1500开发板提供了支持zImage的补丁)
调试功能
只有简单的Go
功能强大,支持gdb,还有异常处理等
可移植性
对于移植到新的板子或cpu,需要修改的目录结构较清晰,容易添加
因为yamon没有采用大量的ifdef来控制选项,是通过yamon启动后自动detect到cpu和board的类型的,所以修改稍微麻烦
可裁减性
结构清晰,易于裁减
结构也较清晰,但由于存在较多yamon自动检测的部分,裁减性稍差
可扩展性
易于扩展,对于扩展shell命令和增加Driver较为容易
对shell command和Driver的支持也较易添加
总结
U-boot是一个较为通用的Bootloader,主要目的是启动内核,同时给开发者提供较为方便的移植性,U-Boot的扩展功能什么丰富;
Yamon(Yet Another Monitor)是主要针对MIPS系列cpu的一个功能强大的Rom monitor程序,Yamon的扩展功能较为单一;
结论
使用U-Boot作为开发用Bootloader

下面是Yamon的目录分析和启动流程图(主要根据参考资料里的总结)

                                                        Yamon目录结构

                                                       Yamon启动流程

3.3.    U-Boot目录结构
根据上面的比较,我们简单分析一下U-Boot的代码目录结构,描述其代码主要功能,如下图所示:


4.    设计移植
4.1.    启动流程
下面我们详细分析U-Boot的启动流程,并指出针对具体的硬件,启动流程中需要修改的代码,如下图所示:


4.2.    移植分析
根据上述分析,我们代码移植也包括三方面:
(1)    片级移植:
片级移植主要是针对具体cpu的初始化代码的修改,针对我们的mips平台,主要包括: a) 通用寄存器的初始化
b) CP0的初始化(status, config, watch, count, compare, etc.)
c) Watchdog初始化
d) Cache初始化
e) TLB初始化
(2)    板级移植
a)    串口驱动
b)    flash读写驱动(nor, nand)
c)    HD读写驱动
d)    网卡驱动
(3)    功能层扩展
可根据需求添加新功能或裁减优化,包括调试功能,启动功能,下载功能
4.3.    修改代码
主要修改的代码说明如下:
(1)    Makefile 添加开发板的编译支持;
(2)    Include/configs/myboard.h 开发板的定义,启动参数等;
(3)    cpu/mips/start.S 修改初始化代码和入口;
(4)    board/myboard/flash.c 对应的Nor Flash驱动;
(5)    board/myboard/myboard.c 对应的板级初始化代码;
(6)    board/myboard/lowlevel_init.S 初始化硬件的汇编代码;
(7)    board/myboard/serial.c 串口驱动;
(8)    drivers/rtl8019.h drivers/rtl8019.c 修改RTL8019驱动的寄存器定义等。
5.    扩展功能
以下的功能是根据以后开发调试的不同需求,有可能需要添加的功能
5.1.    Logo功能
LOGO功能在产品级使用中需要,在一般开发中可不使用,目前使用简单的写RGB数据来实现LOGO功能。
5.2.    NOR Flash驱动
NOR Flash的读取是不需要驱动的,如果需要保存数据到NOR flash,或通过bootloader提供烧写功能,就必须实现NOR Flash驱动, 由于最终产品不会有NOR, 且目前开发板NOR已有烧写工具,因此未实现NOR Flash驱动。
5.3.    Nand Flash驱动
在后期的开发板,将使用Nand Flash作为存储介质,如果需要使用U-boot作为开发用Bootloader,需要将Nand Flash驱动移植到U-Boot中。
5.4.    ATA 驱动
在后期的开发板,如果使用硬盘作为存储介质,如果需要使用U-boot作为开发用Bootloader,需要将ATA驱动移植到U-Boot中。
5.5.    文件系统解析
目前U-Boot支持ext2, FAT等,如果需要支持其他文件系统,需要移植对应的代码。

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1789657
 
DM6467开发之U-Boot移植(1)——U-Boot学习 1        DM6467启动流程 在移植U-Boot之前,首先需要了解DM6467的启动流程,知道U-Boot在系统启动过程中的位置及作用。DM6467标准的启动过程如图 1‑1所示,主要包括四个步骤:RBL(ROM BootLoader)→UBL(User Boot Loader)→U-Boot →Linux内核。 图1‑1 DM6467启动流程 系统上电时,首先运行的是 阅读详情

相关推荐

u-boot分析 二 (u-boot目录结构)

u-boot分析 二继前一启动篇,此博文目的:学习u-boot的目录结构,从code架构上对u-boot有一个整体的把握和了解。一、学习u-boot,得问,什么是u-boot?u-boot是一段开源的程序。Universal Boot Loader,普遍的引导程序。是非常常用的一个引导程序,可作为主流系统的引导程序,如OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, S

老谢的自留地 1万+

mips core仿真

mips core simulation1. RTL 设计遵照MIPS五级流水(IF, ID, EX, MEM, WB)体系结构进行相应的RTL设计。包含ROM(或者I cache, 在IF_stage),regfile,RAM(或者是D cache,在MEM_stage)。2. 仿真Xilinx的memory interface 可以分为三种:intereface, coregen, pr...

weixin_30294709的博客 223

ARMv8架构u-boot启动流程详细分析(一)

文章目录1 概述2 armv8 u-boot的启动3 u-boot源码整体结构和一些编译配置方式3.1 编译配置方式 注:本文基于armv8架构来对u-boot进行启动流程分析,u-boot版本为2022-01。 1 概述 首先引用wiki上的简介: u-boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。u-boot最先是由德国DENX软件中心团队开发,后续众多有志于开放源码bootloader移植工作的嵌入式开发人员将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支

看我眼色行事的博客 1万+

嵌入式Linux系统的Bootloader简介

嵌入式Linux系统的Bootloader简介    支持Linux的Bootloader比较多,发展到2010年,出现了一些必然的结果,有些Bootload

akatope的专栏 900

U-BOOT移植过程详解: 开题

申明   本着学习交流的原则, 将个人移植u-boot的过程做一个记录. 文章参考了csdn blog里面的很多内容, 有的已经记不得出处了, 只好把当时的摘要直接贴出来. 如果冒犯, 还请见谅. 如有侵权, 请与我邮件联系. 谢谢! U-BOOT基础知识 u-boot 简介 U-boot全称UniversalBootLoader,即通用bootloader。它是德国DENX小组的

liuxin_john的专栏 1954

移植u-boot-2019.10到jz2440

目录前言1 u-boot简介2 第一步——根据自己的硬件修改u-boot2.1 移植的不同硬件层次2.2 选择合适的坯子2.3 将旧版本中支持SMDK2410的文件拷贝到新版u-boot2.3.1 拷贝s3c24x0目录2.3.2 拷贝smdk2410目录2.3.3 拷贝arch-s3c24x0目录2.3.4 拷贝零散分布的驱动源程序2.3.5 拷贝smdk2410.h2.3.6 拷贝smdk24...

gzxb1995的博客 3862

u-boot 启动流程(mips)

u-boot的启动过程比较简单,大致做下面的工作:    1 cpu初始化    2 时钟,串口,内存(ddr ram)初始化    3 内存划分,分配栈,数据,配置参数,以及u-boot代码在内存中的位置。    4 对u-boot代码做relocate    5 初始化 malloc,flash,pci 以及外设(比如,网口)    6 进入命令行或者直接启动Linux kernel基本上

huangxb的笔记 3461

u-boot_mips移植分析 (转载的)

u-boot_mips移植分析 (转载的)

[mips-uboot]4:u-boot/mips移植分析

<br />http://blog.youkuaiyun.com/SkyZoom/archive/2007/09/18/1789657.aspx<br />  1.    引言<br /> 文章是2年前移植u-boot时候分析的,u-boot方面文章比较多,但是mips方面的稍微少一点,因此贴上来就当资料搜集贴吧.<br /> (Note: 图片上传后和原图有些出入,不知道什么原因,不过总体框图还是正确的)<br /><br /> 1.1.    参考资料<br /> 詹

osala的专栏 2603

mips u-boot 代码分析

分析mips uboot源码,很方便移植到不同版本的mips平台。

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1124

9.linux bsp工程师学习路线

看懂U-Boot启动流程、板级初始化逻辑编写/修改设备树DTS/DTSI文件掌握Platform、GPIO/I2C/SPI等通用驱动开发内核配置、裁剪、编译与移植实战调试:串口日志、Oops解析、寄存器调试、JLink工具使用精通ARM/MIPS架构、时钟/DDR/中断等硬件底层知识。

知识共享、互助共进 551

EfficientNet中的MBConv模块详解:为什么它能如此高效?

本文深度解析了EfficientNet中的MBConv模块,详细介绍了其核心设计理念、效率优化技术和复合缩放理论。MBConv通过深度可分离卷积、倒残差结构和注意力机制三大关键技术,实现了计算效率与模型性能的平衡,成为高效网络结构设计的典范。

tcp8optimizer的博客 353

mips的U-Boot分析及移植

<br />要注意mips具有流水线可见性,所以跟在跳转指令后的下一条指令,在执行跳转到的地方前,都会执行,这个叫分支延迟。但是编译器会隐藏该特性,但可以通过设置”.set noreorder”来禁止编译器重新组织代码顺序。<br />每个板子都有自己的lds文件。这个主要是用来说明编译生成的指令,及运行过程中用到的数据放置的位置。这个可以参考ld的手册。比如board/dbau1×00/u-boot.lds。<br />OUTPUT_FORMAT(“elf32-tradbigmips”, “elf32-t

babyfans的专栏 2864

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

机器学习实战5-天气预测系列:利用数据集可视化分析数据,并预测某个城市的天气情况

大家好,我是微学AI,最近天气真的是多变啊,忽冷忽热,今天再次给大家带来天气的话题,机器学习实战5-天气预测系列,我们将探讨一个城市的气象数据集,并利用机器学习来预测该城市的天气状况。该数据集包含年平均温度和湿度等信息。

微学AI的博客 1万+

U-BOOT全线移植分析(转)

U-BOOT全线移植分析系列之一 ――――BOOTLOADER介绍 Sailor_forever sailing_9806@163.com 转载请注明 http://blog.youkuaiyun.com/sailor_8318/archive/2008/08/04/2768049.aspx 【摘要】本节介绍了bootloader的基本概念。首先分析了为什么要针对特定的CPU和开发板移植bootloa

dsg333的专栏 2851

华为OD机试真题2025双机位A卷 C++ 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 674

U-boot移植之一:分析Makefile

<br /> <br />学习UBOOT首先得学习Mafefile,推荐一篇文章《跟我一起写写Makefile》。<br />uboot 的makefile分主目录中的主makefile和各级目录中的子Makefile,移植Uboot,得理解主makefile以及其整体架构。<br /> <br />主makefile主要干两件事:<br />1:配置适合特定平台的各种参数和文件<br />2:制定make规则,生成uboot.bin<br />关于对makefile的分析,主要参考:<br />u-boo

hadise的专栏 2008

零基础入门simulink建模仿真--基于Simulink的QPSK调制与解调仿真建模示例

QPSK是一种相位调制技术,将两个比特映射到一个符号上,每个符号对应四个可能的相位之一(0°、90°、180°、270°)。通过Simulink,我们可以通过模块化的建模方式实现QPSK的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的QPSK调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解QPSK调制与解调的基本原理及其应用。所需工具和环境:列出进行QPSK仿真所需的工具和环境。步骤详解。

amy_mhd的博客 1309

【ComfyUI】Wan 2.2 14B 首尾帧转视频 平滑过渡

本文介绍了基于 Wan2.2 ComfyUI 的视频生成工作流,通过预训练模型、提示词与参考图像的结合,实现高质量视频合成。工作流采用高低噪声模型与 LoRA 模块优化风格与细节,确保画面过渡平滑稳定。核心流程包括模型加载、图像输入、提示词编码、潜空间采样、解码与视频合成,最终生成动态转场视频。节点设计涵盖 CLIPTextEncode、KSamplerAdvanced 等关键模块,协同完成从文本到视频的全链路生成。正向提示词作为核心驱动力,直接影响视频的动作、镜头与画面变化。

Mr数据杨 1703

U-BOOT的启动流程及移植

摘要:嵌入式系统一般没有通用的bootloader,u-boot是功能强大的bootloader开发软件,但相对也比较复杂。文中对u-boot的启动流程作了介绍,详细给出了u-boot在S3C44B0开发板上的移植方法和步骤。    关键词:bootloader;u-boot;嵌入式系统;移植;S3C44B01 Bootloader及u-boot简介Bootloader 代码是芯片复位

andyzx的开发日记 2873

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

u-boot 移植步骤详解

u-boot 移植步骤详解 来源: 互联网 发布者:书生刺客 1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱

万里晴空 2299

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【u-boot】uboot代码简要分析 (u-boot 移植)

uboot代码简要分析 (u-boot 移植) 2012-12-19 22:46:04 【转】 先来看看源码目录结构,再按照代码的执行顺序简单地分析源码 1.U-boot源码整体框架 源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、sta...

小鱼菜鸟的博客 1062

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

U-boot(七):U-boot移植

网卡芯片CS引脚(片选信号),210每个SROM bank对应选信号CSn(n=0-5),210的DM9000接在CSn1(SROM bank1),DM9000总线地址基地址是0x88000000。210的SROM控制器是8/16bit接口,实际使用16位接口,网线有8根,4根都是GND,发送2根(Tx-,Tx+),接收2根(Rx+,Rx-)DM9000的CMD引脚接210的ADDR2引脚,数据线和地址线复用,CMD为高电平传输DATA,低电平传输INDEX(偏移地址)

tyro_wzp的博客 1120
上一篇: U-Boot在基于ADSP BF533的嵌入式Linux系统上的移植
下一篇: u-boot命令的添加
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值