Linux移植总结--uboot从不同介质上启动分析

@

1、启动地址

先以2440开发板为例,SDRAM(0x30000000--0x34000000) 共64MB。
在这里插入图片描述

uboot中一般设置uboot启动地址为:TEXT_BASE=0x33F80000。该地址是uboot正式运行起来后的地址,但刚开始的汇编阶段代码并不是在该地址上运行的 ,看下面的分析。

2、uboot占用内存

从0x33F80000--0x34000000,相当于在SDRAM最高段地址给了uboot 512KB空间,老版的uboot一般占用300KB,够用了。
如果新版uboot较大,就需要给uboot留更大空间,例如1MB,那么就可以根据自己的SDRAM修改TEXT_BASE。

3、2440从NAND启动

开发板配置为从NAND启动,物理0地址处会链接到4KB的Boot Internal SRAM(硬件实现,这段内存怎么叫也是随意的)(这里没用"映射"用的"链接",是怕理解为MMU映射了);
上电会将NAND FLASH前4KB的代码拷贝到Boot Internal SRAM(硬件实现)(0--0x1000);
从0地址开始运行uboot汇编阶段的代码;
汇编代码会把NAND FLASH中完整的uboot代码拷贝到SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。

4、2440从NOR启动

配置为从NOR启动,物理0地址处会链接到NOR FLASH(硬件实现);
上电后NOR FLASH上的uboot代码可以直接运行;
当然,汇编阶段的代码还是会把NOR FLASH中完整的uboot代码拷贝到SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。

5、某开发板从SPI FLASH启动

某开发板物理0地址处挂了一块小内存SDRAM,物理高地址处挂了块大内存SDRAM,存储芯片为SPI FLASH
上电会将SPI FLASH中的uboot完整代码拷贝到SDRAM上运行(硬件实现);
然后,汇编阶段代码会把小内存SDRAM中完整的uboot代码拷贝到大内存SDRAM上,地址为TEXT_BASE,完成后就跳转到SDRAM运行。注意该阶段,软件实现的并不是从SPI FLASH将代码拷贝到大内存SDRAM,因为软件操作SPI需要初始化SPI 控制器和SPI FLASH芯片,然而汇编阶段软件还没初始化这俩。

posted @ 2022-03-02 09:57  solonj  阅读(275)  评论(0编辑  收藏  举报