要研究裸机程序的编写,必须要有一个“全裸”的环境。友善提供的superboot可以提供执行用户自定义程序的能力,但其实这样运行的程序环境还是依赖于superboot的, 那些内存初始化、时钟初始化,串口初始化等工作都已经由superboot做了。tiny6410支持nandflash和sd卡启动两种模式,nandflash的烧写还是依赖superboot,所以比较简便的方法是通过sd卡启动,superboot本身也是通过sd卡启动的。
从网上搜了一下这方面的资料,主要参考文章来来去去就几篇, 三星的S3C6410_Internal_Rom_Booting.pdf是一份比较有用的资料,当然还有其中一些文章也比较有用,例如djyos的sd卡启动试验。这些文章描述s3c6410的要点总结如下:
(1) s3c6410启动过程分成BL0, BL1, BL2几个阶段, 其中BL0是固化在s3c6410内部的IROM中的, 该段程序根据所选择的启动模式从存储介质加载BL1. s3c6410支持从多种存储介质中启动,nandflash, sd卡,sdhc卡,OneNand, MoviNand.... BL1和BL2存储于这些存储介质中。这里我主要关注sd和sdhc卡.
(2) BL0在加载BL1前已经做了很多工作,sd控制器初始化,关闭看门狗等。