当前位置: 首页 > news >正文

编程器固件修改教程

首发csdn,转载请说明出处,保留一切权益。

关于编程器固件

所谓编程器固件是用编程器读取嵌入式设备的FLASH存储数据生成的文件,类似于直接用工具复制整个硬盘

编程器固件与普通固件的差异

  • 编程器固件是用特定的结构(按顺序、大小)将一些文件系统分区、文件、镜像包文件等写入到FLASH存储器上-

  • 普通固件是则是升级包的特定格式,需要由升级程序进行校验、拆解后将对应的文件系统分区(或文件)写入对应位置的文件系统分区

编程器固件与普通电脑硬盘格式上的差异

  • 一般嵌入式Flash存储上的文件系统而言不存在分区表的结构,一般是提前约定在特定的存储空间位置写入对应的文件系统分区、镜像。然后将约定的位置写入内核,在内核启动过程中主动按约定位置去寻找、启动文件系统内的根系统。

  • 普通电脑上的硬盘数据一般由分区表和硬盘分区组成,分区的大小顺序信息记录在分区表中,比如常见的MBR和GPT分区表格式,嵌入式的设备FLASH一般不直接描述分区表。而是交给内核处理。

常见编程器固件的内部结构

在编程器固件内一般是划分为一个一个的块,也就是我们常见的mtd,通过cat /proc/mtd 可以看到mtd块设备的信息,而文件系统则是写入在块设备内。

编程器固件的修改

对编程器固件的修改编辑一般分为两个步骤:

  1. 按块拆分编程器固件,也就是将完整的full.bin 拆解成几个mtd0~5的块文件。
  2. 针对不同文件系统的块文件进行编辑处理内部文件
    1. jffs2/yaffs2等文件系统要先用mtd-utils挂载到linux系统上,再对内部文件进行修改,修改后卸载文件系统即可。
    2. squashfs文件系统由于是压缩后的只读文件系统,所以一般需要用squashfs-tools工具包进行解压后再进行修改,修改完成后再进行压缩。再将压缩后的squashfs写入到对应的块文件
  3. 将单独的块文件合并成完整的full.bin 固件 或者直接在full.bin的特定偏移位置进行编辑替换即可。

棒子编程器固件修改

基于上述的一些基础概念的介绍,对编程器固件的修改思路就已经很清晰了

棒子的编程器固件一般分为两种:

  1. 16MB FLASH的编程器固件其中rootfs跟系统分区为jffs2文件系统
  2. 8MB FLASH的编程器固件,由于空间不够,对rootfs分区采用的压缩后的squashfs文件系统

修改流程

修改流程一般如下:

  1. 提取编程器固件(随身WiFi助手对于开了adb的设备可以直接一键提取full.bin和对应MTD分区,无需拆解)
  2. 拆解MTD块设备分区(如果可以进入系统shell下,比如adb,直接cat /proc/mtd可以获取分区结构)
  3. 挂载/解压rootfs分区,userdata分区
  4. 修改3中的分区文件,去控等自定义
  5. 完成修改后打包/卸载分区,再写入到MTD文件,最后合并full.bin

squashfs(8MB)编程器固件修改

以下为Ubuntu系统下操作教程

# 在`full.bin` 所在目录下载 py脚本
wget https://raw.githubusercontent.com/anysoft/mifi-tools/main/squashfs_extract.py# 执行提取脚本 得到 full_498000-74eccc.bin 之类的squashfs文件
python3 squashfs_extract.py output full.bin# 安装squafs-tools 工具
apt install squashfs-tools# 对 full_498000-74eccc.bin 进行解压
# 解压后文件在 squashfs-root/目录下,可以进行去控修改啦
unsquashfs full_498000-74eccc.bin# 去控修改
## 一般删除bin 和sbin目录下的一些流控程序、脚本
## 同时编辑 etc/rc 文件开启 adb、去掉远控代码,加上nv set *** 等开机自动对nv修改的命令
## 修改 etc_ro/default/ 目录下几个配置文件的默认配置
## 修改替换 etc_ro/web web.zip 后台(并不是所有棒子、机都支持全功能后台,由于版本不一样,很多机子是不支持全功能后台的)
## 对于不支持全功能后台的机器只能修改 etc_ro/web/js/set.js 内的一些开关来开启一些隐藏菜单,或者编辑com.js修改一些逻辑# 重新打包,得到 new.squashfs
mksquashfs squashfs-root/ new.squashfs -comp xz# 用 new.squashfs 替换full.bin中的 rootfs分区,得到 full.bin.new的新编程器固件
python3 squashfs_extract.py input full.bin new.squashfs 0

到这里squashfs编程器固件的修改过程就已经完成啦~~

jffs2 文件系统挂载

# 编译安装 mtd-utils
sudo apt update
sudo apt install build-essential liblzo2-dev zlib1g-dev
git clone git://git.infradead.org/mtd-utils.git
cd mtd-utils/
./autogen.sh 
./configure 
make -j8
cp -a mkfs.* /usr/bin/# 挂载 jffs2的mtd  9830400Bytes /1024 = 9600KB
# total_size后面跟的参数单位是KB,并且其大小要大于jffs2镜像文件的大小
sudo modprobe mtdram total_size=9600  
sudo modprobe mtd
sudo modprobe mtdblock
sudo modprobe jffs2## 拷贝jffs2镜像文件到/dev/mtd0:
sudo dd if=mtd4 of=/dev/mtd0
# 挂载(mount)/dev/mtdblock0:
sudo mount -t jffs2 -o rw /dev/mtdblock0 rootfs# 修改去控
。。。。。# 卸载操作
sudo umount rootfs
sudo rmmod jffs2 mtdblock mtdchar mtdram mtd_blkdevs mtd
rm -rf /dev/mtd0# 生成新的jffs2文件
dd if=/dev/mtdblock0 of=new_systemfs.jffs2# 替换 mtd4 合并完整full.bin 刷入即可# 说明
# mtd4 为打包的jffs2文件,也就是原始的rootfs分区
# rootfs 为要挂载到的目录,mtd4的内容会显示到rootfs文件夹目录
# new_systemfs.jffs2 为新的rootfs分区jffs2文件
  1. 下载python3脚本
    1. 下载python3脚本

  2. 提取squashfs的rootfs
    2. 提取squashfs的rootfs

  3. 安装squashfs-tools并解压
    3. 安装squashfs-tools并解压

  4. 解压后的rootfs分区文件夹
    4. 解压后的rootfs分区文件夹

  5. 重新打包得到new.squashfs
    5. 重新打包得到new.squashfs

  6. 更新编程器固件得到full.bin.new
    6. 更新编程器固件得到full.bin.new

  7. 挂载jffs2的rootfs分区
    7. 挂载jffs2的rootfs分区

  8. 输出新的jffs2
    8. 输出新的jffs2

总结

最后总结一下,教程主要参考网上的一些教程,感谢大佬们的付出。
编辑固件最好在linux系统上操作。Windows上可能会导致文件权限出问题,而且一般无法挂载jffs2文件系统。

参考来源

https://blog.csdn.net/u014780165/article/details/43192663
py脚本原创
https://github.com/anysoft/mifi-tools/tree/main

changelog

2024.03.31
增加删除使用过的mtd设备

2024.03.30
发布第一版

相关文章:

编程器固件修改教程

首发csdn,转载请说明出处,保留一切权益。 关于编程器固件 所谓编程器固件是用编程器读取嵌入式设备的FLASH存储数据生成的文件,类似于直接用工具复制整个硬盘 编程器固件与普通固件的差异 编程器固件是用特定的结构(按顺序、大小)将一些文件系…...

Python从原Excel表中抽出数据存入同一文件的新的Sheet(附源码)

python读取excel数据。Python在从原Excel表中抽出数据并存储到同一文件的新的Sheet中的功能,充分展示了其在数据处理和自动化操作方面的强大能力。这一功能不仅简化了数据迁移的过程,还提高了数据处理的效率,为数据分析和管理工作带来了极大的…...

计算机网络实验六:路由信息协议RIP

目录 6 实验六:路由信息协议RIP 6.1 实验目的 6.2 实验步骤 6.2.1 构建网络拓扑、配置各网络设备 6.2.2 网络功能验证测试 6.3 实验总结 6 实验六:路由信息协议RIP 6.1 实验目的 (1)学习RIP协议的工作原理和特点 (2)学习如何选择最短路径路由。 (3)进一步掌握…...

MySQL数据库备份策略与实践详解

目录 引言 一、MySQL数据库备份的重要性 (一)数据丢失的原因 (二)数据丢失的后果 二、MySQL备份类型 (一)根据数据库状态 (二)根据数据的完整性 (三)…...

String类相关oj练习

前言: 此处练习对应博客文章:公主,王子,请点击​​​​​​​ 1.第一次只出现一次的字符 做题首先看清要求和提示: 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不…...

【Linux】进程实践项目 —— 自主shell编写

送给大家一句话: 不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》 自主shell命令编写 1 前言2 项目实现2.1 创建命令行2.2 获取命令2.3 分割命令2.4 运行命令 3 源代码…...

基于SpringBoot和Vue的学生笔记共享平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…...

C++心决之命名空间、重载函数和引用

目录 1. C关键字(C98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性…...

higress使用了解

higress使用了解 了解下 http-echo、httpbin 镜像使用 未按文档实际搭建,但大致是这样 官方文档:https://higress.io/zh-cn/docs/overview/what-is-higress 了解:利用sealos快速安装kubernetes集群:https://note.youdao.com/s…...

Swagger3探索之游龙入海

引言 后端开发中常用的接口调用工具一般使用Postman、ApiPost工具&#xff0c;但后期需要与前端联调&#xff0c;要补充接口文档花费大量时间&#xff0c;此时Swagger3应运而生&#xff0c;大大提高沟通交流的效率。 引用依赖 <!-- Swagger3 调用方式 http://ip:port/swa…...

javaWeb项目-学生考勤管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JAVA技术 JavaSc…...

云备份项目认识、环境搭建以及所使用的库的介绍

一、云备份认识 将本地计算机一个受监管的文件夹的文件上传到服务器中&#xff0c;有服务器组织&#xff0c;客户端可以通过网页将文件查看并且下载下来&#xff0c;下载过程支持断点续传功能&#xff0c;并且服务器会对上传的文件进行热点管理&#xff0c;长时间没人访问的文…...

汇编语言第四版-王爽第2章 寄存器

二进制左移四位&#xff0c;相当于四进制左移一位。 debug命令实操&#xff0c;win11不能启动&#xff0c;需要配置文件 Windows64位系统进入debug模式_window10系统64位怎么使用debugger-CSDN博客...

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展&#xff0c;由蚂蚁集团开发的 Rust 编写的开源 DSL&#xff0c;目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念&#xff0c;解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…...

云原生靶场kebernetesGoat、Metarget

靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…...

【3D目标检测】Det3d—SE-SSD模型训练(前篇):KITTI数据集训练

SE-SSD模型训练 1 基于Det3d搭建SE-SSD环境2 自定义数据准备2.1 自定义数据集标注2.2 训练数据生成2.3 数据集分割 3 训练KITTI数据集3.1 数据准备3.2 配置修改3.3 模型训练 1 基于Det3d搭建SE-SSD环境 Det3D环境搭建参考&#xff1a;【3D目标检测】环境搭建&#xff08;OpenP…...

k8s1.28.8版本安装prometheus并持久化数据

本文参考 [k8s安装prometheus并持久化数据_/prometheus-config-reloader:-CSDN博客](https://blog.csdn.net/vic_qxz/article/details/119598466)前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题&#xff0c;可以后面删除这个策略&#x…...

Mybatis-特殊SQL的执行

1. 模糊查询 在MyBatis中进行模糊查询时&#xff0c;有以下三种常见的实现方式&#xff1a; 1.1. 错误示范 先来个准备操作&#xff0c;并做一个错误示例 根据姓名&#xff0c;模糊查询用户&#xff0c;(x小x) 更新数据表 SQLMapper.java package com.sakurapaid.mybatis3…...

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值&#xff08;Hedging&#xff09; 组合多头头寸(long position)与空头头寸(short position)例&#xff1a;股票与股指期货 投机 衍生金融工具 远期合约 定义&#xff1a;在将来…...

2、Cocos Creator 下载安装

Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统&#xff0c;能够同时对多版本引擎和项目进行统一升级和管理&#xff01;Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口&#xff0c;方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…...

Docker版本:18.06.1安装

1、操作系统&#xff1a;CentOS 7.5以上 2、Docker版本&#xff1a;18.06.1 1、解压 tar -xvf docker-18.06.1-ce.tgz2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下 cp docker/* /usr/bin/3、将docker注册为service vim /etc/systemd/system/docker.service将下列…...

记 SpringBoot 使用@RequestBody 接收不到参数

POST请求&#xff0c;前端传的参数名字跟后端规定的参数一样。但是通过RequestBody注解接收的参数始终为NULL&#xff01; //实体类中属性没有用驼峰命名 private String SubscribeID; /*** 标题*/ private String Title;解决方案&#xff1a; 1、字段上使用JsonProperty(valu…...

unity 打包安卓错误汇集

Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装&#xff0c;最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题&#xff0c;会报错那种&#xff…...

C语言-文件操作

&#x1f308;很高兴可以来阅读我的博客&#xff01;&#x1f31f;我热衷于分享&#x1f58a;学习经验&#xff0c;&#x1f3eb;多彩生活&#xff0c;精彩足球赛事⚽&#x1f517;我的CSDN&#xff1a; Kevin ’ s blog&#x1f4c2;专栏收录&#xff1a;C预言 1. 文件的作用 …...

ADB 操作命令详解及用法大全

ADB 简介 ADB&#xff0c;全称 Android Debug Bridge&#xff0c;是 Google 提供的一款用于 Android 平台设备&#xff08;包括真机和模拟器&#xff09;调试、交互和管理的命令行工具。通过 ADB&#xff0c;开发者可以在电脑上对连接的 Android 设备执行一系列高级操作&#…...

指针数组。

指针数组 int c[5]{1,2,3,4,5};int *pc;printf("p:%d",p);return 0;输出&#xff1a;p:-756683712 说明p是地址值&#xff0c;*p就是取这个地址上的元素的值。所以printf(“*p:%d”,*p); 打印出来的是 *p:1 *pc,c是c[5]数组的首地址元素。 #include <iostream>…...

GitHub开源项目权限管理-使用账号和个人令牌访问

1.打开后台账号设置 2.找到左下角的Developer settings 3.找到Personal access tokens 的 Tokens(classic) 4.选择创建新证书 5.填写证书信息 6.点击生成证书&#xff0c;复制证书并且保存起来&#xff08;血泪教训&#xff0c;证书只会在创建时显示一次&#xff0c;以后就再也…...

DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构

目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试&#xff0c;加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时&#xff0c;确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…...

KaTex 常用公式编辑

原文&#xff1a;https://blog.iyatt.com/?p7854 注&#xff1a;语法上和 Latex 差不多一样&#xff0c;我是因为 WordPress 上使用 WP Githuber MD 插件&#xff0c;才用的 KaTex&#xff08;插件里面的 LaTex 模块有 bug&#xff0c;无法渲染&#xff09; 希腊字母 大写代…...

域攻防渗透之委派攻击

出身寒微&#xff0c;不是耻辱&#xff0c;能屈能伸&#xff0c;方为丈夫。 约束性委派的利用 原理 非约束性委派被委派的机器会直接得到发布委派的用户的TGT&#xff0c;是十分不安全的&#xff0c;因此微软推出了约束性委派&#xff0c;还扩充kerberos协议&#xff0c;添加…...

学做网站前景/公司seo推广营销网站

mysql安装完成后不能用命令systemctl start mysqld #启动systemctl stop mysqld #停止解决办法&#xff1a;find / -name mysql.server会出现服务路径&#xff1a;/home/swkj/tools/mysql/mysql-5.7.31-linux-glibc2.12-x86_64/support-files/mysql.server然后根据…...

网站建设资源/昆山网站制作哪家好

编程实践中经常需要对文件的读写&#xff0c;本篇文章做一个文件追加写的模块。 使用FileWriter类 (1)使用的构造函数为&#xff08;参考JAVA API文档&#xff09;&#xff1a; public FileWriter(String fileName,boolean append) throws IOException (2)参数说明 fileName(St…...

企业宣传片制作公司天津/什么是搜索引擎优化推广

点击上方关注我们!11月15日&#xff0c;由亚信安全主办的“安全世界 5正当时”2020第五空间战略发展高峰论坛在北京盛大举行。来自政府、运营商、金融和能源等关键信息基础设施行业的负责人&#xff0c;生态合作伙伴出席本次活动&#xff0c;“共启安全数字世界”&#xff0c;聚…...

机关党建网站建设策划/seo在线工具

app点击一个按钮跳转到另外一个控制器非常常用&#xff0c;但是如果是点击的是UIImageView如何通过模态视图进入另外一个控制器呢&#xff1f;万一这个UIImageView在自定义的cell或者view里面&#xff0c;那该如何做呢&#xff1f; 首先要先知道的是时间响应者链&#xff0c; 响…...

名片式网站模板/制作网页的流程

VRRP工作原理 简介&#xff1a;VRRP&#xff1a;&#xff08;Virtual Router Redundancy Protocol&#xff09;虚拟路由器冗余协议主用路由器master&#xff1a;负责转发发给虚拟路由器的数据包&#xff0c;并响应ARP请求的路由器。若一台拥有与虚拟路由器有相同IP地址的VRRP路…...

关于自行建设门户网站的请示/网络营销的工具有哪些

D:\百度地图\百度地图\资料\百度地图与定位SDK\百度地图v3.5.0\BaiduMap_AndroidSDK_v3.5.0_All\BaiduMap_AndroidSDK_v3.5.0_Docs\doc\index.html public final class MapView extends ViewGroup ViewGroup是一个ViewGroup,是一个容器,学自定义View的时候我们就知道如果是一个…...