mtd设备操作、jffs2

news/2024/12/4 17:35:15/

安装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按分区操作

> mtddevice nand0 <nandflash0>, # parts = 4#: name                        size            offset          mask_flags0: bootloader          0x00040000      0x00000000      01: params              0x00020000      0x00040000      02: kernel              0x00200000      0x00060000      03: root                0x0fda0000      0x00260000      0> nand erase rootNAND erase: device 0 offset 0x260000, size 0xfda0000                                         
Erasing at 0xffe0000 -- 100% complete.
OK> nand write.jffs2 0x3000000 rootNAND write: device 0 offset 0x260000, size 0xfda00000xfda0000 bytes written: OK

filesize文件大小

> nand write.jffs2 0x3000000 0x260000 $(filesize)NAND write: device 0 offset 0x260000, size 0x15787a8Writing 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 firstprintf("\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 deviceif((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 deviceret = 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 0ret = non_region_erase(fd, 0, 1, 0);if(ret < 0){return -1;}#endifchar *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


http://www.ppmy.cn/news/188822.html

相关文章

mtd

1.Linux-MTD Subsystem FLASH在嵌入式系统中是必不可少的&#xff0c;它是bootloader、linux内核和文件系统的最佳载体。在Linux内核中引入了MTD子系统为NOR FLASH和NAND FLASH设备提供统一的接口&#xff0c;从而使得FLASH驱动的设计大为简化。 在引入MTD后Linux系统中FLAS…

MDFN-2

这个之前也发过哦... 深度特征学习方案将重点从具有细节的具体特征转移到具有语义信息的抽象特征。它通过构建多尺度深度特征学习网络 (MDFN) 不仅考虑单个对象和局部上下文&#xff0c;还考虑它们之间的关系。多尺度特征学习才是目标检测精髓 上一回的结论是浅层和深层的特征…

.md文件的打开

今天终于知道.md文件是markdown格式的了&#xff0c; windows下可以安装markdownpad来打开md文件&#xff1a; http://blog.csdn.net/github_35160620/article/details/52158604 ubuntu下则可安装retext&#xff0c;查看时 retext xxx.md即可 例子&#xff1a; ubuntu下&…

什么是MDM

MDM或移动设备管理是一种软件应用程序&#xff0c;用于管理企业中的终端&#xff0c;如笔记本电脑、智能手机、平板电脑等。随着越来越多的员工使用这些设备&#xff0c;各种形式和规模的企业现在都转向移动设备管理&#xff0c;以增强数据安全性并提高生产力。 MDM是什么意思…

vs MD /MDD /ML /MT /MTD的简单介绍

1、MD /MDD /ML /MT /MTD的简单介绍 在编译ATL工程后&#xff0c;生成的dll在本电脑上能用&#xff0c;在别人的电脑上不能用。通过Depends工具分析一下&#xff0c;原来是编译选项没有选对&#xff0c;别的电脑上没有我生成的dll需要的基础dll文件&#xff0c;选成静态链接库就…

.md文件是什么?.md如何打开?怎么打开?

可能有些朋友会看到以md为结尾的文件&#xff0c;但是不知道用什么打开。下面就来说一下.md文件如何打开&#xff0c;markdown文件用什么打开。 1、首先来普及一下什么是md文件&#xff0c; md全称markdown&#xff0c;markdown也是一种标记语言。   2、md文件其实可以用常用…

02 MDTD

Complexity of Testing Software the term correctness has no meaningInstead considering reliability, safety, maintainability, security, and efficiency 关于正确性 更多是用来描述古典科学 数学模型正确。。。。 Better viewpoint: a relative term — program P is…

【STL】stack、queue基本使用和模拟实现

目录 前言 stack 接口介绍 模拟实现 queue 接口介绍 模拟实现 没有迭代器 deque介绍 前言 stack 和 queue 本质上是一种容器配接器&#xff0c;就像我们平时充电时使用的电源适配器&#xff0c;能够将电压转换成设备能够接受的程度。 其通过封装特定容器作为其底层…