编程器固件修改教程

首发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

# 生成新的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501870.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

私有库 nexus Dependency ‘SNAPSHOT‘ not found

私有库 nexus 提示 Dependency SNAPSHOT not found jar包无法下载,困扰了很久,后来才发现,是因为只在 dependencyManagement 里写了引用,没有在具体的 dependencies 里引用,导致无法获取到jar包,低级错误…

测试用例设计方法:正交试验法详解!

01、正交试验法介绍 正交试验法是研究多因素、多水平的一种试验法,它是利用正交表来对试验进行设计,通过少数的试验替代全面试验,根据正交表的正交性从全面试验中挑选适量的、有代表性的点进行试验,这些有代表性的点具备了“均匀…

Linux学习教程 Linux入门教程(超全面 超详细)收藏这一篇就够了

Linux是什么? linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上,很多软件公司考虑到开发成本都首选linux,在…

文本批量高效处理,自动粘贴筛选网址,轻松管理海量链接

在互联网时代,网址链接成为我们获取信息、沟通交流的重要桥梁。然而,面对海量的网址链接,如何快速筛选、整理并管理它们成为了一个挑战。为了解决这一问题,我们特别推出了智能网址筛选功能,让您在自动粘贴的同时&#…

软考103-上午题-【结构化开发】-模块独立

一、命题特点 考试类型: 选择题(3~9分)综合分系题(数据流图【试题一】,15分) 二、系统设计的基本原理 1、抽象 2、模块化 将一个待开发的软件分解为若干个小的简单部分——模块。 每个模块可以独立的开…

基于java+SpringBoot+Vue的校友社交系统设计与实现

基于javaSpringBootVue的校友社交系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 校友社交系统是一个为校友提供一个交流互动、信息共享的平台…

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程,笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC:Objective-C的简称,因为完整的名称过长,后续会经缩写来代替;项目/工程:也称工程,指的是一个A…

canvas画图,画矩形,圆形,直线,曲线可拖拽移动

提示:canvas画图,画矩形,圆形,直线,曲线可拖拽移动 文章目录 前言一、画矩形,圆形,直线,曲线可拖拽移动总结 前言 一、画矩形,圆形,直线,曲线可拖…

bugku-web-源代码

查看源码 <html> <title>BUGKUCTF-WEB13</title> <body> <div style"display:none;"></div> <form action"index.php" method"post" > 看看源代码&#xff1f;<br> <br> <script> …

【御控物联】 JavaScript JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

【Linux】Linux进程控制>进程创建进程终止进程等待进程程序替换

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.进程创建 1.1 fork函数 1.2 fork函数返回值 1.2.1 写时拷贝 1.3 fork常规用法 1.4 fork调用失败的原因 、 2.进程终止 2.1…

什么是 SSL 证书?

SSL 证书的介绍 SSL&#xff08;Secure Sockets Layer&#xff09;证书是一种由数字证书颁发机构&#xff08;CA&#xff09;签发的加密证书&#xff0c;用于在 Web 浏览器和服务器之间建立安全连接。SSL 证书能够确保网站和应用程序的数据传输过程中不被窃听、篡改或伪造&…

【详解】运算放大器工作原理及其在信号处理中的核心作用

什么是运算放大器 运算放大器&#xff08;简称“运放”&#xff09;是一种放大倍数非常高的电路单元。在实际电路中&#xff0c;它常常与反馈网络一起组成一定的功能模块。它是一种带有特殊耦合电路和反馈的放大器。输出信号可以是输入信号的加法、减法、微分和积分等数学运算…

《AIGC重塑金融:AI大模型驱动的金融变革与实践》

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-oBSlqt4Vga1he7DL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【学习】软件测试行业 ,有哪些以就业为主的学习侧重点

今天给所有入行软测的同学们&#xff0c;帮大家梳理下以就业为主的学习侧重点&#xff0c;简单来说就是【这些都是重点&#xff0c;圈起来&#xff0c;要考的】&#xff0c;有需要的小伙伴可以往下看。 建议一&#xff1a;一定要学习一门编程语言&#xff0c;再开始使用自动化测…

uniapp实现列表动态添加

1.效果图&#xff1a; 2.代码实现&#xff1a; 这里没有用uniapp提供的uni-list控件 <template> <view id"app"> <!-- 这里为了让标题&#xff08;h&#xff09;居中展示&#xff0c;给h标签设置了父标签&#xff0c;并设置父标签text-…

微信公众号运营必备工具合集

微信公众号运营必备工具合集 各位同学&#xff0c;想要成为一名合格的公众号运营&#xff0c;必须要搭建一个属于自己的运营工具库&#xff0c;可以在日常工作中最大限度的提高效率。 91微信编辑器 &#xff1a;http://bj.91join.com/ 壹伴助手&#xff1a;https://yiban.io…

深入理解Happens-Before原则:以实例解析并发编程的基石

在最近的一次面试中面试官问到了Happens-Before原则&#xff0c;作此篇回顾下知识点。 在并发编程中&#xff0c;为了保证程序的正确性和可预测性&#xff0c;我们需要理解并遵循一系列内存访问规则。Happens-Before原则定义了线程间可见性和顺序性的保证。所有此篇文章将通过…

针对pycharm打开新项目需要重新下载tensorflow的问题解决

目录 一、前提 二、原因 三、解决办法 一、前提 下载包之前&#xff0c;已经打开了&#xff0c;某个项目。 比如&#xff1a;我先打开了下面这个项目&#xff1a; 然后在terminal使用pip命令下载&#xff1a; 如果是这种情况&#xff0c;你下载的这个包一般都只能用在这一个…

【学习笔记】java项目—苍穹外卖day04

文章目录 1. 新增套餐1.1 需求分析和设计1.2 代码实现1.2.1 DishController1.2.2 DishService1.2.3 DishServiceImpl1.2.4 DishMapper1.2.5 DishMapper.xml1.2.6 SetmealController1.2.7 SetmealService1.2.8 SetmealServiceImpl1.2.9 SetmealMapper1.2.10 SetmealMapper.xml1.…