mtd分区应用操作sample之某分区读,然后保存文件

2024-06-01 15:28

本文主要是介绍mtd分区应用操作sample之某分区读,然后保存文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用到的头文件

#include <mtd/mtd-user.h>
#include <mtd/mtd-abi.h>struct mtd_info_user
{__u8 type;__u32 flags;__u32 size;	/* Total size of the MTD */     //该分区总大小__u32 erasesize;                            //擦除的块大小  __u32 writesize;__u32 oobsize;	/* Amount of OOB data per block (e.g. 16) */__u64 padding;	/* Old obsolete field; do not use */
};

//下面是某分区读,然后是保存文件的例子

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <mtd/mtd-user.h>
#include <stdint.h>
#include <unistd.h> 
#include <sys/time.h>
#include <string.h>#define FILE_NAME  "read_raw_file"int main()
{int mtd_fd;struct mtd_info_user mtd_info;char *mtd_dev = "/dev/mtd1"; // 替换为你的MTD设备文件struct timeval tv1,tv2;uint8_t* buffer = NULL;FILE              *fp = NULL;// 打开MTD设备mtd_fd = open(mtd_dev, O_RDONLY);if (mtd_fd < 0) {perror("Error opening MTD device");return EXIT_FAILURE;}if (!(fp = fopen(FILE_NAME, "wb"))) {perror("Error write file ");return EXIT_FAILURE;}// 获取MTD设备信息if (ioctl(mtd_fd, MEMGETINFO, &mtd_info)) {perror("Error getting MTD info");close(mtd_fd);return EXIT_FAILURE;}printf("MTD Device Info:\n");printf("  type: %llu\n", mtd_info.type);   //识别是nor flash 还是 nand flash printf("  flags: %llu\n", mtd_info.flags);printf("  Size: %llu\n", mtd_info.size);  // 分区的大小 printf("  Erase Size: %u\n", mtd_info.erasesize);  // 擦除块大小printf("  Write Size: %u\n", mtd_info.writesize);printf("  oobsize Size: %u\n", mtd_info.oobsize);printf("  padding Size: %u\n", mtd_info.padding);// ... 打印其他MTD信息buffer = malloc(mtd_info.size);memset(buffer,0,mtd_info.size);gettimeofday(&tv1, NULL);// 读取数据if (pread(mtd_fd, buffer, mtd_info.size, 0) < 0){ // 从设备偏移0处读取perror("Error reading from MTD device");close(mtd_fd);return EXIT_FAILURE;}gettimeofday(&tv2, NULL);printf("millisecond: %ld\n",(tv2.tv_sec * 1000 + tv2.tv_usec / 1000) - ( tv1.tv_sec * 1000 + tv1.tv_usec / 1000));fwrite(buffer, 1, mtd_info.size, fp);fflush(fp);#if 0 // 打印读取的数据(仅示例,可能需要根据实际数据格式进行处理)printf("Data read from MTD device:\n");for (size_t i = 0; i < read_size; ++i) {printf("%02x ", buffer[i]);if ((i + 1) % 16 == 0) {printf("\n");}}
#endif if(fp) {fclose(fp);}free(buffer);// 关闭MTD设备close(mtd_fd);return EXIT_SUCCESS;
}
/mnt # ./mtd_test 
MTD Device Info:type: 3flags: 3072Size: 9437184Erase Size: 65536Write Size: 1oobsize Size: 0padding Size: 0
millisecond: 411

在这里插入图片描述
写入测试

./flashcp  -v read_raw_file  /dev/mtd1 

这篇关于mtd分区应用操作sample之某分区读,然后保存文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021384

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提