7.NandFlash块设备驱动-- 三:NAND FLASH驱动程序测试

1.编译启动内核

1.1 重新设置编译内核(去掉默认的nand flash驱动)

make menuconfig ,进入menu菜单重新设置内核参数:

进入-> Device Drivers-> Memory Technology Device (MTD) support-> NAND Device Support

< >   NAND Flash support for S3C2410/S3C2440 SoC    //去掉默认的nandflash驱动

然后make uImage 编译内核

将新的nandflash驱动模块放入nfs文件系统目录中

1.2然后烧写内核,启动内核

如下图,发现内核启动时,卡住了,是因为我们使用的文件系统是存在nand flash上
在这里插入图片描述
所以设置为nfs文件系统才行.

2.挂载nand flash 驱动
2.1如下图,可以看到共添了4个分区: bootloader、params、kernel、root、

刚好对应了程序中的mynand_part数组里面的分区信息
在这里插入图片描述
2.2 如下图,可以看到/dev下共创建了4个MTD块设备(mtdblock%d),4个MTD字符设备(mtd%d、mtd%dro)
在这里插入图片描述
2.3 如下图,使用cat /proc/partitions ,可以看到分区信息
在这里插入图片描述
其中blocks表示分区的容量,每个blocks是1KB

  1. 使用mount来挂载mtd块设备
 mount /dev/mtdblock3        /mnt/             //挂载, mount会自动获取该设备的文件类型

在这里插入图片描述

二.使用mtd-util 工具擦除mtdblock3(使用nand之前最好擦除一次)

因为flash的特性如下:
写入,只能把数据(bit)从1改为0;
擦除,只能把所有数据(bit)从0改为1。
所以,要想写入数据之前必须先擦除。因为flash只能写0,写1时其实是保持原来的状态。
1.1 使用mtd-util工具步骤如下:

tar -xjf mtd-utils-05.07.23.tar.bz2           //解压mtd-util工具
cd mtd-utils-05.07.23/util /                   //进入util目录
vi Makefile                                     //修改交叉编译改为: CROSS=arm-linux-
make                                          //编译,生成flashcp 、flash_erase、flash_eraseall等命令
cp  flash_erase  flash_eraseall  /nfs文件系统目录   //复制命令

1.2mtd-util工具的常用命令介绍

命令:flashcp

作用: copy数据到 flash 中

实例:

./flashcp   fs.yaffs2  /dev/mtd0      //将文件系统yaffs2复制到mtd0中

命令:flash_erase
常用参数:

-j  使用jffs2来格式化分区
-q  不打印过程信息

作用:擦除某个分区的指定范围 (其中指定位置必须以0x20000(128K)为倍数)

实例:

./flash_erase  /dev/mtd0 0x20000 5   //擦除mtd0从0x20000开始的5块数据 ,128K/块

命令**:flash_eraseall**
常用参数:

-j  使用jffs2来格式化分区(对于norflash才加该参数)

-q  不打印过程信息

作用:擦除整个分区的内容

实例:

./flash_eraseall  -q /dev/mtd0        //擦除mtd0,并不打印过程信息

1.3为什么这里的实例都是对mtd字符设备进行操作,而不是mtdblock块设备?

因为每个分区的字符设备,其实就是对应着每个分区块设备。即/dev/mtd3对应/dev/mtdblock3

flash_eraseall, flash_erase那些命令是以ioctl等基础而实现, 而块设备不支持ioctl, 只有字符设备支持

1.4 使用flash_eraseall来擦除分区3

umount /mnt                                             //擦除之前需要使用umount mnt来取消之前的挂载
./flash_eraseall  /dev/mtd3                             //擦除mtd3
mount -t yaffs /dev/mtdblock3 /mnt/                     //使用yaffs类型来挂载mtdblock3块设备
                                  //因为当前的mtdblock3为空,mount命令无法自动获取mtdblock3的文件类型
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20191222202528695.png)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值