改造小蚁摄像头支持免费无限容量云储存(支持小容量SD卡篇)

2024-08-25 16:04

本文主要是介绍改造小蚁摄像头支持免费无限容量云储存(支持小容量SD卡篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过上一篇的操作,我们成功将网盘挂载到了小蚁摄像头上,同时也避免了内存卡的频繁读写。但是现在又引申出另一个问题,原本我们为了尽可能多的保存视频文件选用的都是大容量内存卡。现在视频文件不存内存卡上了,再插这么大的内存卡也没什么意义了。刚好家里翻出来几张十几年前1G容量的内存卡,是不是可以拿它废物利用?


实际测试下来发现,小蚁官方固件对小于4G容量的内存卡做了限制,一旦插入根本不录制视频了,同时也导致上一步的云存储失去了作用。所以破解限制势在必行。

同样通过分析摄像头启动流程,我们发现/home/base/init.sh含有这样一段逻辑

mount tmpfs /tmp -t tmpfs -o size=16m
mkdir /tmp/sd#rtctime=$(/home/base/tools/rtctool -g time)
#date -s $rtctimecheckdiskumount -l /tmp/sd
mount /dev/mmcblk0p1 /tmp/sd
#rm /tmp/sd/record/*.tmp
rm /tmp/sd/*.REC
find /tmp/sd/record -name "*.tmp" -exec rm {} \;

在初始化摄像头的时候,固件会执行checkdisk命令校验内存卡容量和文件系统是否满足要求。通过反编译checkdisk得到以下代码

tfcard_size_v2 = get_tfcard_size_v2();if ( *(_DWORD *)(g_sysconf_ptr + 296) == 1 ){system_cmd_withret_timeout("fdisk /dev/mmcblk0 < /home/base/tools/fdisk.input", v13, 10240, 60);if ( tfcard_size_v2 >= 0x8000 )v9 = "/home/base/tools/mkexfatfs /dev/mmcblk0p1";elsev9 = "/home/base/tools/mkfs.fat /dev/mmcblk0p1";system_cmd_withret_timeout(v9, v13, 10240, 120);*(_DWORD *)(g_sysconf_ptr + 296) = 0;}if ( tfcard_size_v2 >= 3072 ){fs_type = get_fs_type();if ( (unsigned int)(fs_type - 1) > 1 ){dump_string("checkdisk.c", "main", 318, (struct tm *)"FS format error.");system_cmd_withret_timeout("rmmod exfat.ko", v13, 10240, 60);if ( !*(_DWORD *)(g_sysconf_ptr + 296) ){v3 = 10002;*(_DWORD *)(g_sysconf_ptr + 220) = 10002;goto LABEL_12;}umount("/tmp/sd");v3 = 10002;}else{umount("/tmp/sd");if ( fs_type == 1 ){v11 = mount("/dev/mmcblk0p1", "/tmp/sd", "vfat", 0, 0);}else{if ( fs_type != 2 ){umount("/tmp/sd");goto LABEL_10;}v11 = mount("/dev/mmcblk0p1", "/tmp/sd", "exfat", 0, 0);}if ( v11 == -1 ){dump_string("checkdisk.c", "main", 341, &stru_B520);v3 = 10011;goto LABEL_12;}}umount("/tmp/sd");if ( tfcard_size_v2 > 0x8000 && fs_type == 1 ){dump_string("checkdisk.c", "main", 349, (struct tm *)"FS format error.");v3 = 10002;goto LABEL_12;}if ( fs_type == 1 ){v3 = check_partion_vfat();}else if ( fs_type == 2 ){v3 = check_partion_exfat();}
LABEL_10:if ( *(_DWORD *)(g_sysconf_ptr + 296) == 1 )*(_DWORD *)(g_sysconf_ptr + 296) = 0;goto LABEL_12;}

阅读代码我们可以了解到固件使用cat /sys/block/mmcblk0/size 命令检测内存卡容量是否大于3072,如果不满足就停止录制。

所以这里的改造思路已经很清晰了,

1.要么修改chkdisk文件,把3072改小。

2.要么通过hook cat 命令,让它不管什么时候都返回大于3072的数字。

cat /sys/block/mmcblk0/size

经过测试,这两种方案都可行。

这里为了方便演示,我们选择方案2改造.

1.把以下命令保存为shell脚本cat.hook。把脚本放到后台的环境变量可执行目录里,这里是放到/home/base/tools/下

#!/bin/sh# location:/home/base/init.sh
# location:/home/base/tools/cat
# hook system cat command for support < 4GB sd card
if [ "$1" == "/sys/block/mmcblk0/size" ]; thenecho 7802880
else/bin/cat "$@"
fi

2.修改/home/base/init.sh,在执行chkdisk命令的前后加上以下逻辑,这里的思路是检测内存卡之前替换掉正版的cat命令 使它永远输出大于4GB的容量误导固件,检测完之后再把cat还原。

mv /home/base/tools/cat.hook /home/base/tools/cat
chmod +x /home/base/tools/catcheckdiskmv /home/base/tools/cat /home/base/tools/cat.hook

到了这里我们的改造步骤就全部结束了。成功的对老旧内存卡进行了废物利用。

以上脚本已经全部上传至github yi-hack-v5-plugins 希望大家帮忙点个star!

这篇关于改造小蚁摄像头支持免费无限容量云储存(支持小容量SD卡篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106002

相关文章

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod