因为使用到了金士顿的32G的TF卡,所以我们要知道它的寿命,可是官网上并没有明确的指出擦写次数的最小值。所以我们只能自己测。

我是设想直接打开文件然后写入数据最后关闭反复一秒一次直到写不进。可有 同事提出来,linux文件系统会每次写的地址不一样,可能测不出来。别人都是把TF卡写满来测试的,可是创建32G的数据来回写很费时间啊,我们还有15天结项能测试出来吗?所以我去论证下我这种简单的方法可行吗?

首先我们得确定我们文件的物理地址是否不变呢?但怎么查看我们的物理地址,这个就难倒我了。只能去源码找找看了。

首先我们要知道大体的linux文件系统的设计思路。

linux系统为了能支持多种多样的文件系统,所以弄了一层虚拟文件系统,它规定一套所有文件系统需要遵守的标准接口。用户只需要操作虚拟文件系统即可操作所有的文件系统。如下:

进程怎么和文件连接以及文件系统连接,在include/linux/sched.h有task_struct结构体

struct task_struct {
......
/* filesystem information */struct fs_struct *fs;
/* open file information */struct files_struct *files;
......
}

结构体中有fs_struct结构体和files_struct结构体。分别描述的是文件系统和文件

首先先看看fs_struct结构体

struct fs_struct {int users;spinlock_t lock;seqcount_t seq;int umask;int in_exec;struct path root, pwd;
};

主要关系的是root和pwd,分别代表当前进程的根目录和当前目录。那我们继续看看path结构体,在include/linux/path.h里

struct path {struct vfsmount *mnt;struct dentry *dentry;
};

原来文件系统结构体中有代表"目录项"的dentry结构指针,和代表"安装"的vfsmount结构指针。dentry结构体并没有找到,只能百度得到的是里面有inode结点指针。inode是什么?通过百度得到其实inode里面记录着文件在存储介质上的位置与分布等信息(这里让我眼前一亮,是否能在文件中也找到这个inode,让我知道文件在磁盘的具体位置呢?)。

我们再来看看files_struct结构体,也是因为自己没能在源码中找到所以就去百度

struct files_struct{atomic_t count; 使用该表的进程数struct fdtable *fdt;struct fdtable fdtab;spinlock_t file_lock ____cacheline_aligned_in_smp;int next_fd; 数值最小的最近关闭文件的文件描述符,下一个可用的文件描述符struct embedded_fd_set close_on_exec_init; 执行exec时需要关闭的文件描述符初值集合struct embedded_fd_set open_fds_init; 文件描述符的屏蔽字初值集合struct file * fd_array[NR_OPEN_DEFAULT]; 默认打开的fd队列};

files_struct里面有关于文件结构的数组,那我们接下来看看file结构

struct file {union {struct llist_node    fu_llist;struct rcu_head    fu_rcuhead;} f_u;struct path        f_path;
#define f_dentry    f_path.dentrystruct inode       *f_inode;   /* cached value */const struct file_operations  *f_op;/** Protects f_ep_links, f_flags.* Must not be taken from IRQ context.*/spinlock_t        f_lock;atomic_long_t        f_count;unsigned int        f_flags;fmode_t         f_mode;struct mutex     f_pos_lock;loff_t           f_pos;struct fown_struct    f_owner;const struct cred   *f_cred;struct file_ra_state    f_ra;u64            f_version;
#ifdef CONFIG_SECURITYvoid          *f_security;
#endif/* needed for tty driver, and maybe others */void         *private_data;#ifdef CONFIG_EPOLL/* Used by fs/eventpoll.c to link all the hooks to this file */struct list_head    f_ep_links;struct list_head f_tfile_llink;
#endif /* #ifdef CONFIG_EPOLL */struct address_space    *f_mapping;#ifdef CONFIG_FILE_TABLE_DEBUGstruct hlist_node f_hash;
#endif /* #ifdef CONFIG_FILE_TABLE_DEBUG */
} __attribute__((aligned(4)));  /* lest something weird decides that 2 is OK */

虽然也有*f_inode但是后面注释告诉我们不是这个。又看到了path,刚刚分析了里面不是也有dentry,dentry里面有inode。再来捋一捋我们的文件系统的逻辑图

这样我们只要获取到inode信息就可以测试文件系统是怎么存放文件的。但是我们怎么获取inode信息呢?发现shell指令

ls -i

能获取到inode number,那inode number怎么获取到实际地址呢?

block_group_number = (inode_number-1) / inodes_per_group inode_offset = (inode_number-1) % inodes_per_groupinode_location_in_byte = inode_talbe_location+ inode_offset*inode_size = inode_talbe_location+ ((inode_number-1) % inodes_per_group)*inode_size

通过上面这三个公式,其实我们只要确定inode number不变就可以确定块地址没有大变化,则我所想的方法是可以检测的。

那么下面来看看是否会发生变化。

1.测试创建写入文件然后删除文件再创建写入文件

发现块号从337变到338,所以该方式无法进行检测某一块区域的擦写次数。因为它的区域会变。

2.测试创建写入文件然后关闭,之后打开继续写入

哇,可以,没有改变inode number,也就是所在块的区域没有改变。

好,我们就用这一种方式,快速的测试TF卡的寿命。理论上是这样,赶紧和我的另一个同事沟通。

他说不可能,那只是内存中虚拟映射的。然后安装上面的操作执行并在创建结束和开机时都用单片机去读出地址值。惊人的是居然是同一个地址。那就是说我们测TF卡寿命的测试程序只要创建一个文件,然后一直修改即可对同一地址擦写。

linux下TF卡测试寿命的测试程序编写相关推荐

  1. ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)

    ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...

  2. Linux下使用Speedtest测试网速教程

    Linux下使用Speedtest测试网速教程 文章目录: 一.通过Speedtest官网直接测试网络速度 二.通过下载源码,在命令行中测试网速 1.下载安装 2.Speedtest的参数使用: 有时 ...

  3. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  4. 用Prime95来做linux下CPU压力测试

    Prime95是用来做linux下CPU压力测试的,由GIMPS (Great Internet Mersenne Prime Search)所提供,主要是透过运算找出梅森质数,质数(Prime nu ...

  5. linux下网速测试

    linux下网速测试 speedtest 是一个知名的网速测试工具,它是用 Python 写成的,可以使用 apt 或 pip 命令来安装. 安装 sudo apt install speedtest ...

  6. Linux 下 N 卡 GPU 测试

    在win系统下测试工具比较多,现在 N 卡多用于深度学习,有时候会在 Linux下进行 N 卡测试. 测试工具 gpu-burn: Multi-GPU CUDA stress test,github地 ...

  7. tf卡测试软件_真正的白菜价?1G不到1元,铠侠(原东芝存储)microSD卡评测

    在我们的生活中总是离不开存储媒介,特别是进入数字时代,资料的存储显得尤为重要.而对于一些数码产品,microSD卡(TF卡)或者SD卡依旧是常用的选择.而说起存储卡就不得不提到东芝存储,不过在去年东芝 ...

  8. linux克隆tf卡中的内容,TF/SD内存卡数据克隆怎样做图文详细教程

    U盘的称呼最早来源于朗科科技生产的一种新型存储设备,名曰"优盘",使用USB接口进行连接.U盘连接到电脑的USB接口后,U盘的资料可与电脑交换.而之后生产的类似技术的设备由于朗科已 ...

  9. Linux下nvidia压力测试,一种服务器linux系统下GPU压力测试的监控方法与流程

    本发明属于服务器测试技术领域,具体涉及一种服务器linux系统下GPU压力测试的监控方法. 背景技术: 随着社会的快速发展,人们对高网络性能.快速存储.大量内存.超高计算能力的GPU的需求越来越大,产 ...

  10. u-boot 下tf卡sd卡U盘读取指令

    1. tf 开 1) 查看:fatls mmc 0 [目录(默认根目录)] 2) 把tf卡的内容读取到内存:fatload mmc 0 0x40000000 <file> 2. u 盘(暂 ...

最新文章

  1. hdc mfc 画扇形图_使用echarts绘制条形图和扇形图
  2. dalvik对于Java方法调用的实现
  3. c语言电子期末考试题,山东师范大学11-12电子C语言期末试题
  4. Spring 事务原理和使用
  5. 【CodeForces - 768C】Jon Snow and his Favourite Number(思维,技巧,套路,数学异或,循环节,trick)
  6. HDU-2159-FATE(dp)
  7. Mongo DB命令简介
  8. Class.forName()方法抛出异常
  9. 可能是你见过的最完善的微前端解决方案
  10. 如何用20%精力搞定80%任务
  11. 大数据技术全解之曹冲称象与大数据思想
  12. 2022美国大学生数学建模竞赛B题思路
  13. c4d导出html,C4D动力学如何导出fbx或者其他格式?
  14. 微计算机原理与接口电子科技大学,西安电子科技大学考研复试微机原理与接口技术...
  15. 基于 Retinex 的几种图像增强算法总结
  16. 通过代理实现权限控制
  17. C语言编写函数求字符串长度的几种实现方法
  18. 文献管理软件Mendeley优缺点分析
  19. 灌篮高手微信登录是什么服务器,灌篮高手微信登录版本
  20. 转载于 Bob Lyle 谈 DB2 中的 OLAP 函数

热门文章

  1. 点击自定义按钮弹出百度商桥对话框
  2. php使用iframe框架,ThinkPHP后台首页使用iframe(框架)
  3. 使用python爬取股票基金的最新数据消息,并用Excel绘制树状图一目了然
  4. Winsock2_WSADATA
  5. 原始套接字Raw Socket基础-- WSADATA wsaData(转)
  6. 有趣的 Google command line shell
  7. 脑机接口技术介绍、应用与挑战
  8. 一文读懂长非编码RNA(lncRNA)的分类、功能及测序鉴定方法
  9. kubeedge源码分析
  10. BIM设计/工程设计图形工作站硬件配置方案详解