iMX6-Uboot启动流程

合集下载

IMX6uboot的启动流程

IMX6uboot的启动流程

IMX6uboot的启动流程⽹上看了后,做了个记录,主要是⼀个流程,具体代码没有分析,有空再细看。

cpu在上电之后,它们会⼲些什么?答:检查电压⼤⼩,确定启动模式等。

简单的检查之后呢?答:⼀般从固化在cpu内部的rom⾥⾯执⾏⼀⼩段code。

这⼀⼩段code具体做了些什么呢?各个cpu⼚商会不同,具体我也不知道。

但是我们应该知道,这⼩段code必须完成确认启动模式,并初始化启动设备,搬移烧录在启动设备⾥⾯的代码到ddr⾥⾯。

ok,搬移了代码后,cpu如何识别代码?将doc,txt⽂件烧进去⾏么?答:当然不⾏,烧录的⽂件也是有格式要求的。

格式在哪⾥定呢?稍等,先要知道⽣成的uboot.bin⽂件需要有个指导⽂件,就是uboot.lds,它的作⽤是在编译过程中,决定各个可执⾏程序段的位置。

其代码如下:1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")2 OUTPUT_ARCH(arm)3 ENTRY(_start)4 SECTIONS5 {6 . = 0x00000000;78 . = ALIGN(4);9 .text :10 {11/* WARNING - the following is hand-optimized to fit within */12/* the sector layout of our flash chips! XXX FIXME XXX */13 board/freescale/mx6q_sabreauto/flash_header.o (.text.flasheader)14 cpu/arm_cortexa8/start.o15 board/freescale/mx6q_sabreauto/libmx6q_sabreauto.a (.text)16 lib_arm/libarm.a (.text)17 net/libnet.a (.text)18 drivers/mtd/libmtd.a (.text)19 drivers/mmc/libmmc.a (.text)2021 . = DEFINED(env_offset) ? env_offset : .;22 common/env_embedded.o(.text)2324 *(.text)25 }2627 . = ALIGN(4);28 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }2930 . = ALIGN(4);31 .data : { *(.data) }3233 . = ALIGN(4);34 .got : { *(.got) }3536 . = .;37 __u_boot_cmd_start = .;38 .u_boot_cmd : { *(.u_boot_cmd) }39 __u_boot_cmd_end = .;4041 . = ALIGN(4);42 _end_of_copy = .; /* end_of ROM copy code here */43 __bss_start = .;44 .bss : { *(.bss) }45 _end = .;46 }View Code代码咱不分析,只看.text :{/* WARNING - the following is hand-optimized to fit within *//* the sector layout of our flash chips! XXX FIXME XXX */board/freescale/mx6q_sabreauto/flash_header.o (.text.flasheader)......}它的第⼀要存储的⽂件是flash_header的内容。

IMX6开发板使用教程资料

IMX6开发板使用教程资料

D-CHIP i.MX6 开发板安装Android系统方法详细教程一、烧写系统●将i.MX6开发板通讯OTG与电脑的USB口连接;开发板OTG与电脑主机的USB口连接●将核心板上的2PIN拨码开关调为1:OFF,2:OFF。

核心板的2PIN拨码开关设置为全部关闭●在鼎芯科技下载的Android包对应的系统版本中运行相应的MfgTool2对系统进行系统烧写。

运行MfgTool2.exe程序未给i.MX6开发板通电时,软件为识别到设备的接入,显示为No Device Connected.给i.MX6开发板通电后,软件将会识别到设备的接入,并提示HID-compliant device.点击“Start”按钮,执行系统的烧写在软件对开发板烧写过程中,由于数据复制到eMMC存储芯片过程,系统将提示磁盘格式化提示,直接“取消”或者不予理会。

一直等到完成烧写并提示“Done”后,点击“Stop”退出软件,至此,系统已经烧写成功。

●完成烧写工作后,断开电源,并将核心板的2PIN拨码开关恢复原来状态1:ON,2:OFF将核心板的2PIN拨码开关设置为1:ON ;2:OFF状态●接入显示设备(LVDS显示屏)7寸LVDS屏幕(本屏幕作为产品选配件,需要额外购买)通过2x15排针将显示屏接入LVDS0接口接好的开发板显示屏(有木有一种帅帅的感觉?)●将i.MX6开发板的COM口与PC机电脑通讯COM口连接,用以和putty.exe进行数据交互。

开发板COM口连接PC机通讯COM口●运行putty.exe(通过网上百度搜索下载即可),实现通讯数据交互。

运行putty.exe程序在putty.exe主界面的“会话”窗口中设置如上图,“串行口”设置为您PC机COM口的端口号,“速度”处为152000,设置好以后直接按“打开”按钮进入数据侦听界面。

给i.MX6开发板接入电源,设备启动,PuTTY显示从COM口上传的数据信息,i.MX6开发板启动进入系统。

uboot启动流程分析

uboot启动流程分析

uboot启动流程分析Uboot启动流程分析。

Uboot是一种常用的嵌入式系统启动加载程序,它的启动流程对于嵌入式系统的正常运行至关重要。

本文将对Uboot启动流程进行分析,以便更好地理解其工作原理。

首先,Uboot的启动流程可以分为以下几个步骤,Reset、初始化、设备初始化、加载内核。

接下来我们将逐一进行详细的分析。

Reset阶段是整个启动流程的起点,当系统上电或者复位时,CPU会跳转到Uboot的入口地址开始执行。

在这个阶段,Uboot会进行一些基本的硬件初始化工作,包括设置栈指针、初始化CPU寄存器等。

接着是初始化阶段,Uboot会进行一系列的初始化工作,包括初始化串口、初始化内存控制器、初始化时钟等。

这些初始化工作是为了确保系统能够正常地运行,并为后续的工作做好准备。

设备初始化阶段是Uboot启动流程中的一个重要环节,它包括对外设的初始化和检测。

在这个阶段,Uboot会初始化各种外设,如网卡、存储设备等,并对其进行检测,以确保它们能够正常工作。

最后一个阶段是加载内核,Uboot会从存储设备中加载操作系统的内核镜像到内存中,并跳转到内核的入口地址开始执行。

在这个过程中,Uboot会进行一些必要的设置,如传递启动参数给内核,并最终将控制权交给内核。

总的来说,Uboot的启动流程是一个非常重要的过程,它涉及到系统的硬件初始化、外设的初始化和内核的加载等工作。

只有当这些工作都顺利完成时,系统才能够正常地启动运行。

因此,对Uboot启动流程的深入理解对于嵌入式系统的开发和调试具有重要意义。

通过本文对Uboot启动流程的分析,相信读者对Uboot的工作原理有了更清晰的认识。

希望本文能够对大家有所帮助,谢谢阅读!。

uboot启动流程

uboot启动流程

U-Boot工作过程U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:(1)第一阶段的功能硬件设备初始化加载U-Boot第二阶段代码到RAM空间设置好栈跳转到第二阶段代码入口(2)第二阶段的功能初始化本阶段使用的硬件设备检测系统内存映射将内核从Flash读取到RAM中为内核设置启动参数调用内核1.1.1 U-Boot启动第一阶段代码分析第一阶段对应的文件是cpu/arm920t/和board/samsung/mini2440/。

U-Boot启动第一阶段流程如下:图 U-Boot启动第一阶段流程根据cpu/arm920t/中指定的连接方式:ENTRY(_start)SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/ (.text)board/samsung/mini2440/ (.text)board/samsung/mini2440/ (.text)*(.text)}… …}第一个链接的是cpu/arm920t/,因此的入口代码在cpu/arm920t/中,其源代码在cpu/arm920t/中。

下面我们来分析cpu/arm920t/的执行。

1. 硬件设备初始化(1)设置异常向量cpu/arm920t/开头有如下的代码:.globl _start_start: b start_code /* 复位*/ldr pc, _undefined_instruction /*未定义指令向量 */ldr pc, _software_interrupt /* 软件中断向量 */ldr pc, _prefetch_abort /* 预取指令异常向量 */ldr pc, _data_abort /* 数据操作异常向量 */ldr pc, _not_used /* 未使用 */ldr pc, _irq /* irq中断向量 */ldr pc, _fiq /* fiq中断向量 */ /* 中断向量表入口地址 */_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq.balignl 16,0xdeadbeef以上代码设置了ARM异常向量表,各个异常向量介绍如下:表 ARM异常向量表在cpu/arm920t/中还有这些异常对应的异常处理程序。

uboot 代码运行流程

uboot 代码运行流程

uboot 代码运行流程U-boot是一款ARM处理器启动管理程序,在ARM开发板研发中具有非常广泛的应用,它可以在开发板上提供各种服务和支持,使得用户能够轻松地启动系统和进行应用开发。

本文将从U-boot代码运行流程方面来介绍U-boot的一般执行过程。

U-boot代码运行流程主要可以分为两个方面,即bootloader代码执行流程和内核启动代码执行流程。

1. Bootloader代码执行流程Bootloader是指从CPU开始运行到操作系统启动、执行前的代码。

它的主要功能是加载操作系统内核、初始化硬件环境以及对操作系统进行配置等。

U-boot在启动过程中需要经历以下几个步骤:1)CPU复位在系统上电或者发生复位时,CPU内部控制块将根据复位信号重新启动,并从指定地址处读取第一条指令。

2)初始化硬件U-boot对内存、Flash、串口等硬件进行初始化,然后启动U-boot的“彩屏”启动画面。

3)读取启动设备U-boot通过Boot Device Driver从存储设备(SD卡、NAND Flash等)中读取启动文件,然后执行它。

默认情况下,U-boot会从SD卡中读取启动文件。

4)解析启动文件U-boot解析启动文件,提取内核映像、设备树和命令行参数等关键信息。

然后执行其它操作,如设备树重定位、加入命令行参数等。

5)启动内核U-boot将内核映像从Flash中加载到内存中,并将控制权转交给内核。

此时内核开始执行,U-boot自己退出。

2. 内核启动代码执行流程内核启动代码主要是内核启动过程中的初始化工作。

启动过程中,操作系统需要对内存进行初始化、加载一些关键模块、初始化驱动程序等工作,以实现操作系统本身的功能。

1)内核初始化内核初始化包括内存管理、进程管理、文件系统、驱动程序初始化等。

此时内核会创建init进程和kthreadd进程。

2)加载模块内核启动后加载模块,模块提供了丰富的功能,如网络支持、图形界面等。

海思uboot启动流程详细分析(一)

海思uboot启动流程详细分析(一)

海思uboot启动流程详细分析(⼀)第⼀阶段 start.S⾸先我们可以在u-boot.lds中看到ENTRY(_start),即指定了⼊⼝_start,_start也就是整个start.S的最开始;1. reset在arch\arm\cpu\armv8\hi3559av100中的start.S注意x30在ARMV8中代表lr寄存器reset:/** Could be EL3/EL2/EL1, Initial State:* Little Endian, MMU Disabled, i/dCache Disabled*/adr x0, vectorsswitch_el x1, 3f, 2f, 1f3: msr vbar_el3, x0mrs x0, scr_el3orr x0, x0, #0xf /* SCR_EL3.NS|IRQ|FIQ|EA */msr scr_el3, x0msr cptr_el3, xzr /* Enable FP/SIMD */#ifdef COUNTER_FREQUENCYldr x0, =COUNTER_FREQUENCYmsr cntfrq_el0, x0 /* Initialize CNTFRQ */#endifb 0f2: msr vbar_el2, x0mov x0, #0x33ffmsr cptr_el2, x0 /* Enable FP/SIMD */b 0f1: msr vbar_el1, x0mov x0, #3 << 20msr cpacr_el1, x0 /* Enable FP/SIMD */0:/** Cache/BPB/TLB Invalidate* i-cache is invalidated before enabled in icache_enable()* tlb is invalidated before mmu is enabled in dcache_enable()* d-cache is invalidated before enabled in dcache_enable()*//** read system register REG_SC_GEN2* check if ziju flag*/ldr x0, =SYS_CTRL_REG_BASEldr w1, [x0, #REG_SC_GEN2]ldr w2, =0x7a696a75 /* magic for "ziju" */cmp w1, w2bne normal_start_flowmov x1, sp /* save sp */str w1, [x0, #REG_SC_GEN2] /* clear ziju flag */adr x0, vectors,其中的vectors代表了异常向量表主要做了如下事情:1)reset SCTRL寄存器具体可参考reset_sctrl函数,由CONFIG_SYS_RESET_SCTRL控制,⼀般不需要打开。

uboot 代码运行流程

uboot 代码运行流程

uboot 代码运行流程U-Boot代码运行流程U-Boot(Universal Bootloader)是一个开源的引导加载程序,广泛应用于嵌入式系统中。

它负责在系统上电后初始化硬件并加载操作系统内核,是系统启动的重要一环。

下面将从U-Boot代码的运行流程方面进行介绍。

1. 启动阶段当系统上电后,处理器会从预定义的存储器地址开始运行代码。

U-Boot的启动代码通常存放在ROM中,处理器会从ROM的起始地址开始执行。

启动代码负责初始化处理器和一些外设,然后跳转到U-Boot的入口点。

2. 入口点U-Boot的入口点是指U-Boot的main()函数。

在启动代码的最后,会调用main()函数,从而进入U-Boot的主循环。

U-Boot的主循环负责处理用户输入的命令,并根据命令执行相应的操作。

3. 硬件初始化在main()函数中,首先会进行硬件的初始化工作。

这包括初始化串口、初始化存储器控制器、初始化网络接口等。

硬件初始化的目的是为了确保系统能够正常运行,并为后续的操作做好准备。

4. 系统启动硬件初始化完成后,U-Boot会尝试从存储设备(如闪存、SD卡)中加载操作系统内核镜像。

U-Boot会根据预定义的启动命令(例如bootcmd)来确定从哪个设备加载内核镜像,并执行相应的加载操作。

加载完成后,U-Boot会将控制权交给操作系统内核,进入操作系统的启动阶段。

5. 用户交互一般情况下,U-Boot会在系统启动后进入命令行界面,等待用户输入命令。

用户可以通过串口、网络等方式与U-Boot进行交互,执行各种操作,例如烧写固件、修改配置等。

U-Boot提供了丰富的命令集,可以满足不同的需求。

6. 系统重启当用户输入重启命令或系统发生异常时,U-Boot会执行系统重启操作。

重启操作包括重新初始化硬件、重新加载内核镜像等步骤,以重新启动系统。

U-Boot会将控制权交给重新加载的内核,然后进入内核的启动流程。

总结:U-Boot代码的运行流程包括启动阶段、入口点、硬件初始化、系统启动、用户交互和系统重启等几个关键步骤。

基于imx6ull的uboot2017启动流程

基于imx6ull的uboot2017启动流程

基于imx6ull的uboot2017启动流程1、Uboot2017编译配置流程/Uboot-2017.03$ make distclean/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig/Uboot-2017.03$ make最后会编译出u-boot-dtb.imx⽂件,可以烧⼊板⼦中启动了。

2、Uboot2017的启动流程分析 1)内核启动的第⼀阶段⾸先,经过上⾯的编译后,会在顶层⽬录下发现⾃动⽣成了u-boot.lds链接⽂件,有了这个⽂件后,我们就会很容易找到我们需要分析的第⼀个⽂件是什么:因此,我们就可以从arch/arm/cpu/armv7/start.S这个⽂件出发,去分析;但是当打开start.S这个⽂件时,并不会发现有程序的⼊⼝,也就是上图的_start这个标志,这个标志定义在arch/arm/lib/vectors.S⽂件中:从上⾯也可以看到,主要定义了异常与中断的跳转函数,⽽第⼀个跳转到的是reset标志,可以发现,reset标志是定义在start.S中的,然后顺着程序向下执⾏:1)将CPU从⽤户模式切换到管理员模式2)禁⽌中断这个函数是对CPU进⾏初始化搜索_main,该函数定义在crt0.S中,这个函数是第⼀阶段的关键,第⼀阶段中最主要的函数是为了调⽤board_init_f:由于此时RAM还并没有初始化,不能使⽤,因此使⽤gd结构体进⾏数据的传输1)设置c代码的运⾏环境,为调⽤board_init_f作准备 a) 设置堆栈 b) 调⽤board_init_f_alloc_reserve接⼝,从堆栈开始的地⽅,为uboot的gd结构分配空间 c) 调⽤board_init_f_init_reserve接⼝,对gd进⾏初始化2)调⽤board_init_f函数,完成⼀些前期的初始化⼯作 a)点亮⼀个Debug⽤的LED灯,表⽰u-boot已经活了 b)初始化DRAM,DDR等system范围的RAM等 c)计算后续代码需要使⽤的⼀些参数,包括relocation destination,the future stack,the future GD location等.3).如果当前是SPL(由CONFIG_SPL_BUILD控制),则_main函数结束,直接返回.如果是正常的u-boot,则继续执⾏后续的动作4).根据board_init_f指定的参数,执⾏u-boot的relocation操作5).清除BSS段6).调⽤board_init_r函数,执⾏后续的初始化操作#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)ldr sp, =(CONFIG_SPL_STACK)#elseldr sp, =(CONFIG_SYS_INIT_SP_ADDR)#endif#if defined(CONFIG_CPU_V7M) /* v7M forbids using SP as BIC destination */mov r3, spbic r3, r3, #7mov sp, r3#elsebic sp, sp, #7 /* 8-byte alignment for ABI compliance */#endifmov r0, spbl board_init_f_alloc_reservemov sp, r0/* set up gd here, outside any C code */mov r9, r0bl board_init_f_init_reservemov r0, #0bl board_init_f 在board_init_f中会顺序的执⾏init_sequence_f中定义的函数指针,函数指针中,⽐较关键的是初始化时钟、初始化内核启动的环境参数、设置串⼝波特率、初始化串⼝、初始化i2c、初始化SPI、初始化ram、设置重定位地址、重定位get_clocksenv_initinit_baud_rateserial_initinit_func_i2cinit_func_spidram_initjump_to_copy.... jump_to_copy函数调⽤crt0.S⽂件中的重定位函数,之后便进⾏清除bss段,之后便调⽤board_init_r函数,进⼊内核启动的第⼆阶段。

U-Boot启动过程--详细版的完全分析

U-Boot启动过程--详细版的完全分析

(一)U-Boot启动过程--详细版的完全分析我们知道,bootloader是系统上电后最初加载运行的代码。

它提供了处理器上电复位后最开始需要执行的初始化代码。

在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。

然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动就完全由bootloader来完成。

它主要的功能是加载与引导内核映像一个嵌入式的存储设备通过通常包括四个分区:第一分区:存放的当然是u-boot第二个分区:存放着u-boot要传给系统内核的参数第三个分区:是系统内核(kernel)第四个分区:则是根文件系统如下图所示:u-boot是一种普遍用于嵌入式系统中的Bootloader。

Bootloader介绍Bootloader是进行嵌入式开发必然会接触的一个概念,它是嵌入式学院<嵌入式工程师职业培训班>二期课程中嵌入式linux系统开发方面的重要内容。

本篇文章主要讲解Bootloader 的基本概念以及内部原理,这部分内容的掌握将对嵌入式linux系统开发的学习非常有帮助!Bootloader的定义:Bootloader是在操作系统运行之前执行的一小段程序,通过这一小段程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。

意思就是说如果我们要想让一个操作系统在我们的板子上运转起来,我们就必须首先对我们的板子进行一些基本配置和初始化,然后才可以将操作系统引导进来运行。

具体在Bootloader中完成了哪些操作我们会在后面分析到,这里我们先来回忆一下PC的体系结构:PC机中的引导加载程序是由BIOS和位于硬盘MBR中的OS Boot Loader(比如LILO和GRUB等)一起组成的,BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给OS Boot Loader。

[uboot](第五章)uboot流程——uboot启动流程

[uboot](第五章)uboot流程——uboot启动流程

[uboot](第五章)uboot流程——uboot启动流程/ooonebook/article/details/53070065以下例⼦都以project X项⽬tiny210(s5pv210平台,armv7)为例[uboot] uboot流程系列:建议先看《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例⼦了解⼀下上电之后的BL0\BL1\BL2阶段,以及各个阶段的运⾏位置,功能。

建议可以和《[uboot] (番外篇)global_data介绍》和《[uboot] (番外篇)uboot relocation介绍》结合起来看。

=================================================================================⼀、uboot说明1、uboot要做的事情CPU初始刚上电的状态。

需要⼩⼼的设置好很多状态,包括cpu状态、中断状态、MMU状态等等。

其次,就是要根据硬件资源进⾏板级的初始化,代码重定向等等。

最后,就是进⼊命令⾏状态,等待处理命令。

在armv7架构的uboot,主要需要做如下事情arch级的初始化关闭中断,设置svc模式禁⽤MMU、TLB关键寄存器的设置,包括时钟、看门狗的寄存器板级的初始化堆栈环境的设置代码重定向之前的板级初始化,包括串⼝、定时器、环境变量、I2C\SPI等等的初始化进⾏代码重定向代码重定向之后的板级初始化,包括板级代码中定义的初始化操作、emmc、nand flash、⽹络、中断等等的初始化。

进⼊命令⾏状态,等待终端输⼊命令以及对命令进⾏处理上述⼯作,也就是uboot流程的核⼼。

2、疑问在前⾯的⽂章中虽然已经说明了,在spl的阶段中已经对arch级进⾏了初始化了,为什么uboot⾥⾯还要对arch再初始化⼀遍?回答:spl对于启动uboot来说并不是必须的,在某些情况下,上电之后uboot可能在ROM上或者flash上开始执⾏⽽并没有使⽤spl。

面试 uboot的启动流程

面试 uboot的启动流程

面试 uboot的启动流程英文回答:The boot process of U-Boot can be divided into several stages. First, when the system is powered on, the CPUstarts executing the initial bootstrap code stored in the ROM. This code is responsible for initializing the CPU and memory, and then it transfers control to the second stage bootloader, which is typically stored in some non-volatile memory like flash or SD card.In the second stage, the bootloader performs some basic hardware initialization, such as setting up the clocks, enabling the cache, and configuring the memory controller. It then loads the U-Boot image from the storage device into the RAM and transfers control to it.Once U-Boot is running, it performs further initialization, such as setting up the environment variables and initializing the drivers for the peripherals.It also provides a command-line interface for interacting with the user.After the initialization is complete, U-Boot executes the boot script, which is a set of commands that define the boot process. This script typically sets up the kernel command line and loads the kernel image from the storage device into the RAM.Finally, U-Boot transfers control to the loaded kernel image, which starts the operating system and continues the boot process.中文回答:U-Boot的启动流程可以分为几个阶段。

Uboot启动过程详解

Uboot启动过程详解

Uboot启动过程详解u-boot系统启动流程大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。

依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。

1、Stage1 start.S代码结构u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下(1)定义入口。

:该工作通过修改连接器脚本来完成。

(2)设置异常向量(Exception Vector)。

(3)设置CPU的速度、时钟频率及终端控制寄存器。

(4)初始化内存控制器。

(5)将ROM中的程序复制到RAM中。

(6)初始化堆栈。

(7)转到RAM中执行,该工作可使用指令ldr pc来完成。

2、Stage2C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作:(1)调用一系列的初始化函数。

(2)初始化Flash设备。

(3)初始化系统内存分配函数。

(4)如果目标系统拥有NAND设备,则初始化NAND设备。

(5)如果目标系统有显示设备,则初始化该类设备。

(6)初始化相关网络设备,填写IP、MAC地址等。

(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

3、U-Boot的启动顺序主要顺序如下图所示函数顺序初始化顺序图为 U-Boot顺序下面就根据代码进行解释:/*********************** 中断向量 ***********************/.globl _start //u-boot启动入口_start: b reset //复位向量并且跳转到resetldr pc, _undefined_instructionldr pc, _software_interruptldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irq //中断向量ldr pc, _fiq //中断向量b sleep_setting //跳转到sleep_setting并通过下段代码拷贝到内存里relocate: //把uboot重新定位到RAMadr r0, _start // r0 是代码的当前位置ldr r2, _armboot_start //r2 是armboot的开始地址ldr r3, _armboot_end //r3 是armboot的结束地址sub r2, r3, r2 // r2得到armboot的大小ldr r1, _TEXT_BASE // r1 得到目标地址add r2, r0, r2 // r2 得到源结束地址copy_loop: //重新定位代码ldmia r0!, {r3-r10} //从源地址[r0]中复制stmia r1!, {r3-r10} //复制到目标地址[r1]cmp r0, r2 //复制数据块直到源数据末尾地址[r2]ble copy_loop系统上电或reset后,cpu的PC一般都指向0x0地址,在0x0地址上的指令是reset: //复位启动子程序/******** 设置CPU为SVC32模式***********/mrs r0,cpsr //将CPSR状态寄存器读取,保存到R0中bic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr,r0//将R0写入状态寄存器中/************** 关闭看门狗 ******************/ldr r0, =pWTCONmov r1, #0x0str r1, [r0]/************** 关闭所有中断 *****************/mov r1, #0xffffffffldr r0, =INTMSKstr r1, [r0]ldr r2, =0x7ffldr r0, =INTSUBMSKstr r2, [r0]/************** 初始化系统时钟 *****************/ldr r0, =LOCKTIMEldr r1, =0xffffffstr r1, [r0]clear_bss:ldr r0, _bss_start //找到bss的起始地址add r0, r0, #4 //从bss的第一个字开始ldr r1, _bss_end // bss末尾地址mov r2, #0x00000000 //清零clbss_l:str r2, [r0] // bss段空间地址清零循环add r0, r0, #4cmp r0, r1bne clbss_l/***************** 关键的初始化子程序************************// * cpu初始化关键寄存器* 设置重要寄存器* 设置内存时钟* /cpu_init_crit:/** flush v4 I/D caches*/mov r0, #0mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB *//************* disable MMU stuff and caches ****************/ mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)orr r0, r0, #0x00000002 @ set bit 2 (A) Alignorr r0, r0, #0x00001000 @ set bit 12 (I) I-Cachemcr p15, 0, r0, c1, c0, 0/******* 在重新定位前,我们要设置RAM的时间,因为内存时钟依赖开发板硬件的,你将会找到board目录底下的memsetup.S。

uboot启动流程

uboot启动流程

uboot启动流程U-Boot是一款开源的嵌入式引导加载程序(bootloader),主要用于嵌入式系统的引导启动。

它是一个跨平台的引导加载程序,可以在不同的处理器架构和操作系统上运行。

下面将介绍U-Boot的启动流程。

U-Boot启动流程主要包括三个阶段:启动ROM代码、启动SPL(Secondary Program Loader)和启动U-Boot。

首先,当嵌入式设备上电后,处理器会首先执行固定在芯片内部的启动ROM代码。

这些代码主要完成一些基本的硬件初始化工作,例如设置栈指针、初始化外设等。

然后,启动ROM 代码会从预定义的启动设备(例如闪存、SD卡等)中加载SPL。

接下来,SPL(Secondary Program Loader)被加载到内存中执行。

SPL是一个较小的引导加载程序,主要作用是完成一些必要的初始化和硬件配置。

SPL会初始化内存控制器、外设等,并加载U-Boot镜像到内存中。

最后,U-Boot被加载到内存中执行。

U-Boot是一个功能强大的引导加载程序,拥有丰富的命令和功能。

它可以根据不同的系统配置进行配置和扩展,并提供了丰富的调试和测试功能。

U-Boot的启动流程主要可以分为以下几个步骤:1. CPU初始化:U-Boot开始执行后,首先进行CPU的初始化工作,包括设置栈指针、cache的初始化等。

2. 设备初始化:接下来,U-Boot会初始化外设设备,例如串口、网络接口等。

这些设备的初始化是为了后续的调试和配置工作做准备。

3. 系统环境的初始化:U-Boot会读取存储在非易失性存储设备(例如NAND闪存、SD卡等)中的环境变量,根据这些变量进行系统的初始化配置。

4. 设备驱动的加载:U-Boot会加载并初始化必要的设备驱动程序,以便后续的硬件操作可以正常进行。

5. 启动命令的执行:U-Boot会根据配置文件中的设置,执行预定义的启动命令。

这些命令可以是启动操作系统、加载应用程序等。

uboot学习之uboot启动流程简述

uboot学习之uboot启动流程简述

uboot学习之uboot启动流程简述⼀、uboot启动分为了三个阶段BL0、BL1、BL2;BL0表⽰上电后运⾏ROM中固化的⼀段程序,其中ROM中的程序是⼚家写进去的,所以具体功能可能根据⼚家芯⽚⽽有所不同。

功能如下:1. 初始化系统时钟、特殊设备的控制器、启动设备、看门狗、堆栈、SRAM等硬件;2. 验证B1镜像,并且加载BL1镜像到SRAM中,然后跳转到BL1镜像的地址上。

BL0需要将BL1加载到对应的RAM上,这就涉及到它的启动模式,详细如下:1.OneNand Boot模式要了解OneNAND先得了解NOR Flash和NAND Flash。

与NOR Flash相⽐,NAND Flash的读数据速度稍慢,但是擦写速度快得多,并且在容量、使⽤寿命、成本上也占有较⼤优势。

NOR Flash的编程简单,⽽NAND Flash的编程较为复杂(因为它的flash管理需要特殊的接⼝)。

NAND Flash⼀般⽤于存储数据,⽽NOR Flash⼀般⽤于存储启动代码。

NOR Flash带有SRAM接⼝,有⾜够的地址引脚来寻址,可以很容易地存取其内容的每⼀字节(有限的地址引脚是限制其容量的因素之⼀)。

NAND Flash使⽤复杂的I/O⼝来串⾏地存取数据,各个产品或⼚商的⽅法可能各不相同。

为了弥补NAND Flash的不⾜,三星公司在NAND Flash芯⽚内集成了⼀个RAM接⼝,命名为OneNAND Flash,这类Flash拥有与NOR Flash相同的简单接⼝,⽽且不受地址引脚的限制,即容量与地址引脚⽆关。

其实OneNAND 其实就是采⽤了NOR的接⼝,NAND的架构,是两者的性能得到了综合。

这就有了X-LOADER的产⽣,以前我们接触到的都是BOOTLOADER,其实这个X-LOADER也起到初始化的作⽤,因为我们的BOOTLOADER是放在NAND的架构下的,⽽CPU却是从NOR的接⼝下读取BOOTLOADER到SDRAM中的,所以现在要做⼀个⼯作就是要如何将BOOTLOADER在OneNAND的架构下从NAND复制到SDRAM中,这就是X-LOADER的功能了,它不仅初始化OneNAND,并且把U-BOOT从NAND的架构下复制到BufferRam中,再复制到SDRAM中。

uboot 流程 概述

uboot 流程 概述

uboot 流程概述
uboot是一款常用的开源引导程序,用于启动嵌入式系统。

它可以加载操作系统内核,初始化硬件设备,设置环境变量等,同时还提供了一些常用的命令行工具。

在开发嵌入式系统时,学习 uboot 是必不可少的。

uboot 的启动流程可以简单概括如下:
1. ROM 阶段:当嵌入式系统上电时,ROM 芯片中的引导程序会首先运行,它的作用是初始化 CPU 和内存,并且将 uboot 的启动地址加载到内存中。

2. SPL 阶段:uboot 的二进制文件通常很大,不能一次性加载完毕。

因此,uboot 的第一个阶段(也称为 SPL,Secondary Program Loader)会被加载到内存中,它的作用是提供一些基本的硬件初始化功能,同时可以将 uboot 的剩余部分加载到内存中。

3. uboot 阶段:当 SPL 完成任务后,uboot 的主程序被加载到内存中。

在这个阶段,uboot 会完成一系列初始化工作,如初始化串口、网卡、USB 等硬件设备,然后会启动一个交互式的命令行界面,等待用户输入命令。

4. 内核启动阶段:当用户输入启动命令后,uboot 会加载操作系统内核到内存中,并将控制权传递给内核。

内核会接管硬件设备,并开始执行系统的初始化工作。

总的来说,uboot 的启动流程比较复杂,但是掌握了它的基本原理,可以更好地理解嵌入式系统的启动过程,从而优化系统性能,提
升开发效率。

i.mx6 linux启动流程分析

i.mx6 linux启动流程分析

MMU
MMU:Memory Management Unit,内存管理单元 操作系统通过使用处理器的MMU功能,能实现以下功能: 1)虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理 内存大的应用程序。为了使用虚拟内存,操作系统通常要设置一个 交换分区(通常是硬盘),通过将不活跃的内存中的数据放入交换 分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是 通过虚拟地址来实现的。 2)内存保护。根据需要对特定的内存区块的访问进行保护,通 过这一功能,我们可以将特定的内存块设置成只读、只写或是可同 时读写。
根文件系统挂载
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait
初始化eMMC 挂载eMMC Flash到 VFS /dev目录下
创建VFS
创建目录/dev 挂载真正的根文件系统
/developerworks/cn/linux/l-vfs/
I.MX6 LINUX 启动流程分析
2014/07/25
主要内容 i.MX6Q芯片启动流程 u-boot启动流程 linux内核启动流程 文件系统,服务程序启动流程
I.MX6Q功能框图
I.MX6 IROM和IRAM地址映射
I.MX6Q BOOT ROM
i.MX6 Boot ROM有以下功能: 支持从多种存储设备启动 串行下载(USB OTG) 芯片相关功能模块配置 (DCD) 数字签名认证 从低功耗模式唤醒 支持从以下设备启动: Nor Flash NAND Flash OneNAND Flash SD/MMC Serial ATA(SATA) HDD Serial (I2C/SPI) Nor Flash and EEPROM
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档