uboot讲义

1嵌入式Linux软件结构与分布一般情况下嵌入式Linux系统中的软件主要分为以下几部分:1)引导加载程序:其中包括内部ROM中的固化启动代码和BootLoader两部分。

内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。

有的芯片比较复杂,比如Omap3在flash中没有代码的时候有许多启动方式:USB、UART或以太网等等。

而S3C24x0则很简单,只有Norboot和Nandboot。

drive e rs。

2)Linux kernel和driv3)文件系统。

包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、UBI、CRAMFS等等)。

它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。

4)应用程序。

用户自定义的应用程序,存放于文件系统之中。

在Flash存储器中,他们的分布一般如下:BootLoader(被挂载到根文件系统或者作为2在嵌入式Linux中BootBootL L o a d er的必要性Linux内核的启动除了内核映像必须在主存的适当位置,CPU还必须具备一定的条件:1.CPU寄存器的设置:R0=0;R1=Machine ID(即Machine Type Number,定义在linux/arch/arm/tools/mach-types);R2=内核启动参数在RAM中起始基地址;2.CPU模式:必须禁止中断(IRQs和FIQs);CPU必须SVC模式;3.Cache和MMU的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭;但是在CPU刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在主存中运行程序,更不可能处在Linux内核启动环境中。

为了初始化CPU及其他外设,使得Linux内核可以在系统主存中运行,并让系统符合Linux内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(Boot Loader)。

3源码下载地址U-boot官方主页(注意其中的邮件列表链接)http://www.denx.de/wiki/U-Boot/WebHome U-boot官方源码FTP下载ftp://ftp.denx.de/pub/u-boot/4交叉编译链的介绍与安装为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。

这种方法在异平台移植和嵌入式开发时非常有用。

相对与交叉编译,平常做的编译叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。

用来编译这种跨平台程序的编译器就叫交叉编译器,相对来说,用来做本地编译的工具就叫本地编译器。

所以要生成在目标机上运行的程序,必须要用交叉编译工具链来完成。

在裁减和定制Linux内核用于嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常都要在性能优越的PC上建立一个用于目标机的交叉编译工具链,用该交叉编译工具链在PC上编译目标机上要运行的程序。

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc3个部分组成。

通常构建交叉工具链有3种方法。

方法一分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。

该方法相对比较困难,适合想深入学习构建交叉工具链的读者。

如果只是想使用交叉工具链,建议使用方法二或方法三构建交叉工具链。

方法二通过Crosstool脚本工具来实现一次编译生成交叉编译工具链,该方法相对于方法一要简单许多,并且出错的机会也非常少,建议大多数情况下使用该方法构建交叉编译工具链。

方法三直接通过网上()下载已经制作好的交叉编译工具链。

5NAND flash(1)NAND闪存工作原理S3C2440开发板的NAND闪存由NAND闪存控制器(集成在S3C2440CPU中)和NAND闪存芯片(K9F1208U0A)两大部分组成。

当要访问NAND闪存芯片中的数据时,必须通过NAND闪存控制器发送命令才能完成。

所以,NAND闪存相当于S3C2410的一个外设,而不位于它的内存地址区。

NAND闪存(K9F1208U0A)的数据存储结构分层为:1设备(Device)=4096块(Block);1块=32页/行(Page/row);1页=528B=数据块(512B)+OOB块(16B)在每一页中,最后16个字节(又称OOB)在NAND闪存命令执行完毕后设置状态,剩余512个字节又分为前半部分和后半部分。

可以通过NAND闪存命令00h/01h/50h分别对前半部、后半部、OOB进行定位,通过NAND闪存内置的指针指向各自的首地址。

NAND闪存的操作特点为:擦除操作的最小单位是块;NAND闪存芯片每一位只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前一定要将相应块擦除;OOB部分的第6字节为坏快标志,即如果不是坏块该值为FF,否则为坏块;除OOB第6字节外,通常用OOB的前3个字节存放NAND闪存的硬件ECC(校验寄存器)码;(2)从NAND闪存启动U-BOOT的设计思路如果S3C2440被配置成从NAND闪存启动,上电后,S3C2440的NAND闪存控制器会自动把NAND闪存中的前4K数据搬移到内部RAM中,并把0x00000000设置为内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。

因此要把最核心的启动程序放在NAND闪存的前4K中。

由于NAND闪存控制器从NAND闪存中搬移到内部RAM的代码是有限的,所以,在启动代码的前4K里,必须完成S3C2440的核心配置,并把启动代码的剩余部分搬到RAM 中运行。

在U-BOOT中,前4K完成的主要工作就是U-BOOT启动的第一个阶段(stage1)。

根据U-BOOT的执行流程,可知要实现从NAND闪存中启动U-BOOT,首先需要初始化NAND闪存,并从NAND闪存中把U-BOOT搬移到RAM中,最后需要让U-BOOT支持NAND闪存的命令操作。

6u-boot具体分析本文从以下几个方面粗浅地分析u-boot:1、u-boot工程的总体结构2、u-boot的流程3、u-boot的重要细节,主要分析流程中各函数的功能。

一、u-boot工程的总体结构:1、源代码组织对于ARM而言,主要的目录如下:board平台依赖存放电路板相关的目录文件,每一套板子对应一个目录。

如smdk2410(arm920t)cpu平台依赖存放CPU相关的目录文件,每一款CPU 对应一个目录,例如:arm920t、xscale、i386等目录lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,如软件浮点。

common通用通用的多功能函数实现,如环境,命令,控制台相关的函数实现。

include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下lib_generic通用通用库函数的实现net通用存放网络协议的程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动,nand驱动。

.......2.makefile简要分析所有这些目录的编译连接都是由顶层目录的makefile来确定的。

在执行make之前,先要执行make$(board)_config对工程进行配置,以确定特定于目标板的各个子目录和头文件。

以smdk2410板为例,执行make smdk2410_config,主要完成三个功能:@在include文件夹下建立相应的文件(夹)软连接,#如果是ARM体系将执行以下操作:#ln-s asm-arm asm#ln-s arch-s3c24x0asm-arm/arch#ln-s proc-armv asm-arm/proc@生成Makefile包含文件include/config.mk,内容很简单,定义了四个变量:ARCH=armCPU=arm920tBOARD=smdk2410SOC=s3c24x0@生成include/config.h头文件,只有一行:/*Automatically generated-do not edit*/#include"config/smdk2410.h"顶层makefile先调用各子目录的makefile,生成目标文件或者目标文件库。

然后再连接所有目标文件(库)生成最终的u-boot.bin。

3、u-boot的通用目录是怎么做到与平台无关的?include/config/smdk2410.h这个头文件中主要定义了两类变量。

一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令、属性等,主要用来决定是否编译某些文件或者函数。

另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率、Flash地址等参数。

这些常数参量主要用来支持通用目录中的代码,定义板子资源参数。

这两类宏定义对u-boot的移植性非常关键,比如drive/CS8900.c,对cs8900而言,很多操作都是通用的,但不是所有的板子上面都有这个芯片,即使有它在内存中映射的基地址也是平台相关的。

所以对于smdk2410板,在smdk2410.h中定义了#define CONFIG_DRIVER_CS89001/*we have a CS8900on-board*/#define CS8900_BASE0x19000300/*IO mode base address*/ CONFIG_DRIVER_CS8900的定义使得cs8900.c可以被编译(当然还得定义CFG_CMD_NET才行),因为cs8900.c中在函数定义的前面就有编译条件判断:#ifdef CONFIG_DRIVER_CS8900如果这个选项没有定义,整个cs8900.c就不会被编译了。

而常数参量CS8900_BASE则用在cs8900.h头文件中定义各个功能寄存器的地址。

u-boot 的CS8900工作在IO模式下,只要给定IO寄存器在内存中映射的基地址,其余代码就与平台无关了。

u-boot的命令也是通过目标板的配置头文件来配置的,比如要添加ping命令,就必须添加CFG_CMD_NET和CFG_CMD_PING才行。

不然common/cmd_net.c就不会被编译了。

从这里我可以这么认为,u-boot工程可配置性和移植性可以分为两层:一是由makefile来实现,配置工程要包含的文件和文件夹上,用什么编译器。

合集下载

课件(UBOOT制作指导)

课件(UBOOT制作指导)
bne clear_loop
mov pc, lr
#endif @ CONFIG_S3C2410_NAND_BOOT
在文件的最后加入:
.align 2
DW_STACK_START:
.word STACK_BASE+STACK_SIZE-4
9)修改include/configs/bks2410.h文件,添加如下内容:
@ r1: length
mem_clear:
mov r2, #0
mov r3, r2
mov r4, r2
mov r5,ห้องสมุดไป่ตู้r2
mov r6, r2
mov r7, r2
mov r8, r2
mov r9, r2
clear_loop:
stmia r0!, {r2-r9}
subs r1, r1, #(8 * 4)
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
configarmarm920tbks2410nulls3c24x0我把我的板子起名叫bks2410可以依自己的喜好修改3建立boardbks2410目录拷贝boardsmdk2410下的文件到boardbks2410目录将smdk2410c更名为bks2410c4cpincludeconfigssmdk2410hincludeconfigsbks2410h5测试编译能否成功

uboot完全手册---14

uboot完全手册---14

uboot完全⼿册---141. u-boot介绍本次移植采⽤的是U-Boot-1.2.0版本。

3. U-Boot源码分析3.1 源码⼊⼝的解释可能⼤多数的同学上⽹查资料后都了解到,stage1阶段的启动代码,主要就在start.s⽂件⾥。

此start.s也是系统上电后执⾏的第⼀个代码。

它全部由汇编编写。

在讲述start.s之前,我们先来了解⼀下,系统怎么知道它要先去start.s⾥执⾏代码。

我们知道,每个可执⾏的映像Image,肯定会给编译器⼀个⼊⼝,⽽且是“有且只有⼀个全局的⼊⼝”。

我们可以把这个⼊⼝放在flash的0x0地址上,然后让系统去找这个0x0即可。

实际上,我们可以通过编写链接⽂件(lds)和mk⽂件来告知编译器这些情况。

Lds⽂件可以决定⼀个可执⾏代码的各个段的存储位置、⼊⼝地址等,详情请参考附录中的⽂章《u-boot lds⽂件详解》。

这⾥来说的Mk⽂件,是在board/下对应开发板⼦⽬录中的mk⽂件。

它指定了TEXT_BASE的地址。

3.2 stage1:启动分析终于开始u-boot源代码的讲述了!本⽂讲述的u-boot-1.2.0源码,是经笔者修改的代码。

不过,笔者也会将它与完整的源码包进⾏⽐较分析。

⾸先是start.s⽂件,刚才说过了,这个是系统启动后运⾏的第⼀个代码,我们详细地分析如下:3.2.1 中断向量表的设置.globl _start_start: b resetldr pc, _undefined_instructionldr pc, _software_interruptldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irqldr pc, _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,0xdeadbeefStart.s⽂件⼀开始,就定义了_start的全局变量。

uboot 详细注释讲解(1)

uboot 详细注释讲解(1)

大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。

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

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

由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。

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

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

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

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

(6)初始化堆栈。

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

2、Stage2 C语言代码部分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版本类似)cpu/arm920t/start.S@文件包含处理#include <config.h>@由顶层的mkconfig生成,其中只包含了一个文件:configs/<顶层makefile中6个参数的第1个参数>.h#include <version.h>#include <status_led.h>/********************************************************** ****************** Jump vector table as in table 3.1 in [1]********************************************************** *****************/注:ARM微处理器支持字节(8位)、半字(16位)、字(32位)3种数据类型@向量跳转表,每条占四个字节(一个字),地址范围为0x0000 0000~@0x0000 0020@ARM体系结构规定在上电复位后的起始位置,必须有8条连续的跳@转指令,通过硬件实现。

UBOOT基础知识 ppt课件

UBOOT基础知识  ppt课件

ppt课件
14
流程
BootLoader 的 stage1 通常包括以下步骤:
·硬件设备初始化 ·为加载 BootLoader 的 stage2 准备 RAM 空 间 ·拷贝 BootLoader 的 stage2 到 RAM 空间中 ·设置好堆栈(why??) ·跳转到 stage2 的 C 入口点
UBOOT
中嵌
Teacher Xie
ppt课件
1
提纲
理论: BootLoader介绍 Uboot介绍 Uboot命令 Uboot工作流程 Uboot移植 Uboot烧写
实验: 移植Uboot Uboot使用
ppt课件
2
第一节 BootLoader介绍
ppt课件
3
概念
ppt课件
8
定义
简单地说,BootLoader就是在操作系统 运行之前运行的一段小程序。通过这段 小程序,可以初始化硬件设备,从而将 系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统做好准备。
ppt课件
9
功能
BootLoader 的主要任务是初始化硬件 (如:串口,内存),然后将内核映 象从 Flash 中读到 RAM 中,然后跳 转到内核的入口点去运行,也就是启 动操作系统。
ppt课件
11
移植
Q:什么叫bootloader移植? Q:为什么需要移植?
ppt课件
12
移植
每种不同的CPU体系结构都有不同的BootLoader。 除了依赖于CPU的体系结构外,BootLoader 还依 赖于具体的嵌入式板级设备的配置,比如板卡的 硬件地址分配,外设芯片的类型等。这也就是说, 对于两块不同的开发板而言,即使它们是基于同 一种CPU而构建的,但如果他们的硬件资源或配置 不一致的话,要想在一块开发板上运行的 BootLoader程序也能在另一块板子上运行,还是 需要作修改。

7.uboot基础知识(1)

7.uboot基础知识(1)
2. 下载模式Downloading:
在这种模式下,BootLoader将通过串口或网口从主机下载程序到 目标机。例如,下载内核映像,根文件系统映像,应用程序等。
2. u-boot简介
u-boot是由德国DENX小组开发的BootLoader,其全称是Universal Boot Loader。
u-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统, 它目前已支持数百种嵌入式开发板和各种CPU,包括ARM, PowerPC, MIPS, X86, Coldfire等,同时还支持Linux,NetBSD,VxWorks等多种嵌入 式操作系统的引导。
进入Ubuntu Linux操作系统的 图形化界面。
打开桌面上的【终端】,进入命令行界面。到/home/cvtech/目录 下,查看u-boot-s5pv210源代码。
在u-boot-s5pv210文件夹中包含的目录说明如下: board:目标板相关文件,主要包含SDRAM、Flash驱动。 common:独立于处理器体系结构的通用代码,如内存大小检测与故障检
除此之外,uboot还有内存操作命令、nand flash操作命令等。 内存操作命令
cmp:内存比较命令。 cp: 内存拷贝命令。 md: 内存显示命令。 mw: 内存填充命令。 mtest:内存测试命令。 Nand flash操作命令 nand info:查看nand flash芯片信息命令。 nand erase:nand flash擦除命令。 nand scrub: nand flash擦除命令,会将坏块信息也擦除掉。 nand read:nand flash读命令。 nand write:将数据从SDRAM写入nand flash。 nand ecc:设置nand flash的ecc校验方法。

U-boot命令详解

U-boot命令详解

常用的U-boot命令详解帮助与环境变量U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的U-boot-2009.11中的命令行模式模式下支持“Tab”键的命令补全和命令的历史记录功能。

而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。

TX-2440A> versionU-Boot 1.1.6 (Jan 18 2010 - 10:05:35)TX-2440A> vU-Boot 1.1.6 (Jan 18 2010 - 10:05:35)TX-2440A> baseBase Address: 0x00000000TX-2440A> baBase Address: 0x00000000由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。

所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧!(1)获取帮助命令:help 或?功能:查看当前U-boot版本中支持的所有命令。

T X-2440A>h e l p?-a l i a s f o r'h e l p'a u t o s c r-r u n s c r i p t f r o m m e m o r yb a s e-p r i n t o r s e t a d d r e s s o f f s e tb d i n f o-p r i n t B o a r d I n f o s t r uc t u r eb o o t-b o o t d e f a u l t,i.e.,r u n'b o o tc m d'b o o t_n o o s-b o o t U s e r P r o g r a mb o o t_z I m a g e-b o o t L i n u x's z I m a g eb o o t d-b o o t d e f a u l t,i.e.,r u n'b o o tc m d'b o o t e l f-B o o t f r o m a n E L F i m a g e i n m e m o r yb o o t m-b o o t a p p l ic a t i o n i m a g e f r o m m e m o r yb o o t p-b o o t i m a g e v i a n e t w o r k u s i n g B o o t P/T F T P p r o t oc o lb o o t v x-B o o t v x W o r k s f r o m a n E L F i m a g ec h p a r t-c h a n g e a c t i v e p a r t i t i o nc m p-m e m o r y c o m p a r ec o n i n f o-p r i n t c o n s o l ede v i c e s a n d i nf o r m a t i o nc p-m e m o r y c o p yc r c32-c h e c k s u m c a l c u l a t i o nd a t e-ge t/s e t/r e s e t d a t e&t i m ed c a c h e-e n a b l e o r d i s a b l e d a t a c a c h ee c h o-e c h o a r g s t o c o n s o l ee r a s e-e r a s e F L A S H m e m o r yf l i n f o-p r i n t F L A S H m e m o r y i n f o r m a t i o nf s i n f o-p r i n t i n f o r m a t i o n a b o u t f i l e s y s t e m sf s l o a d-l o a d b i n a r y f i l e f r o m a f i l e s y s t e m i m ag eg o-s t a r t a p p l i c a t i o n a t a d d r e s s'a d d r'h e l p-p r i n t o n l i n e h e l pi c a c h e-e n a b l e o r d i s a b l e i n s t r u c t i o n c a c h ei m i n f o-p r i n t h e a d e r i n f o r m a t i o n f o r a p p l i c a t i o n i m a g ei t e s t-r e t u r n t r u e/f a l s e o n i n t e g e r c o m p a r el o a d b-l o a d b i n a r y f i l e o v e r s e r i a l l i n e(k e r m i t m o d e) l o a d s-l o a d S-R e c o r d f i l e o v e r s e r i a l l i n el o a d x-l o a d b i n a r y f i l e o v e r s e r i a l l i n e(x m o d e m m o d e)l o a d y-l o a d b i n a r y f i l e o v e r s e r i a l l i n e(y m o d e m m o d e) l o o p-i n f i n i t e l o o p o n a d d r e s s r a n g el s-l i s t f i l e s i n a d i r e c t o r y(d e f a u l t/)m d-m e m o r y d i s p l a ym e n u-d i s p l a y a m e n u,t o s e l e c t t h e i t e m s t o d o s o m e t h i n g m m-m e m o r y m o d i f y(a u t o-i n c r e m e n t i n g)m t d p a r t s-d e f i n e f l a s h/n a n d p a r t i t i o n sm t e s t-s i m p l e R A M t e s tm w-m e m o r y w r i t e(f i l l)n a n d-N A N D s u b-s y s t e mn b o o t-b o o t f r o m N A N D d e v i c en m-m e m o r y m o d i f y(c o n s t a n t a d d r e s s)p i n g-s e n d I C M P E C H O_R E Q U E S T t o n e t w o r k h o s tp r i n t e n v-p r i n t e n v i r o n m e n t v a r i a b l e sp r o t e c t-e n a b l e o r d i s a b l e F L A S H w r i t e p r o t e c t i o nr a r p b o o t-b o o t i m a g e v i a n e t w o r k u s i n g R A R P/T F T P p r o t o c o l r e s e t-P e r f o r m R E S E T o f t h e C P Ur u n-r u n c o m m a n d s i n a n e n v i r o n m e n t v a r i a b l es a v e e n v-s a v e e n v i r o n m e n t v a r i a b l e s t o p e r s i s t e n t s t o r a g e s e t e n v-s e t e n v i r o n m e n t v a r i a b l e ss l e e p-d e l a y e x e c u t i o n f o r s o m e t i m et f t p b o o t-b o o t i m a g e v i a n e t w o r k u s i n g T F T P p r o t o c o lu s b s l a v e-g e t f i l e f r o m h o s t(P C)v e r s i o n-p r i n t m o n i t o r v e r s i o n如果你想获取某条命令的更详细的帮助,可以使用:help <你想要查的指令>或者?<你想要查的指令>,甚至h <你想要查的指令缩写>。

深度解析:嵌入式之uboot

深度解析:嵌入式之uboot1.为什么要有uboot1.1、计算机系统的主要部件(1)计算机系统就是以CPU为核心来运行的系统。

典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调)(2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。

但是所有的计算机系统运行时需要的主要核心部件都是3个东西:CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM)1.2、PC机的启动过程(1)部署:典型的PC机的BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。

(2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS 就无用了) 1.3、典型嵌入式linux系统启动过程(1)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。

(2)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)总结:嵌入式系统和PC机的启动过程几乎没有两样,只是BIOS 成了uboot,硬盘成了Flash。

1.4、android系统启动过程(1)Android系统的启动和Linux系统(前面讲的典型的嵌入式系统启动)几乎一样。

几乎一样意思就是前面完全一样,只是在内核启动后加载根文件系统后不同了。

(2)可以认为启动分为2个阶段:第一个阶段是uboot到OS启动;第二个阶段是OS启动后到rootfs加载到命令行执行;现在我们主要研究第一个阶段,android的启动和linux的差别在第二阶段。

uboot的移植课堂讲义(gec2440)


没有目录 GEC/gec2440/! !那么我们建立该目录! ! 在 board 目录,执行命令: mkdir -p GEC/gec2440/
在 uboot 的顶层目录下再次 make!! 出现错误: make -C board/gec2440/GEC/
make[1]: 正在进入目录 `/home/bt/uboot_porting/u-boot-2010.06/board/gec2440/GEC' make[1]: *** 没有指明目标并且找不到 makefile。 停止。
在 uboot 的顶层目录下有三个文件需要关注一下: u-boot.bin:可烧写的 uboot 镜像; u-boot:完整的 uboot 执行文件; u-boot.map:符号表文件
下载运行 串口之所以没有输出信息,就在于时钟问题! ! !
打开 gec2440.c,修改:
#define FCLK_SPEED 2 #if FCLK_SPEED==0 #define M_MDIV 0xC3 #define M_PDIV 0x4 #define M_SDIV 0x1 #elif FCLK_SPEED==1 #define M_MDIV 0xA1 #define M_PDIV 0x3 #define M_SDIV 0x1 #elif FCLK_SPEED==2 #define M_MDIV 0x7f #define M_PDIV 0x2 #define M_SDIV 0x1 #endif /* Fout = 203MHz, Fin = 12MHz for Audio */
在 uboot 的顶层目录下再次 make distclean&&make gec2440_config&&make!!,最后出现: arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin 说明已经生成了烧写镜像 u-boot.bin!!!

uboot编程详解教程

fU-Boot编程:教程介绍为了使U-Boot适应自定义的硬件,通常需要对U-Boot进行一些细微的更改。

例如,支持特定于电路板的功能或添加一些例程,这些例程向终端用户发出信号,表明设备确实已经启动,并且在。

启动的过程发生时发生了一些事情。

这篇简短的教程主要介绍用于ARM的U-Boot,但是在其它架构上上使用的技术是相似的,而且通常是完全相同的。

假设读者熟悉命令级的U-Boot用法以及编译和部署。

建议首先读取项目根目录中的自述文件。

它包括以下主题:•源文件树结构•配置的含义定义•U-Boot构建说明。

•如何将U-Boot移植到新平台•对Hush shell简介•如何构建Linux映像(mkimage)•常见环境变量列表•“Hello world”示例及其使用方法boards.cfg包含支持的板的列表。

也值得一看。

本教程是针对U-Boot版本v2013.07编写的,但是这些原则适用于各种版本。

明智的黑客当遇到大量的软件资源时,最直接的本能是寻找第一个地方注入一个小的黑客,并对必要的功能进行硬编码。

这不仅会在将来导致令人生畏的重新破解和重新编译,而且也没有必要:U-Boot实际上是为了方便添加自定义功能而设计的。

可以将可能的修改分为三类:•修改U-Boot的初始化过程,以便尽早设置定制板的特定硬件•通过添加或修改低级驱动程序,增加对特定硬件的支持•扩展命令界面以支持所需功能,可能作为新硬件的前端在电路板的初始化程序中添加几行黑客代码来执行特定的操作可能很诱人。

这很有可能有效,但正如刚刚提到的,硬编码也有其缺点。

如果硬件的设置可以推迟到命令执行阶段,那么编写一个小型的自定义驱动程序和命令支持就更加优雅,而且可重用。

本教程分为三个部分:关于U-Boot的概述(本部分)、关于如何添加功能的实际操作说明(第二部分)以及一些有关U-Boot启动过程的背景知识,用于那些需要很早初始化某些东西的人使用(第三部分)。

uboot启动代码详细讲解

·1 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。

一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。

固化在固件(firmware)中的 boot 代码,也就是 Boot Loader,它的启动通常分为两个阶段。

2. Linux 核。

特定于嵌入式板子的定制核以及核的启动参数。

3. 文件系统。

包括根文件系统和建立于 Flash 存设备之上文件系统,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 程序。

·2 bootloader简介简单地说,Boot Loader (引导加载程序)就是在操作系统核运行之前运行的一段小程序,它的作用就是加载操作系统,它是系统加电后运行的第一段软件代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档