mtd源码 linux,linux mtd源码分析--mtdchar.c

#define MAX_KMALLOC_SIZE 0x20000

static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t *ppos)

{

struct mtd_file_info *mfi = file->private_data;

struct mtd_info *mtd = mfi->mtd;

size_t retlen=0;

size_t total_retlen=0;

int ret=0;

int len;

char *kbuf;

DEBUG(MTD_DEBUG_LEVEL0,"MTD_read\n");

if (*ppos + count > mtd->size)

count = mtd->size - *ppos;

if (!count)

return 0;

/* FIXME: Use kiovec in 2.5 to lock down the user's buffers

and pass them directly to the MTD functions */

#<1>

if (count > MAX_KMALLOC_SIZE)

kbuf=kmalloc(MAX_KMALLOC_SIZE, GFP_KERNEL);

else

kbuf=kmalloc(count, GFP_KERNEL);

if (!kbuf)

return -ENOMEM;

while (count) {

if (count > MAX_KMALLOC_SIZE)

len = MAX_KMALLOC_SIZE;

else

len = count;

switch (mfi->mode) {#<2>

case MTD_MODE_OTP_FACTORY:

ret = mtd->read_fact_prot_reg(mtd, *ppos, len, &retlen, kbuf);

break;

case MTD_MODE_OTP_USER:

ret = mtd->read_user_prot_reg(mtd, *ppos, len, &retlen, kbuf);

break;

case MTD_MODE_RAW:

{

struct mtd_oob_ops ops;

ops.mode = MTD_OOB_RAW;

ops.datbuf = kbuf;

ops.oobbuf = NULL;

ops.len = len;

ret = mtd->read_oob(mtd, *ppos, &ops);

retlen = ops.retlen;

break;

}

default:

ret = mtd->read(mtd, *ppos, len, &retlen, kbuf);

}

/* Nand returns -EBADMSG on ecc errors, but it returns

* the data. For our userspace tools it is important

* to dump areas with ecc errors !

* For kernel internal usage it also might return -EUCLEAN

* to signal the caller that a bitflip has occured and has

* been corrected by the ECC algorithm.

* Userspace software which accesses NAND this way

* must be aware of the fact that it deals with NAND

*/

if (!ret || (ret == -EUCLEAN) || (ret == -EBADMSG)) {

*ppos += retlen;

if (copy_to_user(buf, kbuf, retlen)) {

kfree(kbuf);

return -EFAULT;

}

else

total_retlen += retlen;

count -= retlen;

buf += retlen;

if (retlen == 0)

count = 0;

}

else {

kfree(kbuf);

return ret;

}

}

kfree(kbuf);

return total_retlen;

} /* mtd_read */

mtd_read()函数的执行流程分析 先注册一个字符设备的驱动程序, 让系统记住: 主设备号为MTD_CHAR_MAJOR的字符设备文件对应的文件操作集为mtd_fops。字符设备文件将在系统检测到flash设备时创建。 立即下载

相关推荐

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 231

MTD工具使用

MTD 工具使用 1. mtd_debug   # mtd_debugusage: mtd_debug info <device> mtd_debug read <device> <offset> <len> <dest-filename> mtd_debug write <device> <offset> <len> &l...

kunkliu的博客 7204

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

通过mtd读写flash_mtd_debug:linux下直接读写flash扇区 及 交叉编译mtd_utils | 学步园

mtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件。具体用法如下:./mtd_debug read ./mtd_debug write [len]./mtd_debug erase 具体使用举例:./mtd_debug erase/dev/mtd/1 0x0 0xc00000 :表示擦写了0x34300000 ~ 0x34f00000共12...

weixin_39996134的博客 1228

Linux 指令心法(十六)`mtd_debug erase` 擦除MTD(Memory Technology Device)设备

可以使用该命令擦除指定的MTD分区中的数据。MTD设备是一种特殊的设备,用于提供对闪存和其他类似设备的访问。当需要将MTD设备上的数据重置为初始状态时,可以使用mtd_debug erase命令来擦除整个设备或指定的数据区域。在进行MTD设备的调试和测试时,可能需要清除特定的数据块,以便进行下一步操作或测试。使用mtd_debug erase命令擦除特定的数据块,指定要擦除的偏移量和长度。使用mtd_debug erase命令擦除整个设备或指定的数据区域。

weixin_43564241的博客 2729

PyQt5 + HFSS:给你的仿真脚本做个专属GUI界面(零基础搭建指南)

本文详细介绍了如何使用PyQt5为HFSS仿真脚本创建专属GUI界面,适合零基础用户快速上手。通过Python二次开发,实现参数可视化调整、进度实时监控等功能,大幅提升团队协作效率。文章涵盖环境配置、界面设计、HFSS集成到打包部署的全流程,是仿真工程师提升工作效率的实用指南。

weixin_42535720的博客 169

MTD源代码分析(三)

 mtdchar.cMTD字符设备的文件notifierMTD字符设备的notifierstatic struct mtd_notifier notifier = {                  add: mtd_notify_add,       remove:   mtd_notify_remove,}; mtd_lseek格式:     

abc的专栏 3609

GR00TN1.7国内本地下载+模型下在+hugingface无法连接,本地模型下载

GR00TN1.7

alsj123456的博客 79

linux mtd源码分析--mtdchar.c

Mtdchar.c是linux下字符设备驱动程序的实现: static const struct file_operations mtd_fops = {        .owner           = THIS_MODULE,        .llseek            = mtd_lseek,        .read              = m

xgbing 4995

linux 读写mtdchar,linux mtd源码分析--mtdchar.c

#define MAX_KMALLOC_SIZE 0x20000static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t *ppos){struct mtd_file_info *mfi = file->private_data;struct mtd_info *mtd = mfi-&gt...

weixin_34140828的博客 337

别再乱调了!Zygo MetroPro软件滤波功能保姆级指南,从均值到鲁棒高斯样条一次讲清

本文深入解析Zygo MetroPro软件的滤波功能,从均值滤波到鲁棒高斯样条等九种算法,帮助用户根据测量对象特性选择最佳滤波组合。通过真实工业案例和参数配置指南,提升光学测量数据的准确性和效率,特别适用于硅晶圆、光学镜片等精密测量场景。

weixin_30888413的博客 131

通过mtd读写flash_mtd_debuglinux下直接读写flash扇区及交叉编译mtd_utils

mtd_debuglinux下直接读写flash扇区及交叉编译mtd_utilsmtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件。具体用法如下:./mtd_debugread<device><offset><dest-filename><len>./mtd_debugwrite<devic...

weixin_39583222的博客 651

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7403

Linux MTD子系统(二)——mtdblock驱动分析

mtdX 和 mtdblockX实际上是同一个设备,mtdX是字符设备,mtdblockX是块设备mtdblockX存在的目的主要是为了挂载存在Flash里面的文件系统(例如yaffs2,jffs2)

分享嵌入式Linux技术知识 6051

linux nand flash常用命令

linux nand flash常用命令 转载:玛丽奥ZJY2020-03-29 18:00:3596收藏 分类专栏:【nand flash】 版权 使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd* #cat /proc/mtd dev: size erasesize name mtd0: 00c00000 00020000 “ROOTFS” mtd1: 00200000 00020000 “BOOTLOADER” ...

llzhang_fly的博客 3620

机器人常用坐标系详解:原理、获取方法及实战实例

本文系统阐述了机器人四大核心坐标系(世界、基、工具、工件)的原理与标定方法。世界坐标系提供全局参考基准,基坐标系绑定机器人本体,工具坐标系定义末端执行器位置,工件坐标系则锁定作业对象位置。通过齐次变换矩阵实现各坐标系间的关联转换。重点介绍了三类标定技术:手动设定法(世界坐标系)、三点/六点法(工具TCP标定)和视觉识别法(工件标定),并以工业机械臂上下料为例演示了完整应用流程。随着技术发展,自动化标定、动态坐标系等新趋势将进一步提升机器人作业精度与效率。

start_up_go的博客 495

MTD源码分析(2)

<br />mtdchar.c<br /><br /> MTD字符设备的文件<br />notifier<br />MTD字符设备的notifier<br />static struct mtd_notifier notifier = {           <br />       add: mtd_notify_add,<br />       remove:   mtd_notify_remove,<br />};<br /> <br />mtd_lseek<br />格式:<br /

SdustLiYang的专栏 1119

LVGL 组件对齐方式说明

本文说明 LVGL(以 v8 为例)中常用的 lv_align_t对齐选项的含义与用法,对应界面设计工具里下拉列表中的以及等命名。

摸鱼专家 111

mtd_debug:linux下直接读写flash扇区 及 交叉编译mtd_utils

mtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件。具体用法如下: ./mtd_debug read ./mtd_debug write [len] ./mtd_debug erase 具体使用举例:./mtd_debug erase/dev/mtd/1 0x0 0xc00000  :表示擦写了0x34300000 ~ 0x3

Canbus的专栏 1万+

MTD源代码分析(二)

源码分析下面具体介绍每个文件的内容和作用:  头文件分析 mtd.hMTD_CHAR_MAJOR#define MTD_CHAR_MAJOR 90         MTD字符设备的主设备号MTD_BLOCK_MAJOR#define MTD_BLOCK_MAJOR 31       MTD块设备的主设备号MAX_MTD_DEVICES#define

abc的专栏 2479

FatFs的API函数中文介绍

FatFs的API函数中文介绍每个函数的说明,和举例应用f_mount - 注册/注销一个工作区域(Work Area)f_open - 打开/创建一个文件f_close - 关闭一个文件f_read - 读文件f_write - 写文件f_lseek - 移动文件读/写指针f_truncate - 截断文件f_sync - 冲洗缓冲数据 Flush Cached Dataf_opendir - 打开一个目录f_readdir - 读取目录条目f_getfree - 获取空闲簇 Get Free Clustersf_stat - 获取文件状态f_mkdir - 创建一个目录f_unlink - 删除一个文件或目录f_chmod - 改变属性(Attribute)f_utime - 改变时间戳(Timestamp)f_rename - 重命名/移动一个文件或文件夹f_mkfs - 在驱动器上创建一个文件系统f_forward - 直接转移文件数据到一个数据流 Forward file data to the stream directlyf_gets - 读一个字符串f_putc - 写一个字符f_puts - 写一个字符传f_printf - 写一个格式化的字符磁盘I/O接口disk_initialize - Initialize disk drive 初始化磁盘驱动器disk_status - Get disk status 获取磁盘状态disk_read - Read sector(s) 读扇区disk_write - Write sector(s) 写扇区disk_ioctl - Control device dependent features 设备相关的控制特性get_fattime - Get current time 获取当前时间

mtd-utils 工具的使用

也可以使用diff命令来比较。#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上 从0x0开始的 , 128K*2 大小的数据。#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上 从0x0开始的 , 128K*2 大小的数据。#./nanddump -p /dev/mtd1 //dump出nand flash /dev/mtd1数据,可以看到现在的数据不再是全ff。

茫茫大士的专栏 3098

Aspose.Cells 17.7 for .NET破解版,17年7月最新版本

Aspose.Cells 17.7 for .NET破解版,17年7月最新版本

linux mtd0信息,linux mtd

一、参考资料在嵌入式系统中,与文件系统相关的存储设备包括硬盘、Flash存储器等。Flash存储器又分为Flash芯片设备(Raw Flash device,也叫MTD设备)和带Flash控制器的设备(Flash Translation Layer device, FTL设备),两者的关键区别是是否带有Flash控制器,这也直接决定了文件系统分为不同的两类。其中MTD设备包括NOR Flash、N...

weixin_39828338的博客 1622

MTD应用学习札记

今天做升级方案用到了mtd-utils中的flash_eraseall和flash_cp两个工具,在进行方案验证的时候,遭遇到各种不解和疑惑,因对MTD的原理不熟悉,所以只能多次尝试,虽然最后把方案搞定了,不过觉得MTD中的mtd和mtdblock区别这块还是值得总结学习一下。这里先说明一下问题现象,然后在进行具体的区别原理解释。  MTD设备(Nor Flash)使用中的问题现象表现  mtd-utils工具对mtd和mtdblock分...

kunkliu的博客 2145

PP-OCRv5_mobile_rec_infer.onnx

PP-OCRv5 Onnx模型

Generic GPIO uart driver

/* * Generic GPIO uart driver * * Copyright (C) 2020 bailin <sc.cd.bailin@mail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the G...

bai596140538的博客 356

Windows10下MDK5(Keil5)及STM32pack的安装教程

本资源文件提供了在Windows10系统下安装MDK5(Keil5)及STM32pack的详细教程。通过本教程,您可以顺利完成MDK5和STM32pack的安装,为嵌入式开发环境搭建打下坚实基础。内容概述MDK5安装包和STM32pack下载提供了MDK5和STM32pack的下载链接。包含MDK5.10的安装教程,但建议以提供的步骤为准。安装流程MDK5安装下载并解压缩安装包。双击安装程序,按照向导完成安装。选择安装路径,注意路径中不要包含中文。填写注册信息,等待安装完成。STM32pack安装在解压缩后的文件夹中双击pack文件进行安装。注意某些pack可能需要更新MDK版本。

uboot 中 如何打开 ubi mtd debug 信息

在 uboot/inclued/configs/am335x.h 添加两行 #define CONFIG_MTD_DEBUG #define CONFIG_MTD_DEBUG_VERBOSE 7

只有自己觉到悟到的,才是自己的。 861

linux nand flash常用命令操作

使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd* cat /proc/mtd dev: size erasesize name mtd0: 00c00000 00020000 “ROOTFS” mtd1: 00200000 00020000 “BOOTLOADER” mtd2: 00200000 00020000...

爱她就要努力 4590
上一篇: linux自动电梯设计,基于嵌入式Linux电梯控制系统
下一篇: linux 路由器都会断流吗,有没有迷你路由器推荐?MTK路由器经常断流..
一千次的回头
博客等级 码龄6年 36粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值