uboot 添加nandflash支持,linux内核烧写进nandflash,从nandflash提取并启动

2340阅读 2评论2013-04-30 Dahuanxihuopusa
分类:LINUX

刚才我们是把内核下载到SDRAM中直接运行,现在我们把内核烧写进nandflash,明显的,我们需要对u-boot 添加nandflash支持.

通过前面我们可以看到我们需要提过对nandflahs

1,初始化

2,

3,

4,

这几种基本的操作

同时由于我们的代码要同时支持24102440 所以我们跟上面 nandflash裸机代码一样,准备了两套代码,然后又使用了个公共入口,公共入口和具体两套代码的哪一套关联起来,再初始化nandflash后以结构体赋值的形式确定.



修改1)

我们实现的代码在 cpu/arm920t/s3c24x0/nand_flash.c,包括上面4个基本的操作,其中初始化的函数是 board_nand_init()

创建nand_flash.c文件,把代码写上

修改2)

修改所在目录下的makefile

COBJS = i2c.o interrupts.o serial.o speed.o \

usb_ohci.o nand_flash.o

添加红色的内容

修改3)

然后要添加NAND 操作命令

include/configs/btq2440.h

CFG_CMD_NAND

把这行的注释取消掉

然后就可以了.

修改4)

要在include/s3c24x0.h 中定义这个nandfalsh控制器的SFR的对应结构体


/* NAND FLASH (see S3C2440 manual chapter 6) */

typedef struct {

S3C24X0_REG32 NFCONF;

S3C24X0_REG32 NFCONT;

S3C24X0_REG32 NFCMD;

S3C24X0_REG32 NFADDR;

S3C24X0_REG32 NFDATA;

S3C24X0_REG32 NFMECCD0;

S3C24X0_REG32 NFMECCD1;

S3C24X0_REG32 NFSECCD;

S3C24X0_REG32 NFSTAT;

S3C24X0_REG32 NFESTAT0;

S3C24X0_REG32 NFESTAT1;

S3C24X0_REG32 NFMECC0;

S3C24X0_REG32 NFMECC1;

S3C24X0_REG32 NFSECC;

S3C24X0_REG32 NFSBLK;

S3C24X0_REG32 NFEBLK;

} /*__attribute__((__packed__))*/ S3C2410_NAND;


include/s3c2440.h 中定义取得这个SFR列表首地址的两个定西

一个是宏定义首地址

#define S3C2440_NAND_BASE 0x4E000000

一个是取得这个地址的函数

static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)

{

return (S3C2440_NAND * const)S3C2440_NAND_BASE;

}

修改5)

需要在 include/configs/btq2440.h 中定义几个宏

最后添加

#define CFG_NAND_BASE 0

#define CFG_MAX_NAND_DEVICE 1

#define NAND_MAX_CHIPS 1


说说关于nandflash 代码的使用:

关于u-boot的使用,主要有两个


1)一个是我们烧写各种各样的内容到nandflash, 比如裸机代码(小于4KB的时候,比较好用),或者Linux内核,或者根文件系统

2)再一个是我们如果把u-boot烧写到nandfalsh,那么我们的u-boot启动的时候我们要使用CopyCode2SDRAM,u-boot自身从nandflash拷贝到SDRAM,这个可以看裸机代码那,也可以看其他的u-boot

研究一下


从新把u-boot 烧写进nor flash

启动后,下载内核

tftp 30000000 uImage

nand erase 0 200000 (nand flash 0x0 – 0x200000 2Mnandflash擦掉(前提是我们的uImage小于2M))


nand write.jffs2 30000000 0 $(filesize)

注意的是,write.jffs2这个是说明,我们写入的格式是jffs2,不是把jffs2写进去


写入的内容是第三个参数 ,这个地址处开始的内容..


重新开机,正常启动引导内核,还是在挂载根文件系统的时候失败了,继续走,我们搞根文件系统

上一篇:linux移植 下载到内存中跑起来
下一篇:移植nandflash

文章评论