Chinaunix首页 | 论坛 | 博客
  • 博客访问: 383407
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: LINUX

2013-04-30 20:41:37

刚才我们是把内核下载到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写进去


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


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

阅读(2175) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

Dahuanxihuopusa2013-05-09 16:56:40

MRX220517:楼主,我想知道
不同的根文件nand write.jffs2 30000000 0 $(filesize)
30000000这个地址怎么计算啊

这个30000000 是上一步,把根文件系统镜像下载到ram的 ram地址。

后面的0 是烧写到nandflash的地址。(从nandflash启示地址的偏移量,是个相对地址)
烧写的内容大小是后面的 $(filesize)

回复 | 举报

MRX2205172013-05-08 17:44:38

楼主,我想知道
不同的根文件nand write.jffs2 30000000 0 $(filesize)
30000000这个地址怎么计算啊