u-boot-2016.01移植笔记之支持nandflash

当我们打开开发板,它打印出来的信息上面写着nand:0b这就代表u-boot目前还不支持这个板子上的nandflash,所以我们看board_r.c文件中的board_init_r函数中init_sequence_r数组里有个initr_nand函数,我们点进去有个nand_init,再进,可以看到这个函数

u-boot-2016.01移植笔记之支持nandflash_第1张图片

它执行的是nand_init_chip(i)函数,“CONFIG_SYS_NAND_SELF_INIT”发现是未定义所以不执行board_nand_init追踪进去我们可以看到


u-boot-2016.01移植笔记之支持nandflash_第2张图片

这两个函数,第一个是对nandflash进行初始化的,第二个是分辨出nandflash的型号以及大小的我们先进去第一个函数看看,进去后可以看到这个函数是对nand进行初始化,设置时序以及发送命令,这个函数只是针对2410的,所以我们要先复制s3c2410.c命名为s3c2440.c,再进入drivers\mtd\nand\Makefile中添加这个文件

u-boot-2016.01移植笔记之支持nandflash_第3张图片

我们再进去2440的这个文件,进入刚才的函数,这个函数现在是针对2410的所以我们要对其进行改动先把时序参数改为如下


添加宏定义


这个宏是2440中ALE和CLE的偏移地址,和2410的略微有所不同

我们继续看,下面一段是对soc的nand控制器进行初始化,然而2410和2440的nand寄存器是不一样的所以底下的一段我们都不要了,改成我们自己的改成如下

u-boot-2016.01移植笔记之支持nandflash_第4张图片

这样我们才设置对nand控制器。这里有个“s3c2440_nand_select”函数,这个函数是我们自己写的,(其实可写可不写,其实对这种移植方法这个函数是没起到作用的)

s3c2440_nand_select函数内容如下

u-boot-2016.01移植笔记之支持nandflash_第5张图片

 还有一个函数我们需要改动

u-boot-2016.01移植笔记之支持nandflash_第6张图片

这个函数是能否启动nandflash的关键函数,改动完这个函数之后我们就大致改动完毕了

我们接着要把配置文件定义2440的nand,我们先看smdk2440.h,这个配置文件有一个“#define CONFIG_CMD_NAND”

    底下还有一句

u-boot-2016.01移植笔记之支持nandflash_第7张图片

我们要改成

u-boot-2016.01移植笔记之支持nandflash_第8张图片

这样再编译就能支持我们的nandflash了

你可能感兴趣的:(u-boot)