关于bootloader,eboot,uboot,norflash,nandflash。

2024-08-31 03:18

本文主要是介绍关于bootloader,eboot,uboot,norflash,nandflash。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.bootloader的作用

       其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。而操作系统文件的来源,可以是flash,sd card,PC(可以通过网络,USB,甚至串口传输)等等,所谓的EBOOT,UBOOT,其实就是表明了系统文件是通过Ethernet或者USB从PC传输过去的。当然,为了实现这个功能(以及其它附加功能),我们必须对硬件做一些必要的初始化,这个也是必须的(废话!)。除了这个必须的,现在的bootloader还常常会加入以下功能:

      1.将操作系统映像文件写入FLASH/硬盘等:读取过来的操作系统文件,除了可以拷贝到RAM中直接运行,还可以烧录到FLASH,或者写入硬盘永久保存,这样下次就可以直接从本机来读取操作系统映像。

     2.硬件诊断:如同PC的BIOS一样,检测硬件是否正常功能。

     3.显示一个LOGO,因为拷贝操作系统文件和启动操作系统需要时间,所以产品化的设备,一般需要在这段时间显示一个LOGO。

 

    二.bootloader是不是必须的

      bootloader并不是必须的,如果我们的硬件有足够大的norflash,并且实现了XIP技术,那么WinCE 操作系统可以直接在norflash里面运行起来,不需要将它复制到RAM中去,所以bootloader就失去了作用。

       但是考虑到成本因素,现在的硬件一般都不会配置这么大的norflash,image文件都存储在nand flash里面,所以都会用到bootloader。

 

    三.关于nboot和eboot

    国内很多人做WinCE都是使用Samsung的2410或者2440入门的,所以对nboot和eboot是最熟悉的。eboot是微软在WinCE里面提供的开放源代码的一个bootloader的框架,因为它默认的是使用ethernet从PC下载image而得名,使用该框架,根据自己的硬件做一些修改就可以直接拿来用了,那么nboot又是怎么回事呢?

    之所以需要nboot(注:三星的后续产品中,nboot已经改名为stepldr,ldr是looder的缩写,step是stepstone的意思,这是三星系列CPU为解决nand启动而内置的一小块RAM),是和硬件紧密相关的。我们在设计硬件的时候,ROM部分可以只使用norflash,也可以使用1片小容量的norflash+大容量的nandflash,还可以只使用nandflash。第一种方案,可以不用bootloader,也可以只使用eboot;第二种方案,把eboot放到norflash中,image放在nandflash中,并将硬件设置为norflash启动模式,也不用nboot。只有第3种方案,才需要使用nboot,这是为什么呢?

     我们知道nandflash本身不能运行程序,它里面的内容必须拷贝到RAM中才能运行,但是CPU上电后,RAM中是空的,谁来执行这个拷贝的工作呢?三星的解决方案,就是内置了一小块RAM(stepstone),然后从硬件上实现CPU上电后先读取nand flash最开始的一段代码到stepstone中去(当然,要设置硬件为nandflash启动方式),然后从stepstone起始处(被设置为RAM的0地址)去执行。这个stepstone一般很小(2410,2440是4K),所以它没办法放下一个功能复杂的bootloader(比如eboot),只能放一个功能很简单的,这就是需要nboot的原因了。nboot的功能十分单一,就是从nandflash复制image到RAM中去,然后跳转执行。这里的image可以是eboot的(一般开发阶段这样做),也可以是OS的。

     优龙的开发板提供了一种叫做BIOS的bootloader,它远远超出了4K的限制,但是还可以在nandflash启动方式下正常运行,这是为什么呢?原来,它实现了2次加载,也就是说CPU上电后自动加载了4K代码,这4K代码又将整个bootloader重新拷贝到RAM中再执行,要实现这样的功能要对链接器做一些设置,使“拷贝”功能的代码必须放到前4K里面去。

 

   总之,bootloader是需要直接和硬件打交道,不同的硬件设计,就会影响到它的实现,所以了解硬件的设计是理解bootloaer的第一步。

这篇关于关于bootloader,eboot,uboot,norflash,nandflash。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122733

相关文章

笔记整理—uboot番外(6)针对x210的网卡说明

对于x210而言,在三星中与九鼎官方的uboot都默认使用了二号串口。详见CONFIG_SERIALn(n=1~4)。         更改串口后,应先插回原串口,进行iROM打印,内部iNnad校验核失败的信息,之后再插入其串口进行启动。         修改CCONFIG_NETMASK等多个宏可以修改默认的网络环境。在进行完成修改后,如果依旧没进行改变,则应对iNand

PetaLinux Linux Uboot 源码路径

在很早以前的版本,直接在创建的工程下面就可以找到内核源码和uboot源码。后面的版本采用的是网络下载编译,诸如2018.3 编译完成自动删除,如果想保留,可以在创建的工程下面 $ vim ./project-spec/meta-user/conf/petalinuxbsp.conf 加入RM_WORK_EXCLUDE += "linux-xlnx"RM_WORK_EXCLUDE += "u

DM8168 ccs5.4 烧写u-boot到nandflash

烧写用到的工具是  nand-flash-writer.out 它的源码路径在 ${EZSDK}/board-support/host-tools/src/nandflash-<version>.tar.gz 解压后导入到ccs进行编译后得到 nand-flash-writer.out。   接着: ①导入8168.gel文件 ②将u-boot.noxip.bin 先存放在电脑中 ③

新路程----海思 uboot(1)

先看start.s吧 .globl _start //.global声明_start为全局符号,_start就会被连接器链接到,也就是链接脚本中的入口地址了。_start: b reset //跳转到reset 下面的代码是设置arm的异常向量表ldr pc, _undefined_instruction //把label后的数据或者指令内容赋值给pcldr pc, _softw

新路程------uboot环境变量没生效

之前刷文件系统一种出错,出错log如下 hisilicon # sf probe 0;mw.b 0x82000000 0xff 0x1800000;tftp 0x82000000 rootfs_ucl ibc_64k.jffs2;sf erase 0x500000 0x1800000;sf write 0x82000000 0x500000 0x1800000 32768 KiB h

uboot中添加一条自己的命令-Nazgul

uboot中添加XNazgul命令三部曲 1、在unsp210_u-boot\include\configs\unsp210.h中添加一项宏定义 #define CONFIG_CMD_XNazgul 1 主要是为了防止后面命令实现的时候出现重复的命令 2、在common文件夹下建立cmd_XNazgul.c 文件内容 #include <comm

追踪uboot下tftp命令的代码执行过程-Nagul

一、网卡驱动的添加  网络在uboot中的启动是在uboot的第二阶段启动代码中 /lib_arm/board.c [cpp]  view plain copy void start_armboot (void){}   里面有网络初始化函数 [cpp]  view plain copy eth_initialize(gd->bd)

为什么bootloader跳转地址要加4?

问题 “我看你验证程序从ROM跳Flash地址要加4,为啥?” 又被问到了,这次记一下,以后谁再问我就直接发链接,必须点赞+关注,哈哈 答案 上电流程 ARM内核上电以后会从启动地址开始执行,就是vector的起始地址。 vector的第一个4byte-word是堆栈的栈顶地址,后面4byte-word是程序地址,要去这里执行。 硬件上电后会把第一个word load到SP里面,然后第二个

笔记整理—内核!启动!—uboot部分(3)uboot启动内核传参

uboot会以tag的方式给内核传递参数,tag是一个数据结构,在uboot中与linux_kernel中都有相同的结构。         kernel接收到的传参由若干个tag构成,从tag_start到tag_end之间的数据构成,读到start时开始传参,end结束传参。  CONFIG_SETUP_MEMORY_TAGS 宏会去找对应的tag_mem,其内容

笔记整理—内核!启动!—uboot部分(1)

常规启动时,各镜像都在SD卡中的各种分区中,内核放在kernel分区,从SD卡到DDR的连接处(内核不需要进行重定位,直接从链接处启动)。uboot从sd卡分区读使用movi命令。         使用fastboot指令可以查看分区情况;movi read可以用于读取kernel,读取完成后使用bootm启动。 对于x210而言是movi read kernel 0x300