linux中往nand(jffs2)中拷贝文件时速度慢的问题

嵌入式Linux开发实战:从内核定制到驱动与应用开发 操作系统是计算机系统的核心软件,它管理硬件资源并为应用程序提供运行环境。Linux作为开源操作系统的代表,其模块化设计允许开发者根据需求进行深度定制,这一特性在嵌入式领域尤为关键。通过交叉编译工具链,开发者能够在x86主机上为ARM等架构生成可执行代码,实现了开发效率与运行性能的平衡。其技术价值在于将复杂的硬件差异封装,提供统一稳定的软件平台,使开发者能聚焦业务逻辑而非底层硬件。在应用场景上,这广泛适用于智能家居网关、工业控制面板及自动驾驶域控制器等需要复杂网络功能、丰富人机交互和强大数据处理能力的设备。本 阅读详情

最近在调试nand和jffs2时,发现将一个文件从SD卡拷贝到jffs2的NAND分区时,速度非常慢,和从NAND中拷出(例如拷贝到SD卡)相比,慢了近5倍。一开始以为是驱动写NAND和读NAND的差异,后来用mtd-utile的nand write测试了一下,nand write的速度和nand read的也差不多。

由于mtd-utile的nand write/ nand read没有经过jffs2文件系统,于是将疑点定位在jffs2文件中。

 

经过一番debug,对各个模块进行耗时统计,经于找到元凶:fs/jffs2/compr.c 中的jffs2_comress()函数,绝大部分多出的耗时全在这个函数里。原来在menuconfig的时候没有选择 Advanced compression option for JFFS2, 但里面确默认使用了priority的压缩方式。重新设置成no compression后,OK,速度正常了。

 

以下是往jffs2文件系统中copy时的调用流程(竟然没有走mtdblock.c文件,一开始以为是经过这个文件中的mtd->write函数指针调用到nand_write函数的):

 

fs/read_write.c      do_sync_write -> filp->f_op->aio_write()
jf/jffs2/file.c           .aio_write = generic_file_aio_write,
mm/filemap.c:        generic_file_aio_write->
                                __generic_file_aio_write ->
                                    generic_file_buffered_write->
                                          generic_perform_write->a_ops->write_end()
fs/jffs2/file.c:        .write_end = jffs2_write_end,
                            jffs2_write_end->
fs/jffs2/write.c:           jffs2_write_inode_range->
                                      jffs2_write_dnode->
fs/jffs2/wbuf.c:                         jffs2_flash_writev->
                                                        c->mtd->write()
                                                __jffs2_flush_wbuf()->
                                                        c->mtd->write()
drivers/mtd/nand/nand_base.c:
                                               mtd->write = nand_write;

嵌入式开发必知:SRAM、DRAM、FLASH等存储器分类、原理与实战选型 存储器是计算机系统的核心组件,负责数据的临时与永久存储。其工作原理主要基于触发器、电容、浮栅晶体管等物理结构,决定了易失性、速度、容量和成本等关键特性。理解这些原理对于构建高效、可靠的嵌入式系统至关重要,直接影响系统性能、功耗和成本。在嵌入式开发中,常见的应用场景包括:利用高速SRAM作为CPU缓存和关键变量存储,使用大容量DRAM作为系统主内存运行复杂应用,以及采用非易失的FLASH存储固件和用户数据。本文聚焦于嵌入式开发者必须掌握的存储器分类,深入解析SRAM、DRAM、FLASH等不同类型存储器的核心 阅读详情

相关推荐

稳定性仿真(stb闭环增益仿真)

stb仿真主要是测试电路的稳定性,例如运放在闭环电路中的增益和相位裕度的值,从而判别电路是否正常工作。 以下是stb仿真的过程: (1)调用iprobe器件 从analogLib中调iprobe器件,通过器件中的箭头标识确定接入电路的方法,箭头起点端连运放的输出端,箭头的终点端连在反馈环路的作用端。iprobe器件连入电路后相当于理想导线。(iprobe器件连接在反馈回路上) (2)analyses设置 勾选stb和frequency,此处的频率范围设置在0.1~1GHz,Probe Instance/T

qq_36686804的博客 3万+

1.7 写入文件

Linux中写入文件操作,最常用的就是write函数,其原型如下: ssize_t write(int fd, const void *buf, size_t count); write尝试从buf指向的地址,写入count个字节到文件描述符fd中,并返回成功写入的字节数,同时将文件偏移向前移动相同的字节数。 write有可能写入比指定count少的字节数。 1.7.1 write源码跟踪 write的源码与read的很相似,位于read_write.c中,代码如下: SYSCALL_DEFIN

Scroll_C的博客 323

Ansys HFSS 中的同轴电缆仿真

准确模拟它们的行为对于确保 RF 系统的最佳性能至关重要。在本博客中,我们将介绍在 HFSS 中设置同轴电缆仿真并绘制插入损耗、回波损耗和电场分布的过程。将波端口分配给同轴线的两端以激励模型,并定义了从 1 GHz 到 20 GHz 的频率扫描以评估其宽带性能。铜分配给内部导体,铝分配给外部导体。介电区域使用 PTFE 定义,其相对介电常数为 2.1,损耗角正切为 0.00022。仿真完成后,结果用于绘制整个频率范围内的回波损耗和插入损耗。此外,电介质内的电场分布也被绘制和动画化。

jkh920184196的博客 1910

jffs2文件系统磁盘写入

在jffs2写入其实是一个页写入(不管是nand flash还是nor flash,无非norflash的页大小是1)。 当wbuf_len不足pagesize的时候,pagesize-wbuflen部分,写一个unknown_node,它有一个头,后面的数据是0,这部分的数据是waste的。 如下图: 具体代码: static int __jffs2_flush_wbuf(s

fenglifeng1987的专栏 3937

安全虚拟化SEV简单介绍

安全虚拟化SEV简单介绍什么是SEV什么是SVMSME介绍SEV介绍总结 什么是SEV SEV是由AMD提出的安全虚拟化Secure Encrypted Virtualization技术的英文首字母的缩写。简单来说就是主内存控制器具备了加密功能可以对虚拟机内存数据进行保护。在真正介绍SEV之前,我们首先要弄清楚两个关键的基本概念:SVM、SME。下面先简单了解一下SVM和SME。 什么是SVM S...

artine的专栏 6391

yakit 验证码识别 进行webfuzzer

在渗透测试的过程中,我们可能需要对管理员密码进行枚举,或者密码喷洒的时候,遇到验证码就很烦。有没有自动化识别验证码的办法呢?有的,兄弟,有的。验证码的识别率很低,captcha-killer-modified对算术验证码识别正确率非常低,还会识别成乱七八糟的结果,这就非常麻烦。因为你不知道到底是验证码不对,还是密码不对。这是 ddddocr 识别率的问题,如果师傅们找到准确度更高的工具,完全可以替换上去。

Arkmornings的博客 1667

linux实现自己的write函数,Linux 内核源码阅读 - write 系统调用的实现

最近在看write系统调用的实现,虽然还有一下细节不是很清楚,但是大致的实现机理还是有一定的理解了。总结如下:这里假设最普通的情况,不考虑Direct IO 的情况。从全家的高度看,要往一个文件中写入内容,需要一下几步。1. sys_write 将用户进程要写的内容写入到内核的文件页面缓冲中。sys_write 本身到此就结束了。2. pdflush 内核线程(定期或者由内核阈值触发)刷新脏的页面...

weixin_42347699的博客 1189

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 265

JFFS2文件系统挂载过程优化的分析报告

一 问题描述 在上电启动优化中发现Linux系统下挂载JFFS2文件系统耗时较长,以128M的NOR FLASH为例,用时接近20秒。后续单板的FLASH容量为256M,时间会更长。如此长的挂载时间,会大增加系统的上电启动时间。希望能对mount功能或JFFS2文件系统做适当优化,将256M FLASH的挂载时间降到3~5秒内,优化时需要同时保证文件系统的可靠性和读写速度,要保证兼容优化前的文件

lh2016rocky的博客 4009

Mac电脑本地安装Stable Diffusion小白教程避开所有坑教程

如果出现黄字部分警告,如WARNING: The scripts pip, pip3 and pip3.9 are installed inz‘/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin’ which is not on PATH)需要将其添加到path。下载pip,输入:curl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py。

jackerjin123的博客 1799

浅谈innovus Update io latency相关作用

同样我们使用update io latency,工具取launch clock latency负值反标到clock端口上,同时认为capture clock latency与launch clock latency相等,这样可以相互抵消,这样setup time slack = T – Tsetup -Tcomb – Toutput_delay,因此采用update io latency后,reg2out timing path的setup check变得真实些。图3 in2reg示意图。

芯冰乐 475

linux提高nand速度,linux-2.6.31.1内核支持Nand Flash

linux-2.6.31.1支持Nand Flash目的:使NandFlash驱动同时支持64M, 256M或更高容量的NandFlash将linux内核解压在/opt目录下,修改内核源码文件,添加对Nand Flash的支持1. 修改arch/arm/plat-s3c24xx/common-smdk.c文件110行:将static struct mtd_partition smdk_defaul...

weixin_28908491的博客 405

Spring AI Alibaba 1.x 源码分析-架构设计

本文通过分析Spring AI Alibaba 框架的源码,分析出其原理和架构设计,无论是用于项目开发、技术评估还是团队培训都具有重要价值。

program哲学 490

linux传输文件到linux速度慢,linux中往nand(jffs2)中拷贝文件时速度慢的问题

最近在调试nand和jffs2时,发现将一个文件从SD卡拷贝到jffs2的NAND分区时,速度非常慢,和从NAND中拷出(例如拷贝到SD卡)相比,慢了近5倍。一开始以为是驱动写NAND和读NAND的差异,后来用mtd-utile的nand write测试了一下,nand write的速度和nand read的也差不多。由于mtd-utile的nand write/ nand read没有经过jff...

weixin_39899021的博客 316

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux下NAND FLASH驱动开发

<br />但是由于物理制程/制造方面的原因,导致nor 和nand在一些具体操作方面的特性不同:<br />  <br />NOR <br />NAND <br />(备注)<br />接口<br />总线<br />I/O接口<br />这个两者最大的区别<br />单个cell大小<br />大<br />小<br /> <br />单个Cell成本<br />高<br />低<br /> <br />读耗时<br />快<br />慢<br /> <br />单字节的编程时间<br />快<br

shenbin1430的专栏 3015

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

linux flash驱动程序,Linux下NAND FLASH驱动开发

但是由于物理制程 /制造方面的原因,导致 nor和 nand在一些具体操作方面的特性不同:本文引用地址:http://www.eepw.com.cn/article/201610/305625.htm表1:Nand Flash 和 Nor Flash 的区别1. 理论上是可以的,而且也是有人验证过可以的,只不过由于 nand flash 的物理特性,不能完全保证所读取的数据 / 代码是正确的...

weixin_30767323的博客 246

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

嵌入式外部存储器选型指南:从Nor/NAND原理到实战避坑

在嵌入式系统设计中,外部存储器是决定系统性能、可靠性与成本的关键组件。其核心原理基于半导体存储技术,主要分为支持芯片内执行(XiP)的Nor Flash和以高密度、低成本著称的NAND Flash两大阵营。理解其工作原理,如Nor的随机快速读取与NAND的页编程/块擦除机制,是进行技术选型的基础。从技术价值看,正确的选型能保障系统快速启动、数据可靠存储并控制整体成本。在应用场景上,不同存储器各司其职:SPI Flash常用于启动配置与参数存储,eMMC凭借集成控制器简化了海量数据存储,而原始NAND则适用于

weixin_30598225的博客 340

基于ARM的嵌入式文件系统YAFFS的移植

发布日期:2008-06-12  -->作者:杨磊,方康玲 来源:微计算机信息 摘要:本文分析了罪常用的两种嵌入式文件系统JAFFS和YAFFS文件系统的优缺点,通过修改Linux-2.6.14内核源码,重新配置内核,提出一种了如何在嵌入式系统上移植YAFFS文件系统的方法,并在ARM-S3C2410开发平台的NAND FLASH测试并挂载了移植后的YAFFS文件系统,为嵌入式开发人员提供了

wiserstar的专栏 1459

嵌入式存储器选型指南:从SRAM到Flash的工程实践

存储器是计算机系统的核心组件,负责数据的临时与永久存储。其工作原理基于半导体技术,通过不同的物理结构实现数据的读写与保持。从技术价值看,存储器的性能、容量和可靠性直接影响系统整体效能与稳定性。在嵌入式系统等资源受限场景中,合理的存储器选型与设计尤为关键,涉及SRAM、DRAM、Nor Flash、NAND Flash等多种类型。具体应用时,需根据代码执行、数据缓存、参数保存等不同需求,结合访问速度、非易失性、成本及接口复杂度进行综合权衡。例如,对实时性要求高的代码可放入支持XIP的Nor Flash或TCM

weixin_33875839的博客 437

insmod底层内存机制深度解析:从页表刷新到物理页分配

模块加载是Linux内核内存管理的关键入口,其本质是用户空间向内核空间安全映射代码与数据的过程。理解其原理需把握内存分层模型——从虚拟地址空间布局、页表项(PTE/PMD/PGD)动态构建,到TLB刷新开销、Buddy系统物理页分配及缓存一致性保障。在嵌入式场景中,insmod行为直接受限于RAM容量、内存对齐约束与架构特性(如ARMv7三级页表),一次加载可能触发隐式set_memory_ro、flush_tlb_kernel_range等高代价操作。本文聚焦内存视角下的全流程穿透,涵盖模块加载时的页表刷

weixin_30328063的博客 319

generic_perform_write

do {again:/**/break;break;break;break;/**/goto again;(mapping);/***/voidint *p;if (!return;if (!wb);/**/

wmzjzwlzs的专栏 864

OpenWRT下jffs2文件系统

OpenWRT下jffs2文件系统背景知识nor Flash特性jffs2文件系统特性对Jffs2文件系统的实验验证OpenWRT文件系统挂载流程生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 背景知识 某项目中,设...

weixin_41294460的博客 3433

在nand flash上实现JFFS2根文件文件系统

JFFS2是Flash上应用最广的一个日志结构文件系统。它提供的垃圾回收机制,不需要马上对擦写越界的块进行擦写,而只需要将其设置一个标志,标明为脏块,当可用的块数不足时,垃圾回收机制才开始回收这些节点。同时,由于JFFS2基于日志结构,在意外掉电后仍然可以保持数据的完整性,而不会丢失数据。 本文阐述如何在nand flash上实现JFFS2根文件文件系统。实验环境是:FS2410开发平台及uba...

编程开发资料库 407
上一篇: linux的nand中计算ECC的时候buf地址不4字节对齐的问题
下一篇: 使用diff同patch工具
junllee
博客等级 码龄19年 71粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值