在脚本 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

转载于:https://www.cnblogs.com/rohens-hbg/p/5604548.html

jffs2reset 实现分析相关推荐

  1. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  2. 2022-2028年中国自动驾驶系统行业现状调研分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国自动驾驶系统行业市场行业相关概述.中国自 ...

  3. 2022-2028年中国阻尼涂料市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国阻尼涂料行业市场行业相关概述.中国阻尼涂 ...

  4. 2021-2028年中国阻燃装饰行业市场需求与投资规划分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国阻燃装饰行业市场行业相关概述.中国阻燃装 ...

  5. 2022-2028年全球与中国漂白吸水棉市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国漂白吸水棉行业市场行业相关概述.全 ...

  6. 2022-2028年全球与中国青苔清洗剂市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国青苔清洗剂行业市场行业相关概述.全 ...

  7. 2022-2028年全球与中国氢碘化物市场智研瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国氢碘化物行业市场行业相关概述.全球 ...

  8. 2022-2028年全球与中国人字拖市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国人字拖行业市场行业相关概述.全球与 ...

  9. 2022-2028年全球与中国乳胶丝市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国乳胶丝行业市场行业相关概述.全球与 ...

最新文章

  1. PyCharm-professional-2018.2.2 - 破解
  2. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素
  3. 如何使用 MySQL 安装后自带的帮助文档
  4. 文字color颜色渐变(可一直变换) - 代码篇
  5. 二次元HTML导航页网站源码
  6. 电商产品页多种出彩表现设计手法!
  7. VSCode配置jupyter逐行语句运行python
  8. caffe的Matlab接口的使用方法
  9. Spring概述(精)
  10. 手动安装ojdbc6
  11. 【源码】高精度31波段音频均衡器
  12. VScode与SumatraPDF反向搜索跳转问题
  13. Close 和 Dispose 方法到底有什么不同?
  14. tomcat是干什么的? 什么叫web容器以及作用?
  15. 平面向量内积坐标公式推导_平面向量的所有公式-平面向量公式
  16. win7显示器双屏显示怎么设置
  17. api 3.0 个性化地图缩放时出现白色的底图,然而 api GL缩放时显示正常,调用api 3.0 接口时,如何避免地图缩放时出现白色底图
  18. MySql数据库-58沈剑 架构师之路
  19. Terraform指南:安装
  20. MySQL忘记root密码解决方案

热门文章

  1. java中qualifier注解怎么写_Java 注解 Qualifier
  2. python推荐系统设置_用Python构建你自己的推荐系统
  3. linux终端 中国象棋,在Deepin系统下安装Xboard并使用它玩中国象棋
  4. oracle中定义表类型数据,oracle 定义表字段域的数据类型
  5. ios手机怎么连接adb命令_没有 mac 的福音,windows 下对 ios 进行操作 (类似 android 的 adb 操作)...
  6. SQLAlchemy Transactions
  7. jinja Escaping
  8. javascript Blob
  9. PannerNode
  10. java for 面试题_Java面试题整理