常见的嵌入式系统,都是从nor flash启动,然后对应的uboot是放在nor flash里面的。
一般nor flash,容量相对较小,只有512KB等,有的大的一点的是1MB,2MB之类的。
一般的情况是,uboot大约有200多KB,而linux的kernel镜像文件,比如我遇到过的,大约在1M左右。
所以,对于这些稍微大一些的Nor Flash,往往除了放了uboot的代码之外,还可以放linux的kernel。
如果是小的Nor Flash,那么往往是把kernel放在Nand Flash的某个分区。
而此处用mtd工具升级linux的前提之一,是你linux系统中,已经实现了对应的nand flash的驱动。而对于nor flash驱动的话,如果还没有实现对应驱动,那么就先去实现对应的nor flash驱动。
下面这里只是对于如何实现普通的nor flash驱动,就我接触到的相关内容,给出一些提示。
对于常见的spi接口的nor flash来说,如果你的nor flash型号是常见的型号,那么很可能你不用另外单独再自己完全从头写一个完整的nor flash驱动了。
关于不同的接口的Nor Flash之间的区别,不了解的可以参考:CFI Flash, JEDEC Flash ,Parellel Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系和CFI(Common Flash Interface)详解
因为,往往你的linux中已经实现了spi驱动的,所以此时,你只需要做下面两件事情,一个是在板子相关部分,添加对应nor flash对应的初始化代码,二是利用linux默认自带的,对于常见nor flash都已经默认支持的nor flash驱动:m25p80.c
下面分别详细解释。