安装mtd相关命令

手动安装mtd-utils,根据系统自行选择

mtd交叉编译:https://blog.csdn.net/zhangxuechao_/article/details/52124424

系统flash操作命令

# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "boot"
mtd1: 00100000 00020000 "kernel"
mtd2: 00580000 00020000 "roofs"
mtd3: 00900000 00020000 "app"
# flash_erase device [start] [cnt]
# flash_erase /dev/mtd0 0×40000 5

start:起始位置。必须为0x20000(128K)的整数倍

cnt:块数

# flash_eraseall [OPTION] device
# flash_eraseall -j /dev/mtd0

-j,jffs2:jffs2格式化分区

-q,quiet:不显示打印信息

# flash_eraseall -j -q /dev/mtd0 = flash_erase /dev/mtd0 0 0

新版擦除整个设备,已建议使用flash_erase

# mount -t jffs2 /dev/mtdblock0 /mnt

挂载mtd设备。mtdblock只用于挂载,/dev/mtd操作实际就是操作/dev/mtdblock

# flashcp <filename> <device>
# flashcp fs.jffs2 /dev/mtd0
# mtd_debug info <device>
# mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags =
mtd.size = 12582912 (12M)
mtd.erasesize = 131072 (128K)
mtd.oobblock = 1
mtd.oobsize = 0
mtd.ecctype = (unknown ECC type - new MTD API maybe?)
regions = 0
# mtd_debug read /dev/mtd2 0 100 file.dest

uboot flash操作

对Nand flash对应mtd分区擦除时。擦除要擦除整个设备大小;写要写jffs2文件系统大小。不然数据可能会有问题,可能原因是jffs2格式写入位置

# nand erase 0x4100000 0x200000 //擦除整个mtd分区2M
# nand write 0x6000000 0x4100000 0x20000 //写入128K

uboot flash按分区操作

> mtd

device nand0 <nandflash0>, # parts = 4
#: name size offset mask_flags
0: bootloader 0x00040000 0x00000000 0
1: params 0x00020000 0x00040000 0
2: kernel 0x00200000 0x00060000 0
3: root 0x0fda0000 0x00260000 0 > nand erase root NAND erase: device 0 offset 0x260000, size 0xfda0000
Erasing at 0xffe0000 -- 100% complete.
OK > nand write.jffs2 0x3000000 root NAND write: device 0 offset 0x260000, size 0xfda0000
0xfda0000 bytes written: OK

filesize文件大小

> nand write.jffs2 0x3000000 0x260000 $(filesize)

NAND write: device 0 offset 0x260000, size 0x15787a8

Writing data at 0x17f8000 -- 100% complete.
22513576 bytes written: OK

举例

#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include "mtd-user.h" int non_region_erase(int fd, int start, int count, int unlock)
{
mtd_info_t meminfo; if(ioctl(fd, MEMGETINFO, &meminfo) == 0)
{
erase_info_t erase;
erase.start = start;
erase.length = meminfo.erasesize; for(; count > 0; count--)
{
printf("\rPerforming Flash Erase of length %u at offset 0x%x\n", erase.length, erase.start); fflush(stdout); if(unlock != 0)
{
//unlock the sector first
printf("\rPerforming Flash unlock at offset 0x%x\n", erase.start); if(ioctl(fd, MEMUNLOCK, &erase) != 0)
{
perror("MTD Unlock failure");
close(fd);
return -1;
}
} if(ioctl(fd, MEMERASE, &erase) != 0)
{
perror("MTD Erase failure");
close(fd);
return -1;
} erase.start += meminfo.erasesize;
} printf("done!\n");
} return 0;
} int main(int argc, char *argv[])
{
int fd, ret, i;
struct mtd_info_user info; // Open the device
if((fd = open("/dev/mtd5", O_RDWR)) < 0)
{
fprintf(stderr, "File open error\n");
return -1;
}
else
{
ioctl(fd, MEMGETINFO, &info);
printf("info.size=%d\n", info.size);
printf("info.erasesize=%d\n", info.erasesize);
printf("info.writesize=%d\n", info.writesize);
printf("info.oobsize=%d\n", info.oobsize);
} struct stat st; //check is a char device
ret = fstat(fd, &st); if(ret < 0)
{
printf("fstat %s failed!\n", FLASH_DEV_NAME);
close(fd);
return -1;
} if(!S_ISCHR(st.st_mode))
{
printf("%s: not a char device\n", FLASH_DEV_NAME);
close(fd);
return -1;
} #if 0 ret = non_region_erase(fd, 0, 1, 0); if(ret < 0)
{
return -1;
} #endif char *pReadBuf;
int nReadBytes; nReadBytes = info.erasesize;
pReadBuf = malloc(nReadBytes);
memset(pReadBuf, 0, nReadBytes);
ret = read(fd, pReadBuf, 256);
printf("%s--read %d bytes from mtd\n", __func__, ret); for(i = 0; i < ret; i++)
{
printf("%02x,", *(pReadBuf + i));
} printf("\n"); free(pReadBuf);
}

详细操作,参考mtd源码mtd_debug.c

mtd设备操作、jffs2的更多相关文章

  1. 已有 JFFs2文件系统的修改

    项目应用中,对于前人留下的JFFS2的文件,有时候我们需要修改,但是苦于没有源文件,实际操作很多时候无所适从.每次支持生产之后再进行人为的升级.这样费时费力,也给生产人员增加了负担. 为了解决这个问题 ...

  2. Linux UBI子系统设计初探

    问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...

  3. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

  4. 关于linux下的嵌入式文件系统以及flash文件系统选择

    嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件 ...

  5. ltp-ddt 加入sram 需要修改的部分

    ./platform/fmxx-psoc-db add sram 将nor部分移植过来 # @name NOR read write test using dd # @desc Perform NOR ...

  6. linux内核中mtd架构分析

    一. 引言 MTD(memory technology device内存技术设备)是用于访问memory设备(RAM.ROM.flash)的Linux的子系统.MTD的主要目的是为了使新的memory ...

  7. jffs2文件系统制作

    内核:                linux-3.0 uboot:             2010.09 开发板:             fl2440 交叉编译器:         2011. ...

  8. 嵌入式: jffs2,yaffs2,logfs,ubifs文件系统性能分析

    在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaf ...

  9. s3c2440 移值u-boot-2016.03 第6篇 支持mtd yaffs 烧写

    1, 解决启动时的错误 Warning - bad CRC, using default environment 搜索发现 在 /tools/env/fw_env.c 中 /* 放在NAND FLAS ...

随机推荐

  1. uniapp - 关于调试跨域

    [] 1.右键Chrome图标 2.选中属性(R) 3.在目标(T) chrome.exe后添加 --disable-web-security --user-data-dir --allow-runn ...

  2. checkbox与label内的文字垂直居中的解决方案

    <label style="float:left;margin-top:5px;margin-left:10px;cursor:pointer"><input t ...

  3. Spring中查看加载配置文件中 加载类的个数及详情

    断点到: org.springframework.beans.factory.support.DefaultListableBeanFactory#getBeanDefinitionCount 显示该 ...

  4. 在Linux下运行引入了外部jar包的java程序

    如图:H.java里引入了commons-io-2.2.jar 代码如下: import org.apache.commons.io.IOUtils; public class H{ public s ...

  5. LIST<>泛型集合取得对象的属性值

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. [LeetCode] 235. Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  7. idea2018.1.1版激活码到2020.7

    N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjoid3UgYW5qdW4iLCJhc3NpZ25lZU5hbWUiO ...

  8. 【转】Fuel-Openstack的搭建(一)

    原文链接:https://blog.csdn.net/qq_35180983/article/details/82181496 2.1安装前的准备操作: 首先,我们需要准备以下操作: 2.1.1 下载 ...

  9. QML CheckBox的使用

    "人类的全部历史都告诫有智慧的人,不要笃信时运,而应坚信思想. -- 爱献生" 这个在QT creator 帮助文档中非常容易查到. Import Statement: impor ...

  10. 【剑指offer】面试题 31. 栈的压入、弹出序列

    面试题 31. 栈的压入.弹出序列 NowCoder LeetCode 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如 ...