最简单的bootloader需完成两个主要任务
1.memory的重新映射
2.下载kernel到sdram
系统上电之后首先执行的是物理地址0x0的代码,所以一般情况bootloader的代码要烧录在0x0的地址处,一般为flash存储器,
例如:
有2段存储器flash和sdram,分别在0x0-0x4000000 64M, 0x4000000-0x80000000 64Msdram,板子上电后只有flash可用,先不考虑片内内存,所以要做一下几个工作
1.初始化sdram,根据system manager寄存器,把sdram map到 0x4000000-0x80000000,使得flash和sdram在物理上连续,现在程序时在flash里面运行的。
2.把flash里面的bootloader拷贝到sdram的最低端。
4.通过system manager寄存器设置,重新map这两段内存,把flash映射到0x4000000-0x80000000 ,把sdram映射到0x0-0x4000000 ,此时程序时在sdram里面运行的。
5. LDR pc, =load_kernel,转到c语言处,load nernel进sdram的设定位置。
如要支持网络下载,需要添加tcp/ip协议栈