uboot启动类似于pc机中bios的启动过程,简要说明如下;
第一阶段
1:cup内硬件初始化(屏蔽所有中断,设置cup的时钟,存储控制器初始化,指示灯初始化状态为灭,关闭CPU内存指令/缓存);
2:拷贝第二阶段代码到RAM中以备第二阶段代码的执行;
3:设置好堆栈指针存放第二阶段代码的入口地址;
进入第二阶段
当用户按下任意键时进入下载模式(此过程只为开发人员所用得到),如果一段时间内用户没有任何操作,自动进入的启动加载模式如下(此过程是为了加载操作系统内核镜像和文件系统镜像):
4:对arm开发板上硬件资源初始化(至少包含一个串口初始化,因为加载操作系当中通常需要通过彩屏接受串口发来的Linux内核版本信息,以及硬件的驱动的准备情况等;做到人机交互)
5:阶段2的代码检测RAM存在的区域和容量大小并将其映射到(CPU的整个地址)地址空间中;
6:将操作系统镜像以及文件系统镜像从Flash读取到RAM中;(经过一段时间的学习突然发现具体操作中了解了前面几个步骤并没有什么卵用仅仅是教科书中的一些内容 )
7:在启动操作系统内核之前,需要设置操作系统内核的启动参数(如Linux中的ATAG_MEM,ATAG——CNDLINE,等等);
8:哈哈,终于要进行操作系统内核启动了,引导程序并将执行权交给操作系统;
关键字:uboot 启动过程 简要分析
引用地址:
uboot启动过程简要分析笔记
推荐阅读最新更新时间:2024-03-16 14:33
S3C6410-uboot详细解读之smdk6410.h
/* * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH * Marius Groeger * Gary Jennejohn * David Mueller * * Configuation settings for the SAMSUNG SMDK6400(mDirac-III) board. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribut
[单片机]
mini2440 uboot的使用经历
记录一下自己在mini2440上面 使用uboot的曲折的经历。 首先是使用了买板子时自带的代码: u-boot-1.1.6。但是编译时,总是提示有错误。也不知道这个版本是不是tekk的那个版本,自己修改了一些地方,但是感觉uboot的编译体系与一般的开源软件不相同,编译时,总是提示 有函数的实现找不到,即undefined reference to _,,,,网上说需要在makefile中添加 nostdlib等选项,但依然无法编译通过。 后来下载了 tekk的版本,貌似大家用的都是他的版本。 先说一下supervivi和uboot的区别。 在mini2440在norflash中烧写的是supervivi,sup
[单片机]
cortex-a8 uboot系列:第十一章 uboot源码分析 uboot如何启动内核1
一、Uboot和内核到底是什么(从系统启动角度看) 1.Uboot Uboot的本质是一个复杂的裸机程序。 2.内核 操作系统内核本身也是一个裸机程序,和uboot、其他裸机程序并没有什么本质区别。 但是和其他裸机程序的区别:操作系统运行起来后在软件上分为内核层和应用层,分层后两层的权限不同,内核访问和设备操作的管理上更加精细(内核可以随意访问各种硬件,而应用程序只能被限制的访问硬件和内存地址)。 Uboot的镜像是u-boot.bin,linux系统镜像是zImage,这两个文件都是两个裸机程序bin文件镜像。 二、SD卡中的分区 一个完整的软件+硬件的嵌入式系统,未上电时,bootloader、kernel、roo
[单片机]
解析STM32启动过程
================================================================================================================ 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储 空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC = 0x000000)同时中断向量表 的位置并不是固定的。而Cortex-M3内核则正好相反,有3种情况: 1、通过
[单片机]
S3C2410-2440启动代码内数据复制过程的分析
S3C2410 启动后先进行一些必要的设置,如关 WatchDog,设置 PLL 与时钟,配置 SDRAM,初始化堆栈等,网上有很多分析启动代码的文章,本文不打算再进行说明。 本文分从 NOR Flash 与 NAND Flash 启动两种情况分别进行分析。首先要知道 NOR Flash 是 XIP 的,如果从 NOR 启动,代码首先在 NOR Flash 内执行,考虑到运行速度,我们要把代码要复制到 SDRAM 内去执行。 当系统被设置成从 NAND FALSH 启动(使用 OM[1:0]引脚的电平来控制)时,由于其自身的特点,NAND Flash 不具备运行程序的功能,程序不能在 NAND Flash 内执行,CPU 会自
[单片机]
LPC启动过程和重映射概念
1.LPC2200的启动过程: (1) 芯片启动时,是从0地址开始,但是这时引导程序被映射到了地址0,所以这时启动的就是引导程序。 (2) 引导程序检查ISP引脚的状态和BOOT【1】和BOOT【0】,根据不同的状态,将不同的内容映射到地址0,例如 0x80000000或者0x40000000,这个要看你的配置了,从而进行重新映射。 (3) 重新映射后,就跳转到0再运行,这时候实际上运行的是0x80000000或者0x40000000的程序了。 注意:设置RW和RO的目的是为了告诉编译器把生成的代码放在存储器的什么地方。代码实际是存在0x80000000或者0x40000000那里的,只是通过映射的方式,将前面的中断向量表部
[单片机]
TQ2440之uboot---8.tftp下载内核并启动内核
TQ2440 + uboot1.1.6 1. uboot修改 1.1 common/main.c 在函数 main_loop大约513行: char cmd_buf ; printf( Booting Linux ...\n ); //boot_zImage(0x200000,0x200000); //注释boot_zImage strcpy(cmd_buf, tftp 0x30008000 zImage; boot_zImage ); //tftp内核到内存的0x30008000,然后启动zImage; run_command(cmd_buf,
[单片机]
STM32 启动过程简述
根据启动模式分析的结论: 1、 通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x02000000,同时复位后PC指针位于0x02000000处; 2、 通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x08000000,同时复位后PC指针位于0x08000000处; 3、 通过boot引脚设置可以将中断向量表定位于内置Bootloader区,本文不对这种情况做论述; STM32 将0x8000000 映射到 0x00000000,即如果从内部FLASH启动,会从 0x08000004 处进行取指令 (CM3定义的 0x08000000 用于存放SP指针),故,0x000000
[单片机]