一种基于linux操作系统的nandflash无文件系统的坏块管理方法

文档序号:1921462 发布日期:2021-12-03 浏览:13次 >En<

阅读说明:本技术 一种基于linux操作系统的nandflash无文件系统的坏块管理方法 (LINUX operating system-based bad block management method for NANDFLASH file-free system ) 是由 张泽坤 于 2021-07-20 设计创作,主要内容包括:本发明提供一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法,所述坏块管理方法包括:在LINUX操作系统下,通过修改NANDFLASH的驱动程序,使在对块读、写和擦除时自动跳过坏块。本发明利用LINUX操作系统内核源码可修改的特性,对NANDFLASH的驱动程序进行特定的修改,使其具有自动跳过坏块的功能。从而使应用程序在无文件系统的情况下无感的,连续读、写、擦除NANDFLASH的空间,无需担心坏块的问题。(The invention provides a method for managing bad blocks of a NANDFLASH file-free system based on a LINUX operating system, which comprises the following steps: under the LINUX operating system, the driver of NANDFLASH is modified, so that the bad block is automatically skipped when the block is read, written and erased. The invention utilizes the characteristic that the kernel source code of the LINUX operating system can be modified to specifically modify the driver program of the NANDFLASH, so that the NANDFLASH has the function of automatically skipping bad blocks. Therefore, the application program is insensible under the condition of no file system, the space of the NANDFLASH is continuously read, written and erased, and the problem of bad blocks is not needed to be worried about.)

一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理 方法

技术领域

本发明涉及文件系统的安全管理技术领域,具体而言,涉及一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法。

背景技术

由于NANDFLASH的工艺,在芯片出厂时,厂家只能保证块0不是坏块。对于其它块则均有可能是坏块。因此在读写NANDFLASH的时候需要对坏块进行管理,避免读写操作坏的块。在linux操作系统中都是通过JFFS2、YAFFS2、FlashFx等这些专门针对NANDFLASH的文件系统来对坏块进行管理。有了文件系统之后,使用者只需调用文件系统的接口来对NANDFLASH进行读、写和擦除等操作,而无需关心操作的具体块和坏块的管理问题。但是有了文件系统之后,如果要删除NANDFLASH上存储的数据(即文件),通过调用文件系统的删除接口只是从文件系统的文件分配表中删除了此数据(即文件)的信息。而真正存储数据的块上的数据并没有被删除。通过相应的烧写工具或者程序任然可以将块上的数据读取出来。在特种领域容易造成数据泄露,缺乏安全性。如果不使用相应的文件系统,应用层可通过NANDFLASH的设备节点(如:/dev/mtd0)来操作NANDFLASH。但又无法对坏块进行判断,不能跳过相应的坏块。如果对坏块进行操作将无法正确存储数据。

发明内容

本发明旨在提供一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法,以解决使用文件系统进行管理的NANDFLASH,在删除时并不能真正删除数据,容易造成数据泄露,安全性缺乏,而不使用文件系统对NANDFLASH进行操作又无法避开坏块的问题。

本发明提供的一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法包括:在LINUX操作系统下,通过修改NANDFLASH的驱动程序,使在对块读、写和擦除时自动跳过坏块。

进一步的,所述坏块管理方法包括如下步骤:

S1,获取NANDFLASH的坏块;

S2,根据获取的坏块设计自动跳过坏块的算法;

S3,基于设计的自动跳过坏块的算法修改NANDFLASH的驱动程序;

S4,在修改NANDFLASH的驱动程序后重新编译LINUX操作系统的内核。

进一步的,步骤S1中所述获取NANDFLASH的坏块的方法包括如下子步骤:

S11,在内核文件nand_bbt.c文件中定义一个长度为32的整形数组以及一个整形变量;所述整形数组用于保存NANDFLASH的坏块ID;所述个整形变量用于记录坏块的总个数;

S12,将create_bbt()函数扫描的坏块ID保存到整形数组中,并用整形变量记录坏块的总个数;

S13,利用内核EXPORT_SYMBOL宏导出整形数组和坏块的总个数。

进一步的,所述整形数组中保存的坏块ID由小到大排列。

进一步的,步骤S2中所述根据获取的坏块设计自动跳过坏块的算法的方法包括如下子步骤:

S21,判断输入的块ID是否小于整形数组中的最小的坏块ID:

如果是,则表明输入的块ID前面没有坏块,不需要跳过坏块,即操作的块就为当前块并返回当前块ID;

如果不是,则执行步骤S22;

S22,判断输入的块ID+坏块的总个数是否大于整形数组中最大的坏块ID:

如果是则返回block_id+nandflash_bbt_cnt为新的块ID;其中,block_id表示输入的块ID,nandflash_bbt_cnt表示坏块的总个数;

如果不是,则执行步骤S23;

S23,判断输入的ID是否在整形数组中:

如果是,则获取比输入的块ID小的坏块个数为bcnt,以及从输入的ID开始连续坏块的个数为ccnt1,则新的块ID为new_id=block_id+bcnt+ccnt1;

如果不是,则新的块ID为new_id=block_id+bcnt,然后执行步骤S24;

S24,判断步骤S23得到的新的块ID是否在整形数组中:

如果是,则获取在整形数组中,跟新的块ID为连续坏块的个数ccnt2,则new_id=new_id+ccnt2+1;

重复步骤S24,直到新的块ID不在整形数组中,则执行步骤S25;

S25,获取比新的块ID小的坏块个数为m,获取比输入的块ID小的坏块个数为n;如果m>n,则new_id=block_id+m,执行步骤S26;

S26,重复步骤S24~S25生成最终新的块ID;

S27,返回步骤S26生成的最终的新的块ID。

进一步的,步骤S3中所述基于设计的自动跳过坏块的算法修改NANDFLASH的驱动程序的方法包括如下子步骤:

对于读、写操作,修改内核文件nand_spi.c文件中的spinand_read_page()和spinand_program_page()两个函数,将传入的页ID转换成对应的块ID;然后再调用步骤S2设计的自动跳过坏块的算法获取新的块ID,然后将获取的新的块ID换算成新的页ID;最后使用新的页ID去操作NANDFLASH。

对于擦除操作,则spinand_erase_block()函数直接调用步骤S2设计的自动跳过坏块的算法获取新的ID,然后对新的ID进行块擦除。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

本发明利用LINUX操作系统内核源码可修改的特性,对NANDFLASH的驱动程序进行特定的修改,使其具有自动跳过坏块的功能。从而使应用程序在无文件系统的情况下无感的,连续读、写、擦除NANDFLASH的空间,无需担心坏块的问题。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例的基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例

本实施例提出一种基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法,所述坏块管理方法包括:在LINUX操作系统下,通过修改NANDFLASH的驱动程序,使在对块读、写和擦除时自动跳过坏块。从而应用程序可以在NANDFLASH不使用文件系统的情况下进行连续空间的读、写和擦除等操作,进而提高数据的安全性。

如图1所示,所述坏块管理方法具体包括如下步骤:

S1,获取NANDFLASH的坏块:

S11,在内核文件nand_bbt.c文件中定义一个长度为32的整形数组以及一个整形变量;所述整形数组用于保存NANDFLASH的坏块ID;所述个整形变量用于记录坏块的总个数;如下所示:

int nandflash_bbt[32]={0};nandflash_bbt即为定义的整形数组;

int nandflash_bbt_cnt=0;nandflash_bbt_cnt即为定义的整形变量。

S12,将create_bbt()函数扫描的坏块ID保存到整形数组(nandflash_bbt)中,并用整形变量(nandflash_bbt_cnt)记录坏块的总个数;其中,所述整形数组中保存的坏块ID由小到大排列。

S13,利用内核EXPORT_SYMBOL宏导出整形数组和坏块的总个数。如下所示:

EXPORT_SYMBOL(nandflash_bbt);

EXPORT_SYMBOL(nandflash_bbt_cnt)。

S2,根据获取的坏块设计自动跳过坏块的算法:

S21,判断输入的块ID(表示为block_id)是否小于整形数组中的最小的坏块ID:

如果是,则表明输入的块ID前面没有坏块,不需要跳过坏块,即操作的块就为当前块并返回当前块ID;

如果不是,则执行步骤S22;

S22,判断输入的块ID+坏块的总个数(即block_id+nandflash_bbt_cnt)是否大于整形数组中最大的坏块ID:

如果是则返回block_id+nandflash_bbt_cnt为新的块ID;

如果不是,则执行步骤S23;

S23,判断输入的ID是否在整形数组中:

如果是,则获取比输入的块ID小的坏块个数为bcnt,以及从输入的ID开始连续坏块的个数为ccnt1,则新的块ID为new_id=block_id+bcnt+ccnt1;需要说明的是:(1)如果输入的块自身就是个坏块,则比自身ID小的坏块个数包含自身;(2)连续的坏块个数是指跟此坏块ID连续的坏块个数,如有坏块ID为3、6、7、8、12。则跟坏块ID为6的连续坏块就是7、8,即连续坏块的个数为2);

如果不是,则新的块ID为new_id=block_id+bcnt,然后执行步骤S24;

S24,判断步骤S23得到的新的块ID是否在整形数组中:

如果是,则获取在整形数组中,跟新的块ID为连续坏块的个数ccnt2,则new_id=new_id+ccnt2+1;

重复步骤S24,直到新的块ID不在整形数组中,则执行步骤S25;

S25,获取比新的块ID小的坏块个数为m,获取比输入的块ID小的坏块个数为n;如果m>n,则new_id=block_id+m,执行步骤S26;

S26,重复步骤S24~S25生成最终新的块ID;

S27,返回步骤S26生成的最终的新的块ID。

S3,基于设计的自动跳过坏块的算法修改NANDFLASH的驱动程序:

对于读、写操作,修改内核文件nand_spi.c文件中的spinand_read_page()和spinand_program_page()两个函数,将传入的页ID转换成对应的块ID;然后再调用步骤S2设计的自动跳过坏块的算法获取新的块ID,然后将获取的新的块ID换算成新的页ID;最后使用新的页ID去操作NANDFLASH。

对于擦除操作,则spinand_erase_block()函数直接调用步骤S2设计的自动跳过坏块的算法获取新的ID,然后对新的ID进行块擦除。

S4,在修改NANDFLASH的驱动程序后重新编译LINUX操作系统的内核。

至此,本发明实现了基于LINUX操作系统的NANDFLASH无文件系统的坏块管理方法,其利用LINUX操作系统内核源码可修改的特性,对NANDFLASH的驱动程序进行特定的修改,使其具有自动跳过坏块的功能。从而使应用程序在无文件系统的情况下无感的,连续读、写、擦除NANDFLASH的空间,无需担心坏块的问题。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于Java将OFD文件转换为图片的方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!