兰州拉面的蛋炒饭与沙县小吃的蛋炒饭是两种不同的蛋炒饭。虽然都有饭与蛋,但是沙县小吃了里面有酱油,而兰州拉面里面有胡萝卜。
同理可证,ARM的bootloader与X86的bootloader都有引导内核的作用,都有stage1与stage2,但是arm的stage1的大小限制是4K,而x86的是512字节,ARM更多的是硬件初始化,而X86更多的是硬盘的检查。
ARM的stage1的第一个我猜想是00~1C这是8个中断向量表,主要是PC遇到问题时会变成00,04,08,0C,10,14,18,1C,其次是设置系统为管理模式,再者在管理模式下,屏蔽所有中断,关掉看门狗,然后是设置好CPU的频率,毕竟没有初始化之前,是用外部10M的频率进行干活,速度不快,然后是设置串口用来打印消息,和LED用来显示程序运行到哪一步。
接下来主要是对SDRAM进行初始化,然后把整个BOOTLOADER拷贝到SDRAM里面,然后是设置好相应模式下的堆栈,最后是跳转到stage2的入口。
然后512字节的主引导扇区没那么复杂,前面的硬件初始化已经由BIOS给完成了,只需要查看硬盘分区,然后引导到次分区引导程序。
下面这张图是凌晨做的,有些地方还是对不上说明书。