AT91RM9200 启动过程详解

AT91RM9200微处理器中文技术手册解析 随着嵌入式系统技术的飞速发展,高性能、低功耗的微处理器得到了广泛应用。本章首先为您介绍AT91RM9200微处理器,这款基于ARM920T内核的微处理器以其稳定的性能和丰富的外设接口在工业控制、网络通信等领域占据了一席之地。ARM920T内核的编程模型包括:寄存器:拥有37个32位寄存器,包括多个通用寄存器、状态寄存器以及PC(程序计数器)。异常处理:支持快速中断和标准中断,允许处理器及时响应紧急事件。存储保护单元。 阅读详情
 最近,一直在做ramdisk,把ARM Linux的启动过程完整的看了一遍,收获不少,心想可以写点原创了。

      考虑到网上的文档虽然有介绍ARM Linux的启动过程的,但是一般没有给出流程图,也讲的十分零星,没有一个全貌,我就主要以流程图的方式给出,再一点一点的详解每个过程,刚刚接触嵌入式ARM Linux,很多问题理解不深,可能有错误的地方,还望各位高手指出,一起讨论,一起进步,开源万岁!

 

  一 引言

    在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:
1. 引导加载程序。 包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。
2. Linux 内核。 特定于嵌入式板子的定制内核以及内核的启动参数。
3. 文件系统。 包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。
4. 用户应用程序。 特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。
引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构我们可以知道,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Boot Loader 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。

                                                                         ——摘自詹荣开《嵌入式系统Boot Loader技术内幕》

                                                                          http://www.ibm.com/developerworks/cn/linux/l-btloader/


二.基本概念
1.什么是loader?
Loader是在设备上没有任何引导程序是用于引导U-boot的一小段代码。它通过Xmodem协议load到SDRAM里,并启动Xmodem协议,提示用户下载U-boot,一旦用户通过Xmodem协议将U-boot传到SDRAM之后,PC指针就跳到U-boot,U-boot接管CPU。致此,loader的生命周期结束。掉电后,就丢失,因为存放在SDRAM里。我把它理解成PC机的应急启动盘。
2.什么是Boot?
Boot是设备每次上电或复位后执行的第一段代码,也用于引导U-boot。是每个设备必须的一小段代码。我把它理解为BIOS,当然不能完全这样理解,毕竟Boot和U-boot合起来才完成了BIOS的工作。

两者的区别与联系:
区别:
Loader通常在SDRAM里执行,只执行一次。不需要每次都执行
Boot通常存放在不丢失介质,如flash里,在上电后,从flash复制到SDRAM里执行
注:当然对于有些Flash(如Nor Flash)也可以在flash中执行,但是在SDRAM里执行更快,一般会copy到SDRAM里再执行
联系:两者都是为了引导U-boot而设计的

3.什么是U-boot?
U-boot功能非常强大,可以初始化硬件设备、建立内存空间的映射图,可以使用各种命令,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。我觉得U-boot的核心目标就是引导Linux Kernel。

4.什么是Linux Kernel?
      Kernel ——操作系统内核:是大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。当然Linux Kernel并不像说的这么简单,但是对程序员来说就像天堂,我觉得是整个操作系统的精华所在,也是成为程序高手的捷径,我也要看内核源码,修炼内功!^_^

5.什么是ramdisk文件系统?
所谓的RAM驱动器,实际上是把系统内存划出一部分当作硬盘使用。对于操作系统来讲内存的存取速度远远大于机械磁盘,所以RAM驱动器肯定要比机械的硬盘快得多。

 

三.启动过程全流程

 

     首先激活集成在内部ROM的Bootloader,也称为一级Bootloader。依次查找SPI上的DataFlash、连接在两线接口(TWI)上的EEPROM或连接在外部总线接口(EBI)上的8位存储器器件上的8位有效ARM异常向量。
若发现有效序列,会将Flash或EEPROM上的代码load到外部SDRAM中,再跳转到SDRAM开始执行;
若没有发现有效向量就引导Uploader启动,它初始化调试单元串行端口(DBGU)与USB器件端口,然后启动xmodem协议提示用户下载程序,此时用户终端将会显示CCC字符。下载的程序将会load到9200内部的SRAM(16K)。
而用于引导linux的u-boot通常体积很大,在100K以上的数量级,所以此时我们需要一个二级bootloader为u-boot程序的下载、运行创造运行环境,这个二级bootloader就是loader程序。Loader程序体积很小,其功能单一,与内部的bootloader(Uploader)相比,其增加了SDRAM的初始化过程。Loader程序可以通过一级bootloader下载到9200内部的SRAM,然后将CPU交给loader程序,loader程序初始化DEBUG端口、SDRAM之后同样启动xmodem协议,请求用户下载u-boot。具体内容可以参考at91rm9200提供的datasheet。——《AT91RM9200 DateSheet》P83-P94(引导程序章节)
通过xmodem协议将Uboot下载到SDRAM后,进入U-boot执行,在U-boot中可以设置各种环境变量,并且可以通过Kermit协议将Boot和U-boot下载到SDRAM中,再copy到flash里。然后开始引导内核,将内核参数转给内核。致此,U-boot光荣的完成它的任务,生命周期结束,(又一位英雄的逝世,呵呵……),终于我们强大的Linux Kernel接管CPU,系统开始走上正常轨道。

AT91RM9200中文手册(修正版) AT91RM9200中文手册(修正版) AT91RM9200中文手册(修正版)AT91RM9200中文手册(修正版)AT91RM9200中文手册(修正版) 立即下载

相关推荐

AT91RM9200中文手册(修正版)

修正了很多中文翻译版本的错误 算是现在翻译过来最准的吧

ATMEL公司的AT91RM9200调试手册

 LINUX常用命令压缩、解压部分1.         压缩目录)tar czf DirName.tgz DirName (2.         针对以gz为结尾的压缩文件)gzip –d filenames (3.         针对以tar为结尾的压缩文件)tar –xvf filenames (4.         针对以tar.gz为结尾的压缩文件)tar zxv

嵌入式 Linux ARM ADS ADHOC C C++ PLC 单片机 4064

At91RM9200 中文数据手册

这个主要是关于ARM9的中文技术手册,对想利用ARM9 开发一些应用以及学习ARM9 的人来说还是比较有用的。

基于ATMEL AT91RM9200的嵌入式Linux移植笔记 (2)

来自: http://hi.baidu.com/xfcylyf/blog/item/10776a95157e6b46d1135ef4.html 一、了解一下存储器的基本分类情况。 存储器的物理实质是一组或多组具备数据输入输出和数据存储功能的集成电路,用于充当设备缓存或保存固定的程序及数据。存储器按存储信息的功能可分为只读存储器ROM(Read Only Memory)和随机存储器RAM(R

鹿门山隐士 1170

Cartographer全局重定位优化:无初始位姿约束的2万平工厂秒级定位实践

本文深入解析了Cartographer在2万平工业场景中的全局重定位优化实践,通过分支定界优化、子图动态加载和多传感器融合等关键技术,实现了无初始位姿约束下的秒级重定位。特别针对大场景下的快速重定位需求,优化后的系统在RK3588平台上表现出色,定位耗时从47秒降至1.8秒,成功率提升至91%,为工业自动化提供了高效解决方案。

rose2的博客 969

一步一步搭建S32K14x的AutoSar项目----MCAL工程创建及说明

一步一步搭建S32K14X的Autosar项目--MCAL工程创建及说明

wo580231的博客 2493

AT91RM9200的板子,进入系统后每隔30秒自动重启,为什么?

Linux version 2.4.27-vrs1 (root@MagicLinux) (gcc version 2.95.3 20010315 (release)) #28 三 3月 19 14:51:13 CST 2008。host=0.0.0.0 port=3023 back=10 dirroot=/tmp logdir=/tmp/telnet-server.log 是后台工作模式(进程ID:114)接下来反复重复上面的过程。LCD屏幕无显示,且每隔60秒背光就亮一下。

weixin_42102469的博客 477

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变

本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。

weixin_29235525的博客 282

AT91RM9200的启动过程

本文来自http://www.hyesco.com/forum/dispbbs.asp?boardid=5&star=1&replyid=24329&id=50&skin=0&page=1 AT91RM9200的启动过程 系统上电,检测BMS,选择系统的启动方式,如果BMS为高电平,则系统从片内ROM启动。AT91RM9200的ROM上电后被映射到了0x0和0x100000处,在这两个

鹿门山隐士 453

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4437

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

君逍遥o 408

AT91RM9200的U-BOOT启动烧写过程

Uboot 烧写过程 1.一开始令BMS=1(拔掉跳线),则系统从片内ROM中启动。内部启动程序初始化调试串口和USB设备接口从外部载入启动程序。在Windows平台下,启动超级终端,发送文件loader.bin和u-boot.bin到SDRAM,成功启动u-boot.2.启动了u-boot后就利用u-boot的功能,发送boot.bin和u-boot.gz到SDRAM,然后再

ruixj的专栏 2198

华为OD机试真题 新系统 【社交网络相同爱好好友查询】

华为od机试真题 新系统【社交网络相同爱好好友查询】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试真题【社交网络相同爱好好友查询】多语言题解实现。

qq_45776114的博客 1336

at91rm9200启动过程

系统上电,检测BMS,选择系统的启动方式,如果BMS为高电平,则系统从片内ROM启动。AT91RM9200的ROM上电后被映射到了0x0和0x100000处,在这两个地址处都可以访问到ROM。由于9200的ROM中固化了一个BOOTLOAER程序。所以PC从0X0处开始执行这个BOOTLOAER(准确的说应该是一级BOOTLOADER)。这个BOOTLOER依次完成以下步骤: 1. PLL SE

flymachine的专栏 1237

温度PID控制PLC程序

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

U-boot在AT91RM9200上的全线移植分析

  U-boot在AT91RM9200上的全线移植分析 Sailor_forever  sailing_9806@163.com  转载请注明http://blog.youkuaiyun.com/sailor_8318/archive/2007/10/11/1820904.aspx **************************************************

Sailor_forever 6486

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

AT91RM9200的U-BOOT启动烧写过程【转】

关于启动过程1. 一开始令BMS=1(拔掉跳线),则系统从片内ROM中启动。内部启动程序初始化调试串口和USB设备接口从外部载入启动程序。在Windows平台下,启动超级终端,发送文件loader.bin和u-boot.bin到SDRAM,成功启动u-boot.2. 启动了u-boot后就利用u-boot的功能,发送boot.bin和u-boot.gz到SDRAM,然后再拷贝到FLASH,

游手好弦 信步涂鸦 1771

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

(三)U-Boot在AT91RM9200上的移植及启动分析

1.引 言 U-Boot(Universal Boot Loader)是遵循GPL条款的开放源码项目,他支持多种体系结构的上百种开发板,并且支持多种嵌入式操作系统内核,具有较高的可靠性和稳定性,已经成为功能最多、灵活性最强并且开发最积极的开放源码BootLoader。作为通用的BootLoader,U-Boot可以方便地移植到其他硬件平台上。 本文基于AT91RM9200的嵌入式目标板和U-B

迷之月光的专栏 1092

AT91RM9200启动机制简析

AT91RM9200启动机制简析 本文以H9200M开发板为例,简单分析一下AT91RM9200处理器的启动机制 一 H9200M开发板简介1.ATMEL的AT91RM9200微处理器  AT91RM9200微处理器是一款由ATMEL设计生产的嵌入式ARM微处理器,内含一个ARM920T核和以下主要片内外围1) ARM920T ARM-Thum

ruixj的专栏 1961

AT91RM9200处理器的启动机制

2009/8/12重新生产一批板子后,发现在写入boot.bin和u-boot后,外部启动超级终端没有观测到任何现象,很郁闷.在网上搜一下,发现以下好文章:  1.引言在开发基于AT91RM9200 处理器的嵌入式系统时,以何种方式启动系统是一个首先要考虑的基本问题。庆幸的是,AT91RM9200 处理器提供了各种各样的启动方式,总体上可分为从外部的DATAFLASH、二线EEPROM

warmshepherd的专栏 2470

U-BOOT全线移植分析系列之三 ――U-BOOT在AT91RM9200上的移植

<br />【摘要】本节介绍了U-boot 在AT91RM9200 上移 植的详细过程。首先分析AT91RM9200 片内片外启动的详细流 程,接着介绍了AT91RM9200 启动所需几个文件的执行流程。针对片内片外存储器的映射情况,介绍了bootloader 、内 核及文件系统的内存分布。最后介绍了uboot 在AT91RM9200 上移植所需要的基本文件,并根据开发板的配置情况介绍了详细的移植过程。<br /> <br />【关键词】AT91RM9200 ,U-boot ,片内启

liangkaiming的专栏 1523

Atmel at91rm9200的armlinux的bootloader启动代码分析

<!--google_ad_client = "pub-2132256014190581";/* 160x600, 创建于 09-1-4 */google_ad_slot = "4461398019";google_ad_width = 160;google_ad_height = 600;//-->balancesli写著 前阶段做了一次基于at9

嵌入式 Linux ARM ADS ADHOC C C++ PLC 单片机 2379
上一篇: UBOOT1.3.1代码导读(2)-lowlevel_init.S
下一篇: NorFlash的读写程序
flymachine
博客等级 码龄23年 253粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值