主题 : Barebox for tiny 210 - step 5 NAND驱动 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 54261
精华: 9
发帖: 43
金钱: 665 两
威望: 133 点
贡献值: 9 点
综合积分: 266 分
注册时间: 2011-08-27
最后登录: 2014-08-08
楼主  发表于: 2013-01-13 22:14

 Barebox for tiny 210 - step 5 NAND驱动

管理提醒: 本帖被 xoom 执行加亮操作(2013-01-14)
返回学习汇总贴
苦逼日子...继续连载...

自己写的NAND驱动,支持1位和8位ECC

0.开始之前:
    (1) 了解NAND及ECC原理
    (2) 了解MTD NAND驱动框架
    (3)掌握 Barebox for tiny 210 - step 4

1.编译运行
    (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重新编辑 ]
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2013-01-14 07:33
你的系列文章写的非常好,感谢你的分享。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
2楼  发表于: 2013-01-15 12:37
路过 顶
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
贡献值: 5 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
3楼  发表于: 2013-01-16 19:16
跪求大神建个群一起学习啊
好好学习,天天鲁管
级别: 侠客
UID: 54261
精华: 9
发帖: 43
金钱: 665 两
威望: 133 点
贡献值: 9 点
综合积分: 266 分
注册时间: 2011-08-27
最后登录: 2014-08-08
4楼  发表于: 2013-01-16 20:01
这个是官方群吧:
    
友善之臂210群 <73255115>