返回学习汇总贴苦逼日子...继续连载...
自己写的NAND驱动,支持1位和8位ECC0.开始之前:
(1) 了解NAND及ECC原理
(2) 了解MTD NAND驱动框架
(3)掌握
Barebox for tiny 210 - step 41.编译运行
(1) 更新源码到对应版本
cd ~/s5pv210/github/loader/barebox
git checkout 6f9e1910d5ea3f353f06e178b2af493503ad357b
(2) 编译8位ECC版本
在文件drivers/mtd/nand/nand_s5pv210.c中定义宏#define CONFIG_S3C_NAND_USE_8BIT_ECC,选择8位ECC
cp arch/arm/configs/friendlyarm_tiny210_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
禁用General Settings -> [ ]run machine low-level init
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
cp barebox.bin /srv/tftp/barebox-8bit-ecc.bin
编译生成的的barebox.bin读写NAND时采用8位ECC,拷贝到tftp根目录,改名为barebox-8bit-ecc.bin
(3) 编译1位ECC版本
屏蔽#define CONFIG_S3C_NAND_USE_8BIT_ECC宏,选择1位ECC
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
cp barebox.bin /srv/tftp/barebox-1bit-ecc.bin
编译生成的的barebox.bin读写NAND时采用1位ECC,拷贝到tftp根目录,改名为barebox-1bit-ecc.bin
(3) 运行8位ECC版本
从SD卡启动单板(继续使用step 3烧写的Barebox版本),用网线直接连接电脑与单板
将电脑IP地址设置为192.168.0.10,255.255.255.0
通过串口终端执行下边两条命令,下载并运行barebox-8bit-ecc.bin
cp /mnt/tftp/barebox-8bit-ecc.bin /dev/ram0 && go /dev/ram0
通过串口终端执行以下命令,分别对NAND第0块及第1块进行读写测试
nandtest -o 0 -l 0x20000 -s 43 -t /dev/nand0
nandtest -o 0x20000 -l 0x20000 -s 43 -t /dev/nand0
-o 测试起始地址,必须块对齐
-l 测试长度,必须块对齐
-s 随机数种子,用于产生写入NAND的数据
详见commands/nandtest.c
通过串口终端执行以下命令,读出一页NAND数据
nanddump -b 0 #读nand设备,main area,带ECC
nanddump -b 0 -o #读oob设备,spare area,无ECC
nanddump -b 0 -r #读raw设备,main area & spare area,无ECC
-b 指定读哪块,默认为0
-p 指定读块内哪页,默认为0
-d 指定读哪个设备
-o 读oob设备
-r 读raw设备
详见commands/nanddump.c
(4) 运行1位ECC版本
通过串口终端执行下边两条命令,下载并运行barebox-1bit-ecc.bin
cp /mnt/tftp/barebox-1bit-ecc.bin /dev/ram0 && go /dev/ram0
通过串口终端执行以下命令,尝试读取第1块第0页,由于第(3)步写入了8位ECC,所以1位ECC读操作失败
nanddump -b 1
通过串口终端执行以下命令,对第1块进行读写测试
nandtest -o 0x20000 -l 0x20000 -s 43 -t /dev/nand0
详见commands/nandtest.c
通过串口终端执行以下命令,读出一页NAND数据
nanddump -b 1 #读nand设备,main area,带ECC
nanddump -b 1 -o #读oob设备,spare area,无ECC
nanddump -b 1 -r #读raw设备,main area & spare area,无ECC
详见commands/nanddump.c
(5)
继续之前 研读源码,弄清MTD驱动框架,学习编写NAND驱动的一般方法:
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_write.c
drivers/mtd/nand/nand_hwecc.c
研读源码,弄清mtdraw/mtdoob设备文件原理及功能:
drivers/mtd/mtdraw.c
drivers/mtd/mtdoob.c
commands/nanddump.c
阅读源码,分析两个“BUG”:
drivers/mtd/core.c
drivers/mtd/mtdoob.c
drivers/mtd/mtdraw.c
使用nanddump工具研究友善superboot、kernel、filesystem分别采用什么类型的ECC
2.代码分析
拒绝贴代码刷字数,感兴趣的建议看
github commit记录。
[ 此帖被mei5150在2013-04-13 20:45重新编辑 ]