关于linux nand 驱动调试的一些注意点

nand flash以及ubifs关键调试 阅读详情

关于linux nand 驱动调试的一些注意点

作者: zjujoe 转载请注明出处

Email:zjujoe@yahoo.com

BLOG:http://blog.youkuaiyun.com/zjujoe

 

最近在开发 nand驱动, 不可避免的, 用到了 nand tools. 这里将一些细节记录下来。网上google 的内容好像也不是很多。Nand tools(mtdutils1.2)似乎也有些难用。

注意我目前使用的是linux2.6.25内核, mtdutils 1.2

 

烧录普通image(没有使用到oob数据)

flash_eraseall /dev/mtd1

nandwrite /dev/mtd1 ./zImage

注意这里的 image 必须 block 对齐, 否则, nandwrite 会抱怨:

Input file is not page aligned

Data was only partially written due to error

 

烧录 jffs2 image

先制作好jffs2 image, 比如:(这里暂不使用 sumtool)

sudo ./mkjffs2   -n -s 2048 -p 2048 -e 0x20000 -r rootfs_initramfs  -o rootfs_initramfs.jffs2

 

然后通过某种方式, 比如 T  卡或者 cifs, 放入嵌入式环境。目标板上执行:

flash_eraseall  -j /dev/mtd3

nandwrite  /dev/mtd3 ./rootfs_initramfs.jffs2

 

注意这里 nandwrite 不要使用 –j 参数,从help 上看, 该参数已经过时。(至于为什么不需要了, 还没有研究。)

 

另外,就是 flash_eraseall 要求第一个 free 的 oob 数据区其大小要超过8(jffs2 的 cleanmarker 大小为8),像我原来的驱动里:

static struct nand_ecclayout comip_lb_nand_oob ={

       .eccbytes = 12,

       .eccpos = {

                  8, 9, 10, 24, 25, 26,

                  40, 41, 42, 56, 57, 58},

       .oobfree = {{1, 7},{11, 13}, {27, 13}, {43, 13}, {59, 5} }

};

 

用 nanddump 抓出数据,会发现 BIT 8 被 cleanmarker 最后一个字节 overwrite 了。

需要改为:

static struct nand_ecclayout comip_lb_nand_oob ={

       .eccbytes = 12,

       .eccpos = {

                  8, 9, 10, 24, 25, 26,

                  40, 41, 42, 56, 57, 58},

       .oobfree = {{11, 13}, {27, 13}, {43, 13}, {59, 5}, {1, 7}}

};

 

当然, 如果修改 flash_eraseall.c 也可以解决问题。

 

烧录 yaffs2image

 

PC 上先制作一个 yaffs2 image:

./mkyaffs2image ./rootfs_initramfsrootfs_initramfs.yaffs2

 

然后烧录到目标板上:

flash_eraseall /dev/mtd3

nandwrite   -a -o/dev/mtd3 rootfs_initramfs.yaffs2

 

mount 不能成功!

而如果只是擦除,然后直接mount,读写文件时没有问题的。

使用nanddump 取出二进制数据, 发现 oob 数据有问题!

分析nandwrite的代码, 原来写oob数据的代码不正确:(或

许是因为开发nandwrite后底层代码发生了变动。)

#if 0

for (i = 0; old_oobinfo.oobfree[i][1];i++) {

       /* Set the reserved bytes to 0xff */

       start = old_oobinfo.oobfree[i][0];

       len = old_oobinfo.oobfree[i][1];

       memcpy(oobbuf + start, oobreadbuf + start, len);

}

#else

{

       int totallen = 28;

       int offset = 0;

       memset(oobbuf, 0xFF, 64);

       for (i = 0; old_oobinfo.oobfree[i][1]; i++) {

                /* Set the reserved bytes to0xff */

                start = old_oobinfo.oobfree[i][0];

                len =old_oobinfo.oobfree[i][1];

 

                if (len >= totallen)

                        len = totallen;

                totallen -= len;

                memcpy(oobbuf + start,oobreadbuf + offset, len);

               if (totallen == 0)

                        break;

                offset += len;

       }

}

#endif

 

修改以后, 用 nandwrite 写入 yaffs2 image, 就可以正常mount了!

SPI-NAND vs SPI-NOR Linux驱动对比:从MTD架构到DTS配置的5点核心差异 本文深入对比了SPI-NAND与SPI-NOR在Linux驱动中的核心差异,涵盖MTD架构、DTS配置、坏块管理等5大关键点。详细解析了SPI-NAND的ECC校验、NAND控制器接口等特有技术,并提供了性能优化和调试技巧,帮助开发者高效实现嵌入式存储方案选型与驱动开发。 阅读详情

相关推荐

【SPI-NAND】Linux驱动移植实战:从规格书解析到内核适配

本文详细解析了SPI-NAND Flash的Linux驱动移植实战,从规格书关键参数提取到内核MTD子系统适配。内容涵盖存储结构解析、命令集映射、设备树配置及厂商驱动开发,特别强调ECC校验、坏块管理等NAND特性处理,并提供了性能优化与测试验证的实用技巧。

weixin_27076351的博客 351

STM32 FSMC NAND控制器 驱动NAND FLASH 注意事项

1、初始化void FSMC_NAND_Init(void){  GPIO_InitTypeDef GPIO_InitStructure;   FSMC_NANDInitTypeDef FSMC_NANDInitStructure;  FSMC_NAND_PCCARDTimingInitTypeDef  p;     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC...

qq_15404645的博客 2042

NAND Flash 原理、驱动开发与实战调试全解析

非易失性存储是嵌入式系统和数据存储的核心技术,它能在断电后保持数据,广泛应用于从消费电子到工业控制的各种场景。其基本原理是通过电荷存储实现数据持久化,但这也带来了独特的物理限制,如必须先擦除再写入、存在固有坏块以及有限的擦写寿命。为了克服这些挑战并发挥其高密度、低成本的优势,工程师需要深入理解其内部机制,并掌握一系列关键技术,如坏块管理、磨损均衡算法和ECC纠错。这些技术共同确保了存储系统的可靠性与寿命,尤其在面对QLC NAND Flash等高密度存储介质时尤为重要。本文将从基础概念出发,结合工程实践,系

weixin_30313409的博客 276

flash_erase擦除NAND flash坏块失败

板子使用busybox文件系统,带了mtd-utils的工具,包括flash_erase。首先查看帮助信息: [root@M3250 ~]# flash_erase --h Usage: flash_erase [options] MTD_DEVICE Erase blocks of the specified MTD device. Specify a count of 0 to e

yuanlulu的博客 2万+

SPI-NAND vs SPI-NOR 选型指南:从5个维度对比成本、性能与Linux驱动复杂度

本文深入对比SPI-NAND与SPI-NOR在成本、性能、可靠性、容量和Linux驱动复杂度五大维度的差异,为硬件设计者提供全面的选型指南。通过详细参数对比、Linux驱动架构分析和典型应用场景推荐,帮助开发者根据项目需求选择最合适的嵌入式存储方案,优化系统稳定性和开发效率。

weixin_34380948的博客 500

RT-Thread实战:手把手教你为NUC970开发板添加NAND Flash驱动(附完整代码)

本文详细介绍了在RT-Thread实时操作系统中为NUC970开发板移植NAND Flash驱动的完整流程。内容涵盖RT-Thread MTD驱动框架解析、NUC970 NAND控制器初始化、底层nand_ops操作集实现、驱动集成与设备注册,以及YAFFS2文件系统挂载和实战调试技巧,并提供了完整的代码参考。

s4t5u6v的博客 1063

mtd_util 1.3.1错误

<br />编译了mtd_util 1.3.1的包,后在linux下运行出现以下错误:<br /> <br />MTD_open MTD_ioctl MTD_ioctl MEMSETOOBSEL: IMTD_close nappropriate ioctl for device Data was only partially written due to error : Illegal seek<br /> <br />解决方法:

Jieen的专栏 1052

U-Boot与Linux内存及NAND Flash操作实战指南:从基础命令到调试技巧

本文详细介绍了U-Boot与Linux环境下内存及NAND Flash操作的实战技巧,涵盖基础命令如md、mw的使用,NAND Flash的读写与擦除操作,以及Linux下的寄存器调试方法。通过实际案例解析,帮助开发者快速掌握硬件调试的核心技能,提升嵌入式系统开发效率。

weixin_28675839的博客 369

封装了nand flash写函数

使用nandwrite的代码,封装为满足我们使用的代码       /* * nandwrite.c * * Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com) * 2003

Jieen的专栏 3313

MT29F4G08 NAND Flash驱动开发全解析:从物理架构到Linux适配实战

NAND Flash作为一种主流的非易失性存储介质,以其高密度、低成本的优势广泛应用于嵌入式系统、消费电子和工业控制领域。其核心原理基于浮栅晶体管存储电荷,通过复杂的地址复用机制访问由页、块、平面构成的立体存储阵列。这种结构带来了高容量,但也引入了必须由软件管理的特性,如坏块管理和ECC校验,以确保数据可靠性。在工程实践中,驱动开发者需要精确控制命令时序、配置硬件控制器,并适配文件系统层。本文以经典的SLC NAND芯片MT29F4G08为例,深入剖析其物理架构、操作时序,并重点结合全志T113平台,详解在

weixin_30787531的博客 317

深入解析AM62L GPMC NAND Flash控制器:时序、ECC与Linux驱动实践

在嵌入式系统开发中,外部存储器接口是连接处理器与存储设备的关键桥梁,其核心在于实现可靠的数据交换协议。NAND Flash作为一种高密度、非易失性存储介质,因其成本效益而被广泛应用,但其异步访问协议复杂,需要专用的控制器进行时序转换与错误管理。控制器通过精确配置命令、地址和数据周期的时序参数,确保信号建立与保持时间满足物理层要求,从而保障通信稳定性。其技术价值在于将处理器简单的内存访问抽象为复杂的NAND操作序列,并集成硬件ECC引擎,以应对NAND固有的位错误问题,显著提升系统数据可靠性。在应用场景上,这

weixin_32349093的博客 213

关于韦东山uboot移植,烧写yaffs文件系统中,烧写oob值不对,找不到init的解决方案

定位问题: <nand_util.c> nand_write_skip_bad 中在if (flags & WITH_YAFFS_OOB) { 之前就已经返回了; 此处代码: 会检查是否需要skip,不需要的话直接nand_write,这个函数是不会写原始的oob数据的。条件中添加不是写yaffs文件系统是才判断need_skip,直接进入后面的 写ob流程,其中的两处修改...

qq_40036519的博客 417

告别瞎猜!用通达信L2资金流向函数,手把手教你识别主力动向(附实战公式)

本文详细解析通达信L2资金流向函数,手把手教你构建主力动向监控系统。通过分档数据解析、委买委卖攻防解读及实战公式应用,帮助投资者精准识别主力建仓与虚假拉升信号,提升股票交易决策效率。

weixin_26908317的博客 2084

嵌入式NAND Flash驱动开发:基于IFC控制器的U-Boot与Linux内核配置实战

在嵌入式系统开发中,NAND Flash作为一种非易失性存储介质,因其高密度和低成本而被广泛应用。其工作原理基于电荷存储,通过页编程和块擦除进行操作,但存在擦写寿命有限和比特翻转等物理挑战。为了有效管理这些特性并提升系统可靠性,需要引入闪存转换层和坏块管理机制,其技术价值在于为上层应用提供稳定、可靠的块设备抽象。这一技术广泛应用于工业控制、网络设备和消费电子等需要本地数据存储的场景。本文聚焦于Freescale IFC控制器,深入解析其硬件抽象角色,涵盖时序生成和硬件ECC等核心功能,并详细演示了如何在U-

weixin_33831673的博客 438

普通人如何上岸华为OD-面试总结

总共有3道算法题,100分值的两道,200分值的一道,不同的毕业院校和专业,通过机试的分值不一样,最少需要150分通过,提前和hr联系,了解自己需要多少分通过。重中之重:哪怕你是背的题库,也请你一定不要直接抄原来的,最好是变更下方法名,否则会判定你重复率过高,从而失去后面的面试机会(实在是不会做再用此方法,凑分数所用,面试官能看到你的代码,会影响你的面试评价)本人女,所以还问道了婚育计划,有对象这点可以说,没有问题,但是如果可以的话,生孩子的时间,可以给hr说这几年不考虑。如果说没有难题,直接就挂了。

weixin_47767264的博客 5452

CTFshow-pwn入门-前置基础pwn32-pwn34

CTFshow-pwn入门-前置基础pwn32-pwn34

你们de4月天的博客 1131

基于linux2.6.16的nand驱动开发(三)

 第三部分:根据sep4020编写具体nand驱动sep4020是一款非常好优秀的arm720T芯片,以下介绍一下sep4020的nand驱动编写 1.       sep4020的nand控制器只支持dma搬运,这也是考虑到一般对nand进行读写都是一页一页的,所以利用dma可以有效的提高效率。DMA也带了一个比较重要的问题,DMA的源和目的需要用实地址,因为DMA不走cpu

技术点亮人生,成功通向卓越 1350

西门子博图TIA Portal V18实战:用LAD梯形图快速上手一个电机启停控制程序

本文详细介绍了如何在西门子博图TIA Portal V18中使用LAD梯形图快速实现电机启停控制程序。从项目创建、硬件组态到LAD编程和仿真调试,逐步引导读者掌握PLC编程的核心逻辑,特别适合工业自动化领域的初学者快速上手。

weixin_30617737的博客 690

Linux学习笔记——设备驱动

设备驱动

zxjiaya的博客 1299

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6430

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7165

AM335x开发板Nand Flash与网卡驱动移植实战

嵌入式Linux驱动开发是构建稳定物联网系统的关键技术,其核心在于硬件与操作系统的无缝对接。以AM335x工业级处理器为例,通过GPMC总线控制器实现Nand Flash存储和DM9000网卡驱动的移植,涉及设备树配置、内核编译优化等关键环节。Nand Flash驱动需要精确配置ECC校验算法和时序参数,而网卡驱动则需确保中断处理和PHY寄存器正确初始化。这些底层驱动在工业控制、边缘计算等场景中直接影响系统可靠性,特别是当涉及高频搜索关键词如BCH错误校正和RMII接口时,更需要严格遵循硬件规范。本次实战通

weixin_30313409的博客 218

YOLOv11与Roboflow数据预处理实战:从原始数据到高性能模型

摘要 Roboflow平台与YOLOv11的结合为计算机视觉开发者提供了高效的工作流。Roboflow提供数据集管理、预处理、增强和导出的一站式解决方案,支持多种标注格式并与YOLOv11无缝集成。YOLOv11在YOLO系列基础上进行了架构创新,包括深度宽度优化、C3k2机制和C2PSA注意力机制,提供从纳米版到超大版的多种模型变体。 使用Roboflow的流程包括:注册工作区、收集/导入数据(支持本地和公开数据集)、专业标注(含SAM辅助)、预处理(尺寸调整、归一化等)和数据增强(几何变换和颜色调整)。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 350
上一篇: 自动登录(不用*DM)并启动X
下一篇: 关于上拉电阻和下拉电阻
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值