链接: http://www.iytc.net/wordpress/?p=1757

挂载信息:

root@K2:~# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/mtdblock6 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,noatime,lowerdir=/,upperdir=/overlay)
tmpfs on /dev type tmpfs (rw,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
/dev/mtdblock5 on /mnt/mtdblock5 type squashfs (ro,relatime)

挂载大小:

root@K2:~# df -h
Filesystem Size Used Available Use% Mounted on
rootfs 1.0M 936.0K 88.0K 91% /
/dev/root 5.5M 5.5M 0 100% /rom
tmpfs 29.9M 3.2M 26.7M 11% /tmp
/dev/mtdblock6 1.0M 936.0K 88.0K 91% /overlay
overlayfs:/overlay 1.0M 936.0K 88.0K 91% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mtdblock5 5.5M 5.5M 0 100% /mnt/mtdblock5
root@K2:~#

分区信息:
root@K2:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00800000 00010000 "ALL"
mtd1: 00030000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 007b0000 00010000 "firmware"
mtd5: 0067bbd2 00010000 "rootfs"
mtd6: 00100000 00010000 "rootfs_data"

地址信息(22.4.5.42官方版本,各版本地址不一样):

root@K2:~# dmesg

...

[ 1.680000] Creating 5 MTD partitions on "raspi":
[ 1.692000] 0x000000000000-0x000000800000 : "ALL"
[ 1.700000] 0x000000000000-0x000000030000 : "Bootloader"
[ 1.712000] 0x000000030000-0x000000040000 : "Config"
[ 1.724000] 0x000000040000-0x000000050000 : "Factory"
[ 1.736000] 0x000000050000-0x000000800000 : "firmware"
[ 1.748000] 0x00000018442e-0x000000800000 : "rootfs"
[ 1.756000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[ 1.784000] mtd: partition "rootfs_data" created automatically, ofs=0x700000, len=0x100000
[ 1.800000] 0x000000700000-0x000000800000 : "rootfs_data"

分区图:

分区是嵌套(nested)的,我们把他分成几层来看:
第0层Layer0: 对应Flash芯片,8MiB大小, 焊接在PCB上, 通过SPI连接到CPU(SoC),分区给mtd0
第1层Layer1: 把总存储空间分为了4个区,分别为bootloader(u-boot)、config、factory、firmware
第2层Layer2: 把mtd4 (固件) 进一步分割为 kernel(内核) 和 mtd5 (rootfs)。在固件的一般处理流程中,Kernel二进制文件先由LZMA打包, 然后用gzip压缩之后文件被直接写入到raw flash中而不mount到任何文件系统上
第3层Layer3: 把rootfs更进一步分割成 mtd6(rootfs_data) 和剩下的未命名部分 ,未命名部分用来容纳SquashFS-ROM分区(5.5M大小),rootfs_data挂载为/overlay,即用户配置分区,总大小为1M

要提取厂家的ROM固件,执行如下语句
dd if=/dev/mtd5 of=/tmp/fm.bin
用winscp将fm.bin传到计算机,查看大小:

如果要生成一个固件,完整的过程如下:

1、提取厂家固件

dd if=/dev/mtd5 of=/tmp/k2.bin

2、在Ubuntu中的MTK SDK的目录(~/mtk/openwrt-3.10.14/staging_dir/host)建立如下脚本文件rom.sh:

#!/bin/sh
sudo echo "Starting..."
MKSQSHFS4='./bin/mksquashfs4'
PADJFFS2='./bin/padjffs2'
case "$1" in
'extract'|'e')
offset1=`grep -oba hsqs $2 | grep -oP '[0-9]*(?=:hsqs)'`
offset2=`wc -c $2 | grep -oP '[0-9]*(?= )'`
size2=`expr $offset2 - $offset1`
#echo $offset1 " " $offset2 " " $size2
dd if=$2 of=kernel.bin bs=1 ibs=1 count=$offset1
dd if=$2 of=secondchunk.bin bs=1 ibs=1 count=$size2 skip=$offset1
sudo rm -rf squashfs-root 2>&1
sudo unsquashfs -d squashfs-root secondchunk.bin
rm secondchunk.bin
;;
'create'|'c')
sudo $MKSQSHFS4 ./squashfs-root ./newsecondchunk.bin -nopad -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -b 256k -processors 1
sudo chown $USER ./newsecondchunk.bin
cat kernel.bin newsecondchunk.bin > $2
$PADJFFS2 $2
rm newsecondchunk.bin
;;
*)
echo 'run
"modify-firmware.sh extract firmware.bin"
You will find file "kernel.bin" and folder "squashfs-root".
Modify "squashfs-root" as you like,after everything is done,run
"modify-firmware.sh create newfirmware.bin"
And you will get a modified firmware named newfirmware.bin.
'
;;
esac

脚本权限设置为可执行

3、将k2.bin文件拷贝到~/mtk/openwrt-3.10.14/staging_dir/host目录,并执行:

./rom.sh e k2.bin

会自动将ROM部分解压到./squashfs-root目录:

4、编辑固件内容:在squashfs-root目录点右键,“以管理员权限打开”进行编辑

5、修改完成后,在~/mtk/openwrt-3.10.14/staging_dir/host目录执行:

./rom.sh c k2_new.bin

k2_new.bin即为新固件

重新生成的固件(firmware)有可能大于或小于官方固件,没有关系,rootfs_data的起始位置是根据固件大小来自动调整的,firmware大了,用户的可写空间就小了

注意:固件大小不能超出mtd4的大小( 7872KiB)

FLASH分区图及ROM固件提取、修改及打包相关推荐

  1. 固件提取-flash芯片

    固件 路由flash 固件提取 固件模拟 flash 固件 固件:也称 firmware, 通常用于嵌入式领域,泛指运行于硬件之上的操作系统软件.刷固件或者更新固件是指删除原系统,更换新的系统软件. ...

  2. linux提取手机rom,提取安卓手机ROM固件中的APP

    原标题:提取安卓手机ROM固件中的APP 很多品牌手机都会预装特色的APP,而这些APP却很难在第三方应用市场下载到.还好,我们可以从该手机ROM固件中提取中意的APP. 在手机官网通常可以下载各种版 ...

  3. 苹果计算机错误怎么改,Mac电脑未能修改分区图,因为文件系统验证失败怎么办?...

    有朋友会发现mac电脑提示分区失败然后说发生错误提示为 未能修改分区图,因为文件系统验证失败 ,那么碰到此问题我们要如何来解决呢?下面一聚教程小伙伴就为各位介绍,有兴趣了解的可以和小编一起来看看哦. ...

  4. Firmware固件提取及分析技术

    概念 固件(firmware)是一种写入硬件设备的软件,作用是对应用和各项系统功能实时控制.固件中包含底层代码,这些代码能实现软件对硬件的操作.运行固件的设备称为嵌入式系统,嵌入式系统的硬件资源在存储 ...

  5. OpenWRT flash分区、文件系统

    1.了解分区 在路由器的flash上时有分区的. openwrt首次刷机完成后,再过一段时间会有以下提示 jffs2: notice: (246) jffs2_build_xattr_subsyste ...

  6. Android Nand Flash 分区

    一般的嵌入式Linux开发人员是要清晰区分不同器材的作用和名称的.比如系统,内核所有保存在Nand Flash之上,断电后仍然存在,而运行后程序是装入SDRAM或Mobile DDR之类的内存设备运行 ...

  7. 启明云端分享|sigmastar SSD201 \ SSD202D内存大小问题及flash分区问题解答

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  8. RT-thread应用讲解——FLASH分区

    RT-thread应用讲解--FLASH分区 目录 RT-thread应用讲解--FLASH分区 前言 一.挂载FLASH 二.ENV配置 1.打开on-chip flash 2.打开FAL软件包 3 ...

  9. esp32 Flash分区与OTA功能简析

    升级功能对于所有的嵌入式产品都是非常重要的.尤其是当产品量产/销售阶段,已经没有条件让厂家对产品升级,因此升级方式的设计必须防呆防错以及稳定. 乐鑫ESP32作为蓝牙WIFI合一的物联网芯片,开发成产 ...

最新文章

  1. 改变gazebo背景颜色
  2. 关于四种语言中substring()方法参数值的解析
  3. 命运(HDU 2571 简单动态规划)
  4. 【ubuntu安装交叉编译器】安装交叉编译器
  5. idea 配置mysql逆向_idea逆向工程配置
  6. python3中input()方法报错traceback变量未定义的解决方法
  7. congestion map解读
  8. 远程桌面管理工具汇总
  9. h5 +css +js +jq 基础知识总结
  10. 台式计算机怎么换内存条,笔者教你如何更换电脑内存条
  11. CTF—命令执行总结
  12. web展示萤石云视频
  13. 【Linux】linux 终端报Message from syslogd
  14. Kal系统学习:记录一次wifi破解过程
  15. cat和cp的神奇用法:制作U盘安装盘
  16. Copyright©到底是什么意思?
  17. 由爆火的“羊了个羊”浅谈小游戏开发
  18. IDEA配置Cplex
  19. 手把手教你采集京东销售数据并做简单的数据分析和可视化
  20. Maltab GUI课程设计——网络爬虫程序(基金连涨连跌提醒)

热门文章

  1. 动态ip软件基本知识和动态ip代理使用方法扫盲
  2. Cadence Allegro如何制作椭圆形通孔焊盘?
  3. 养老院管理系统(Java+Web+MySQL)
  4. 高级的E2EE——交叉签名(区块链密码签名)(第二篇-签名状态篇)
  5. 小程序去除button按钮的默认样式
  6. 3d卷积和2d卷积1d卷积运算-CNN卷积核与通道讲解
  7. ubuntu 安装 QT 【亲测有效】
  8. rt-thread4.1.0和nk-980iot bsp开发记录
  9. 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究
  10. 如何通过Git客户端从Gitlab下载代码