移植u-boot-2012-10到tiny210v2(一)-----基本芯片介绍和启动流程介绍

合集下载

Tiny210v2( S5PV210 )平台下 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)

Tiny210v2( S5PV210 )平台下 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)

0. 准备工作1. 编译uboot2. 将uboot写入SD卡3. 编译kernel,设置其可以通过NFS挂载根文件系统4. 开发环境安装TFTP服务器5. 开发环境安装NFS服务器6. 目标环境设置uboot参数7. 制作根文件系统(optional)。

8. 完整的启动LOG。

有几位网友发信问我uboot挂载文件系统的方法,其实这个部分也不是我原创的,大部分都是参考其他网友的方法,现在将我的手顺记录下来,希望对大家有所帮助。

整体思路大概是这样:* 将uboot烧写到SD卡。

* 从SD卡启动系统,SD卡中的uboot通过TFTP协议将远程的的Kernel下载到内存中。

* uboot将内核参数设定为ROOT分区为远程的NFS-SERVER共享的一个目录,并JUMP到内核的START ADDRESS。

* kernel自解压,并JUMP 到解压后的新的内核START ADDRESS,内核正常启动。

* 最后通过内核通过uboot设置的ROOTFS参数得知根文件系统在远程,并通过NFS 挂载ROOTFS。

* 根文件系统挂载完了以后,就会去执行init程序,init程序被uboot指定为/linuxrc。

我的开发环境是ubunto 12.04LTS。

目标系统的内核是3.0.8 ,源代码位于/opt/S5PV210/rootfs/usr/src/linux-3.0.8。

uboot的源代码位于/opt/S5PV210/rootfs/usr/src/opencsbc-u-boot。

目标环境的根文件系统位于/opt/S5PV210/rootfs。

交叉编译器位于/opt/linaro-gcc473-eglibc216-armv7a-neon。

0. 准备工作编译uboot和linux内核都需要使用到交叉编译器,所以需要确保shell 的PATH 环境中包含了你的交叉编译器的路径。

比如我的PATH为:(通过export查看)declare -xPATH="/usr/lib/lightdm/lightdm:/opt/linaro-gcc473-eglibc216-armv7a-neon/bin:/usr/local/s bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"这样,就可以直接查找到arm-linux-gcc这条命令了,不许要输入arm-linux-gcc的绝对路径。

tiny210u-boot引导内核及文件系统笔记

tiny210u-boot引导内核及文件系统笔记

tiny210u-boot引导内核及文件系统笔记tiny210 u-boot 引导内核及文件系统笔记分类: UBOOT 文件系统 2012-11-18 19:36 268人阅读评论(0) 收藏举报使用u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)做好了uboot 移植打算用u-boot 来引导内核加载文件系统于是,试着将友善之臂提供的文件系统镜像写到NAND Flash中tftp 0x21000000 xxxx.imgnand erase 0xe00000 0xd20000 (写入前擦除NAND部分空间) nand write.yaffs 0x21000000 0xe00000 0xc75c0c0(将文件系统镜像写入NAND Flash)设置u-boot命令参数:setenv bootcmd nand read 0x30008000 60000 419100\;bootm 30008000 (内核从Flash中读出并加载) 保存环境变量 saveenv重启开发板.....能够成功引导内核,但加载文件系统时出错错误提示:/init:line103:can't open /r/dev/console :no such filekenrnel panic -not syncing :attemped to kill init!目前还没弄清楚错误原因.....试着利用nfs加载文件系统设置启动参数:setenv bootargs root=/dev/nfs console=ttySAC0,115200 init=/linuxrc nfsroot=192.168.1.103:/nfsshare/rootfs_qtopia_qt4/(友善之臂提供的文件系统在nfs下)ip=192.168.1.103(开发板IP):192.168.1.100(主机IP):192.168.1.255(网关):255.255.255.0:name:eth0:on(fbcon=rotate:1)重启开发板OK,能引导内核并加载文件系统...分析原因:1 uboot 烧写yaffs2文件系统出了问题2 内核加载文件系统上面有问题具体原因接着分析中.....。

u-boot、inux内核和根文件系统移植文档

u-boot、inux内核和根文件系统移植文档

u-boot、inux内核和根文件系统移植文档目录一、u-boot移植 (1)二、linux内核移植 (2)三、根文件系统移植 (4)四、nfs文件系统 (8)工具:arm-linux-gcc-4.4.3.tar.gzlinux内核:linux-2.6.22.6.tar.bz2,补丁:linux-2.6.22.6_jz2440.patchu-boot源码:u-boot-1.1.6.tar.bz2,补丁:u-boot-1.1.6_jz2440.patchbusybox源码:busybox-1.7.0.tar.bz2yaffs2制作工具:yaffs_source_util_larger_small_page_nand.tar.bz2jffs2制作工具路径:F:\韦东山\CD1_主光盘\GUI\xwindow\X\deps以上源码和工具均来自韦东山光盘。

一、u-boot移植工具和源码在路径:F:\韦东山\CD1_主光盘\system。

tar xjf u-boot-1.1.6.tar.bz2 //解压缩cd u-boot-1.1.6 //进入目录patch -p1 < ../u-boot-1.1.6_jz2440.patch //打补丁,-p1是指忽略第一个目录root@ubuntu:/share/u-boot-1.1.6# make 100ask24x0_config //产生配置文件Configuring for 100ask24x0 board...make all //编译结果会遇到这个问题,发现浮点错误,因为gcc造成,所以修改以下文件gedit cpu/arm920t/config.mkundefined reference to ‘raise’//提示错误将cpu /arm920t/config.mk 改为PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 /-msoft-floatPLATFORM_CPPFLAGS +=#========================================= ==================## Supply options according to compiler versionPLATFORM_CPPFLAGS +=$(call cc-option,)PLATFORM_RELFLAGS +=$(call cc-option,$(call cc-option,)) 在uboot的根目录中把Makefile中的PLATFORM_LIBS 修该为如下值PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc -lc -L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib然后重新make distclean,make 100ask24x0_config,make 应就能通过了,最后可生产u-boot.bin 通过jlink下载u-boot.bin到nor flash下载成功后,从nor flash启动,选择k命令,开启dnw,选择dnw的USB Port下载uImage,在u-boot界面输入b即可启动内核。

飞凌OK210开发板UBOOT移植步骤

飞凌OK210开发板UBOOT移植步骤

在飞凌S5PV210开发板上移植U-Boot的过程主要包括以下四个步骤:1.下载U-Boot源码2.修改相应的文件代码3.编译U-Boot4.烧写到开发板上,运行U-Boot是universal bootloader,也就是通用的bootloader。

它存在于nandflash或者SD 卡中,它是在开机上点之后,操作系统起来之前用来引导的一个程序。

U-boot的主要作用是进行内存的初始化、CPU的初始化、串口初始化等一系列的初始化工作,完成这些之后,再将操作系统加载到内存中,从而运行起来。

U-Boot源码文件下包括一些目录文件和文本文件,这些文件可分为”与平台相关的文件”和”与平台无关的文件”,其中common文件夹下的文件就是与平台无关的文件;与平台相关的文件又分为CPU级相关的文件和与板级相关的文件:arch目录下的文件就是与CPU 级相关的文件,而board、drivers、include等文件夹下的文件都是与板级相关的文件。

我们在移植的过程中,需要修改的文件也就是这些与平台相关的文件。

下面是移植2011.06版本到210处理器上时修改(或添加)的文件:以下文件均为与CPU级相关的文件uboot2011.06/arch/arm/cpu/armv7/start.suboot2011.06/arch/arm/cpu/armv7/Makefileuboot2011.06/arch/arm/include/asm/arch-s5pc1xx/hardware.huboot2011.06/arch/arm/lib/board.cuboot2011.06/arch/arm/lib/Makefileuboot2011.06/arch/arm/config.mk以下文件均为与板级相关的文件uboot2011.06/board/samsung/OK210/tools/mkv210_image.cuboot2011.06/board/samsung/OK210/lowlevel_init.Suboot2011.06/board/samsung/OK210/mem_setup.Suboot2011.06/board/samsung/OK210/OK210.cuboot2011.06/board/samsung/OK210/OK210_val.huboot2011.06/board/samsung/OK210/mmc_boot.cuboot2011.06/board/samsung/OK210/Makefileuboot2011.06/drivers/mtd/nand/s5pc1xx_nand.cuboot2011.06/drivers/mtd/nand/Makefileuboot2011.06/include/configs/OK210.huboot2011.06/include/s5pc110.huboot2011.06/include/s5pc11x.huboot2011.06/spl/Makefileuboot2011.06/boards.cfguboot2011.06/config.mkuboot2011.06/Makefile移植过程就是在新的U-Boot代码中增加与S5PV210开发板CPU级和Board级代码,使之能够在210开发板上面运行。

UBOOT移植

UBOOT移植

1. u-boot 介绍u-boot 是一个open source 的bootloader,目前版本是0.4.0。

u-boot 是在ppcboot 以及armboot 的基础上发展而来,虽然宣称是0.4.0 版本,却相当的成熟和稳定,已经在许多嵌入式系统开发过程中被采用。

由于其开发源代码,其支持的开发板众多。

唯一遗憾的是并不支持我们现在学习所用samsung 44B0X 的开发板。

为什么我们需要u-boot?显然可以将ucLinux 直接烧入flash,从而不需要额外的引导装载程序(bootloader)。

但是从软件升级的角度以及程序修补的来说,软件的自动更新非常重要。

事实上,引导装载程序(bootloader)的用途不仅如此,但仅从软件的自动更新的需要就说明我们的开发是必要的。

同时,u-boot 移植的过程也是一个对嵌入式系统包括软硬件以及操作系统加深理解的一个过程。

2. u-boot 移植的框架移植u-boot 到新的开发板上仅需要修改和硬件相关的部分。

在代码结构上:1) 在board 目录下创建ev44b0ii 目录,创建ev44b0ii.c 以及flash.c,memsetup.S,u-boot.lds等。

不需要从零开始,可选择一个相似的目录,直接复制过来,修改文件名以及内容。

我在移植u-boot 过程中,选择的是ep7312 目录。

由于u-boot 已经包含基于s3c24b0 的开发板目录,作为参考,也可以复制相应的目录。

2) 在cpu 目录下创建arm7tdmi 目录,主要包含start.S,interrupts.c 以及cpu.c,serial.c几个文件。

同样不需要从零开始建立文件,直接从arm720t 复制,然后修改相应内容。

3) 在include/configs 目录下添加ev44b0ii.h,在这里放上全局的宏定义等。

4) 找到u-boot 根目录下Makefile 修改加入1. ev44b0ii_config : unconfig2. @./mkconfig $(@:_config=) arm arm7tdmi ev44b0ii5) 运行make ev44bii_config,如果没有错误就可以开始硬件相关代码移植的工作3. u-boot 的体系结构1) 总体结构u-boot 是一个层次式结构。

uboot2012-10移植s5pv210

uboot2012-10移植s5pv210

s5pv210 uboot-2012-10的移植s5pv210 uboot-2012-10移植(一) 之分析Alex Ling的linaro-2011.10 for mini210好久好久前就买了s5pv210的开发板,一直都是东搞搞西搞搞,一点收获也没有,这次下决心来移植最新的uboot到u-boot-2012.10上,并通过这个博客记录下来以防时间长给忘了,我的开发板是QT210的。

s5pv210的启动分为BL0,BL1,BL2,BL0是出厂的时候就固化在IROM里的,所以我们的uboot就要实现BL1和BL2,BL1在uboot里叫做u-boot-spl.bin,BL2就是我们很熟悉的u-boot.bin了。

在移植之前,我们先看下Alex Ling 的linaro-2011.10 for mini210的UBOOT是怎么实现的。

这里主要还是分析SPL部分,u-boot.bin是如何生成的现在资料很多,也很复杂,我这个菜鸟也是一知半解的,所以就不分析了。

1.顶层的Makefile,从中可以知道,我们要想生成u-boot-spl.bin就必须配置COFNIG_SPL,那么u-boot-spl.bin依赖什么呢,我们继续[plain]view plaincopy1.ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin2.3.all: $(ALL-y)搜索发现,是进入到uboot顶层目录的spl目录下执行Makefile的[plain]view plaincopy1.$(obj)spl/u-boot-spl.bin: depend2. $(MAKE) -C spl all2.打开spl/Makefile分析,一开始就给我们导出CONFIG_SPL_BUILD[plain]view plaincopy1.CONFIG_SPL_BUILD := y2.export CONFIG_SPL_BUILD然后分析目标,因为我们的平台是三星的,所以,会有两个目标,一个是不带头信息的u-boot-spl.bin,一个是$(obj)$(BOARD)-spl.bin。

uuboot 移植流程

uuboot 移植流程

uuboot 移植流程U-Boot 移植流程介绍U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。

移植U-Boot可以将其适配到不同的硬件平台上,以满足特定需求。

本文将详细说明U-Boot移植的流程。

准备工作1.硬件选型:根据项目需求,选择适合的硬件平台。

2.获取源代码:从U-Boot官方网站或仓库下载最新版本的源代码。

3.安装交叉编译工具链:根据目标硬件平台的指令集架构,选择合适的交叉编译工具链,并进行安装。

4.了解目标硬件平台:熟悉目标硬件平台的架构、引导方式、存储器布局等相关信息。

移植流程1.配置编译环境:设置交叉编译工具链的环境变量,以确保正确编译U-Boot源代码。

2.配置U-Boot:修改U-Boot源代码中的配置文件,根据目标硬件平台的特性和需求进行相应配置。

–配置目标硬件平台的处理器类型、存储器布局等基本信息。

–配置启动方式,如通过网络(TFTP)或存储介质(SD卡、NAND Flash)等进行启动。

–配置启动流程,如引导加载程序的加载顺序、启动脚本等。

3.添加适配代码:根据目标硬件平台的需求,编写适配代码,包括引导加载程序和设备驱动等。

–引导加载程序:为目标硬件平台选择合适的程序入口点,配置启动参数,加载适配的设备驱动等。

–设备驱动:根据目标硬件平台的外设,编写相应的设备驱动代码,以支持外设的初始化和操作。

4.编译U-Boot:使用交叉编译工具链,编译修改后的U-Boot源代码。

–执行make clean清除之前的编译结果。

–执行make命令编译U-Boot源代码。

5.烧录和运行:将编译生成的U-Boot镜像烧录到目标硬件平台,并进行测试。

–根据目标硬件平台的烧录方式(串口、JTAG等),将U-Boot镜像烧录到目标设备。

–启动目标设备,观察U-Boot的启动信息是否正常输出,检查设备驱动是否正常加载。

6.调试和优化:根据实际情况,进行U-Boot的调试和性能优化。

–使用调试工具进行调试,如调试器、串口打印信息等。

tiny210--U-Boot实现NAND的擦除

tiny210--U-Boot实现NAND的擦除

tiny210--U-Boot实现NAND的擦除tiny210--U-Boot实现NAND的擦除(型号:K9GAG08U0F)管理提醒:本帖被xoom 执行加亮操作(2013-03-12)(我是菜鸟,贡献点微薄之力)1、NAND的初始化:#if defined(CONFIG_CMD_NAND)puts("NAND: ");nand_init(); /* go init the NAND */#endif调用函数:nand_init_chip(&amp;nand_info, &amp;nand_chip,base_address); 参数base_address=0xB0E000000。

函数功能:设置nand_chip结构体:nand-&gt;IO_ADDR_R = 0xB0E000000;还有调用board_nand_init函数,这个函数和芯片操作息息相关,也是设置nand_chip结构体,设置初始化好了NAND。

现在看看核心代码:先获取NAND的ID号的1st Cycle 和2nd Cycle,然后通过nand_flash_ids[]数组来匹配,找出我们芯片对应的成员:for (i = 0; nand_flash_ != NULL; i++) {if (tmp == nand_flash_ids.id) {type = &amp;nand_flash_ids;break;}}找出我们芯片对应的成员:{"NAND 2GiB 3,3V 8-bit", 0xD5, 0, 2048, 0, LP_OPTIONS}, nand_flash_ids[]结构体原型:struct nand_flash_dev {char *name;int id;unsigned longpagesize;unsigned long chipsize;unsigned longerasesize;unsigned long options;}; 再获取NAND的ID号的3st Cycle 和4nd Cycle,这次的数据主要是体现该芯片的内部信息,如页大小,有多少块等,然后用这些值来设置nand-&gt;ecc结构体:这里说明一下芯片内部一个信息:Cell Type:SLC / MLCbit2&amp;bit3表示的是芯片的类型,是SLC还是某种MLC:Bit2,bit3=0x00 :SLC,简单说就是内部单个存储单元,存储一位的数据,所能表示的数值只有0,1,也就需要两种不同的电压来表示,所以叫做2 Level的Cell。

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

移植u-boot-2012-10到tiny210v2(一)-----基本芯片介绍和启动流程介绍软硬件环境宿主机系统:Fedora10U-boot版本:U-boot-2012-10 板子芯片:S5PV210(Contex-A8),512M DDR2,512M SLC Nand交叉编译器:arm-linux-gcc-4.5.1-v6-vfp-20120301(支持armv7指令系统)1.写在前面的话Tiny210买回来好几个星期了,一直没有很认真的弄他,偶尔看看友善之臂提供的裸机程序。

本来买板子回来是要跑android系统的,还没有真正跑到那一步。

本来以为友善之臂会和mini2440一样提供U-boot源码,买回来发现啥都木有,只有一个superBoot。

superBoot确实很美,可是不是我们自己的,总觉得有点遗憾。

所以不想用superBoot来做Bootloader,想自己移植U-boot。

搜索了网上的一些帖子和博客。

对s5pv210的u-boot移植有两个人是连篇写的,写得也不错。

一个是在别人移植到mini210的u-boot 基础上改的,一个是移植到qt210的。

第一个是在别人修改的源码上修改的,没有了在原始代码上移植的滋味,并且我试过,我这边没法编译,悲催!第二个是在QT210上的,虽然芯片是一样的,可是按照他的步骤第一步我的程序就跑不起来。

哎!算了吧,还是靠自己吧!!!移植之前首先要准备几样东西,下面列个清单:①U-boot-2012-10的源代码,可以自行去http://ftp.denx.de/pub/u-boot/下载②arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz交叉编译器,友善之臂的光盘有提供③S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf,这个是S5PV210的启动流程文档,友善的光盘有提供在光盘的\No OS(裸机程序)\reference下④S5PV210_UM_REV1.1.pdf,S5PV210的datasheet,友善光盘有提供⑤s5pv210.h和mkv210_image.c,s5pv210.h是定义了s5pv210芯片地址的头文件,mkv210_image.c到我们制作spl的时候需要使用到。

这两个文件可以在友善之臂提供的光盘中找到,具体位置在\No OS(裸机程序)\src\6.sdram\BL1中就有这两个文件⑥准备一张4G的可用的SD卡和一块tiny210开发板。

在这一篇中不会涉及到U-boot的移植,只是做U-boot移植之前的一些基本前提知识的介绍,这样子我们进入U-boot的移植才会明白每一步是怎么走的,要不你总是拷贝别人的修改的代码来编译,就算能跑起来也不是你的。

2.S5PV210介绍S5PV210是三星的Contex-A8系列的一块芯片,属于ARMV7架构,如果你想了解Context-A8是啥,那你就得来了解ARM 的发展历程。

说起ARM那是一个大名鼎鼎的家伙,可能你们觉得手里拿着Iphone和IPad有多高级,可是别忘了,你拿着的这些东西的处理器都是ARM架构的,就算是Iphone5使用的自己的不标准的ARM架构的A6,可是还是ARM沾边的,可以说是盗版的ARM,至于三星,HTC,那就更加不用说了,都是用高通的ARM架构芯片比较多。

2011年的时候ARM在全球的移动设备市场上占据了90%以上的份额,简直就比Intel牛多了!不过两个不同的市场,没什么可比性。

听说最近Intel也在向移动设备靠近,不过被Android 搞个半死,因为Android开始设计就没把Intel纳入它使用的芯片范畴,对Intel是各种不支持,并且Intel使用CISC指令,功耗可想而知。

对于具体的ARM发展的历史和知识,请自行查看网络。

S5PV210的datasheet中有对它的基本架构的一些介绍,里面有这么一幅图从这张图中我们可以看出,对于S5PV210来说,除了内部的运算单元,两级高速缓存之外其他的部分都是属于核外部件,这跟S3C2440不一样,当然啦,要是一样,那就没必要换个名字了。

并且ContextA8具有32KB的一级缓存(Cache)和512K 的二级缓存,这是S3C2440没法比的。

如果你学过《计算机组成原理》,那么你就知道Cache对CPU来说是多么的重要的。

我们看到ContextA8有一个96K的iRam和一个64K的iRom。

这两个东西是干嘛用的呢,iRom是拿来存放ContextA8的启动BL0的,在出厂的时候由生产商固化在里面,iRam是ContextA8的内部RAM,这个才是真正意义上的内存,BL0会把BL1拷贝到iRam中运行,至于什么是BL0,BL1,下面会仔细介绍,这里不罗嗦。

然后剩下的就是memory管理接口,多媒体管理接口,电源管理接口等。

我们的芯片中有4个串口,3个IIC接口,2个SPI接口,有一个DSP和一个MFC还有2D,3D加速器。

有四个PLL升频锁相环路,用于为芯片提供CPU时钟和外设时钟。

支持MLC/SLC NAND接口和DDR2/LPDDR2接口。

再来看看ContextA8的Memory Map,datasheet有张图很清楚的介绍了我们看到IROM和IRAM是映射到了0x0000 0000 ~0x1FFF FFFF地址空间,如果你认真点看你会发现在0xD000 0000的位置还有一个IROM&amp;IRAM,这是为啥呢?如果你看下面你就知道其实我们的S5PV210的IROM是挂在了0x0000 0000这里,而IRAM呢是挂在了0xD000 0000这里的。

从0x2000 0000开始到0x7FFF FFFF是两个DRAM,1个512M一个1G。

具体其他的自己可以看datasheet,可以从这里看出我们的基本的一些外设是挂在哪个位置的。

接下来我们开始接触三星给我们提供的英文的S5PV210介绍文档,这个文档给我们介绍了iRom的基本程序和S5PV210的基本启动流程。

3. S5PV210启动流程这里首先假设你知道计算机的基本知识对系统和bootloader一点认识也没有。

这里讲的都是以S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf (以下简称SIAP)这个文档以及S5PV210的S5PV210_UM_REV1.1.pdf这个版本的datasheet作为根据的。

3.1板子是怎么启动起来的?平时我们开电脑的时候就是一按开关就开起来了,就这么简单!是的,就这么简单!可是作为一个嵌入式开发人员来说,你要是也是看到这么个表象的话,那肯定不行的,这些表面现象本来就不是做给你看的,是你要做给别人看的。

所以我们必须先要知道从我们给我们的板子一上电的瞬间开始,我们的程序是怎么跑起来的。

首先我们先来看看SIAN里面的一个图:对这个图,在SIAP里面有很详细的解析,在这个图中我们看以看出我们的S5PV210支持Nor Flash启动,eSSD启动,MMC启动,OneNand启动和Nand启动。

这里的启动代码分为三个部分,第一个就是BL0,第二个就是BL1,第三个就是BL2,这里的BL就是Bootloader的意思。

这些标着①②③的就是三星给我们的一个启动流程建议步骤,为啥说是建议的步骤呢?因为我们的启动有时候不一定按照它的建议来,不过流程是不变的,只是代码存放的地方要做一些调整。

我们先来看看这几个流程是怎么样子的,如果你喜欢自己看,请自己自行去看SIAP,里面说得很清楚,并且还有流程图。

第一步,开始运行IROM里面的BL0,这些代码是三星给我们固化好的,你想改或者想看,那么没门了,可是三星告诉了你它做了什么东西,我们看看三星是怎么说的:2.2 iROM(BL0) boot-up sequence (Refer 2.3 V210 boot-updiagram) 1. Disable the Watch-Dog Timer 2. Initialize the instruction cache 3. Initialize the stack region (see “memory map”on chap 2.5) 4. Initialize the heap regi on. (see “memory map” on chap 2.5) 5. Initialize the Block Device Copy Function. (see “Device Copy Function” on chap 2.7) 6. Initialize the PLL and Set system clock. (see “clock configuration” on chap 2.11) 7. Copy t he BL1 to the internal SRAM region (see “Device Copy Function” on chap 2.7) 8. Verify the checksum of BL1. If checksum fails, iROM will try the second boot up. (SD/MMC channel 2) 9. Check if it is secure-boot mode or not. If the security key value is writt en in S5PV210, It’s secure-boot mode. If it is secure-boot mode, verify the integrity of BL1. 10. Jumpto the start address of BL1 从这段英文介绍中我们可以看出BL0做的东西挺多了:关闭看门狗,初始化cache,初始化堆栈,初始化系统时钟,拷贝BL1到IRAM中运行等并且我们知道它为我们提供了好几个拷贝函数,这些函数我们在后面会使用到,既然三星提供给我们了,我们就不用自己写的,何乐而不为呢是吧。

可是这里有一个很重要的信息我们没有读取到,三星也没有明显提及,就是我们的BL1该有多大呢?总不可能无限大的,因为我们的IRAM就只有96K,撑死让你全用了,也就是96K。

在网络上也存在两种说法,一个说是16K,一个说是8K。

到底是多少k呢?这个问题我也说不准,不过我觉得应该是8K,为什么呢,我们来看SIAN里面的一个memory map的图这个是我们上面说的那个全部memory map的一部分,就是我们IROM和IRAM的那两个部分,IROM我们就不看的,我们来看IRAM的,我们可以看到从0xD002_0000开始到0xD003_5400这8K的空间中包含了BL1和Reserved,那么我觉得BL1最大只能是8K。

相关文档
最新文档