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上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异