NorFlash可以支持随机访问,所以代码是可以直接在Flash上执行的。
Bootloader一般放在Flash的顶端或者底端,这要根据处理器的复位向量设置。要使Bootloader的入口位于处理器上电执行的第一个条指令的位置。
接下来分配参数区,这里可以作为Bootloader的参数保存区域。
再接下来内核映像区。Bootloader引导Linux内核,就是要从这个地方把内核映像解压到RAM中去,然后跳转到内核映像入口执行。
然后是文件系统区,如果使用Ramdisk文件系统,则需要Bootloader把它解压到RAM中。如果使用JFFS2文件系统,将直接挂接为根文件系统。
最后还可以分出一些数据区,这要根据实际需要和Flash大小来考虑了。
这些分区是开发者定义的,Bootloader一般直接读写对应的偏移地址。到了Linux内核空间,可以配置成MTD设备来访问Flash分区。
但是,有的Bootloader也支持分区的功能,例如:Redboot可以创建Flash分区表,并且内核MTD驱动可以解析出redboot的分区表。
除了NorFlash,其他的flash芯片一般通过专用控制器的IO方式来访问,不能随机访问,因此引导方式与NorFlash方式也不同。在这些芯片上,需要配置专用的引导程序。通常,这种引导程序起始的一段代码就吧整个引导程序复制到RAM中运行,从而实现自举启动,这跟从磁盘上启动有写相似。