在脚本 reset2default中看到如下内容:

#!/usr/bin/lua

local hwm = require "hwm"

hwm.myexec("jffs2reset -y")
os.exit(0)

不知道 jffs2reset 的功能,百度一下,发现介绍的也很少,在此,自己研究一下。

首先,执行命令 “jffs2reset -y”, 可以得到如下结果:

root@hbg:/# jffs2reset -y
/dev/mtdblock3 is mounted as /overlay, only erasing files

可以得知,执行结果后,/dev/mtdblock3的内容被擦除。

查看分区

root@hbg:/# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00e30000 00010000 "rootfs"
mtd3: 00a10000 00010000 "rootfs_data"
mtd4: 00150000 00010000 "kernel"

得知,mtd3中的内容为 rootfs_data, 也就是设备的相关配置部分。

查看jffs2reset的源代码(位于fstools-2015-02-25.1中):

文件为 jffs2reset.c

int main(int argc, char **argv)
{
     if (!strcmp(*argv, "jffs2mark"))
         return jffs2_mark(argc, argv);
     return jffs2_reset(argc, argv);     // 带的参数为“-y”,因此走这个分支
}

查看函数 jffs2_reset, 可得如下:

static int
jffs2_reset(int argc, char **argv)
{
 struct volume *v;
 char *mp;

if (ask_user(argc, argv))   // 查看默认参数是否为"-y", 若否,则需要打印使用信息
  return -1;

if (find_filesystem("overlay")) {    // 查找overlay所在的分区
  fprintf(stderr, "overlayfs not found\n");
  return -1;
 }

v = volume_find("rootfs_data");  // 查找rootfs_data 所在的卷
 if (!v) {
  fprintf(stderr, "no rootfs_data was found\n");
  return -1;
 }

mp = find_mount_point(v->blk, 1);   // 查找挂载点
 if (mp) {
  fprintf(stderr, "%s is mounted as %s, only erasing files\n", v->blk, mp);
  foreachdir(mp, handle_rmdir);
  mount(mp, "/", NULL, MS_REMOUNT, 0);     // 重新挂载
 } else {
  fprintf(stderr, "%s is not mounted, erasing it\n", v->blk);
  volume_erase_all(v);
 }

return 0;
}

其中,find_filesystem("overlay")时调用的在 /proc/filesystems 中查找

root@hbg:/# cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   tmpfs
nodev   debugfs
nodev   sockfs
nodev   pipefs
nodev   anon_inodefs
nodev   devpts
        squashfs
nodev   ramfs
nodev   jffs2
nodev   overlayfs
nodev   mtd_inodefs
        ext3
        ext2
        ext4
        ntfs
        vfat
root@hbg:/#

而 mp = find_mount_point(v->blk, 1); 则是查找 /proc/mounts, 其中v->blk 的值为 overlay

root@hbg:/# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root /rom squashfs ro,relatime 0 0
proc /proc proc rw,noatime 0 0
sysfs /sys sysfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0 0
/dev/mtdblock3 /overlay jffs2 rw,noatime 0 0
overlayfs:/overlay / overlayfs rw,relatime,lowerdir=/,upperdir=/overlay 0 0
tmpfs /dev tmpfs rw,relatime,size=512k,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
debugfs /sys/kernel/debug debugfs rw,noatime 0 0

后记:

起始相当于命令 :

mtd -r erase rootfs_data

jffs2reset 实现分析的更多相关文章

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  3. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  4. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  5. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  6. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  9. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

随机推荐

  1. 图解Javascript之字符串

    好东西分享给大家,但要尊重事实!!!因此特别说明:本图非我本人亲自所作,乃我大天朝网友所绘制.个人感觉此图,覆盖全面,细节考虑甚周全,因此分享给大家,同时在此特别感谢网友的无私分享!

  2. 程序处理数据库中值字段值为null的查询显示

    1.如果你做了一个简单的注册界面,需要用户进行注册,但有些项是不必要填的,当用户完成注册时,数据库表中的相应字段的值会写入null,但如何将查询的字段的值null显示出来? 2.首先我们学习一下如何向 ...

  3. IOS7学习之路二(处理ios6到ios7后UITableView的两个显示问题)

    1.在ios6开发的项目,当用ios7的虚拟机显示的时候会出现UINavigationItem遮挡TableView的问题: 下面是对比显示效果: 我的处理方法是: 在UITableViewContr ...

  4. iOS app 发布错误 ERROR ITMS-90167: "No .app bundles found in the package"

    今天iOS 上传 APP 突然发生了这个错误,在排查非证书错误后感到非常奇怪, 因为昨天刚刚上传了另一个APP,一切正常. 仔细回忆了下 昨天和今天唯一的不同就是我升级了 电脑操作系统至 macOS ...

  5. Koala Framework

    Koala Framework是什么?我为什么要写这个框架?   当时的监管组,技术力量累积的很少,还在直连DB,使用着DataTable.DataSet作为数据的承载,监管是公司最近几年主推的项目, ...

  6. 在Visual Studio 2012中使用VMSDK开发领域特定语言1

    在Visual Studio 2012中使用VMSDK开发领域特定语言(一)   前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...

  7. wget ( download the whole page from the website )

    ---恢复内容开始--- wget -m -e robots=off -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1 ...

  8. $(window).height() 文档高度问题

    遇到一个这样的问题: 有个项目做的好好的,测试时一步一步小心过来,做了一段时间后,发现前面的完成的功能出了问题了 首先描述下出问题的功能: 做滚动条下拉加载的时候用的网上找的一种方法 $(window ...

  9. linux内核skb操作

    1,struct sk_buff数据结构 struct sk_buff{ //这两个结构必须放在最前面 struct sk_buff *next; struct sk_buff *prev; stru ...

  10. Ubuntu13.04使用Mesa

    3年前写过一些关于如何使用Mesa的文章,如今再试.有些东西已经变了. 首先安装: sudo apt-get install libgl1-mesa-dev sudo apt-get install ...