jffs2reset 实现分析
在脚本 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 实现分析的更多相关文章
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
随机推荐
- JS事件冒泡、停止冒泡、addEventListener--实例演示
问题: <div class='item' id='outer' onclick="alert('outer')"> <div class='item' id=' ...
- LatestResultsProvider
LatestResultsProvider 前言 阅读本文前,需要读者对happens-before比较熟悉,了解非阻塞同步的一些基本概念.本文主要为happens-before法则的灵活运用,和一些 ...
- Clob类型转换成String类型
oracle中表结构如下: create table GRID_RESOURCE ( ID VARCHAR2(50), CNNAME VARCHAR2(50), TYPE VARCHAR2(50), ...
- Web API CSRF保护实现
Web API CSRF保护实现 这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCol ...
- Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal
Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal Linuxjournal 网站经典文章翻译,原文地址: Large-S ...
- Arduino 各种模块篇 蓝牙模块 手机蓝牙控制Arduino LED灯
解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...
- [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送
NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...
- UVa-Where's Waldorf?
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- net软件工程师求职简历
Net软件工程师求职简历 姓 名: 王静静 性 别: 女 出生日期: 1991-12 籍 贯: 河北 居住地: 北京 学 历: 专科 E-mail: 335659753@qq. ...
- Unity3D中使用MiniJson解析json的例子
json: --------------------------------- { "name":"中国", "province&qu ...