1. 程式人生 > >FLASH分割槽圖及ROM韌體提取、修改及打包

FLASH分割槽圖及ROM韌體提取、修改及打包

連結: http://www.iytc.net/wordpress/?p=1757

掛載資訊:

[email protected]:~# 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)

掛載大小:

[email protected]:~# 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

[email protected]:~#

分割槽資訊:
[email protected]:~# 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官方版本,各版本地址不一樣):

[email protected]:~# 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提取修改打包

連結: http://www.iytc.net/wordpress/?p=1757 掛載資訊: [email protected]:~# mount rootfs on / type rootfs (rw) /dev/root on /rom type sq

RK3288移植Ubuntu 檔案系統升級製作

1,  linux下 unpack 解包 報錯 [email protected]:/opt/rk-linux/mkimg# ./unpack.sh start to unpack update.img... ********RKImageMaker v

聊聊從iOS提取系統庫符號

“民之失德,乾餱以愆;他山之石,可以攻玉。”- 《詩經》            當程式發生崩潰並有機會獲取到崩潰堆疊時,還原崩潰堆疊從而定位錯誤顯得非常重要。使用者符號的還原非常簡單,因為在打包

如何備份flash上的openwrt的

最近接觸的板子比較多,各種型別的,各種廠家的,有時候在刷路由器的韌體之前想先備份一下路由器原廠的韌體,當然就是從flash上讀出來。 首先要能夠接到板子裡面去,最好是能ssh吧 然後看一下板子的flash分割槽,就用手頭的一款板子為例  圖中能看到有六個區,其實只是四個

利用OpenWRT的Image Builder修改生成不同大小ROM 4MB改8MB 新增package自定義

如果生成的二進位制檔案大小超過了設定的rom大小的話,編譯不會生成相應的bin檔案 很多玩家都會選擇改ROM,比如說很多路由只有4MB ROM 很多人都會選擇改成8MB或者更大,淘寶上亦有很多改好的或者是像GL-iNet這種自己做OpenWRT路由的產品,DIYer不

卡刷romupdate.zip的製作教程

  對於第三方ROM來講,通常都包括兩部分,一個recovery image,一個update.zip。而大多數的第三方ROM的特色,就是加入了很多東西,比如superuser程式來獲得root許可權,busybox來擴充命令列下的功能,各種各樣的配置檔案或者小工具,比如預設

Sift運算元特徵點提取描述匹配全流程解析

Sift之前的江湖 在Sift橫空出世之前,特徵點檢測與匹配江湖上佔據霸主地位的是角點檢測家族。先來探究一下角點家族不為人知的恩怨情仇。 角點家族的族長是Moravec在1977年提出的Moravec角點檢測運算元,它是一種基於灰度方差的角點檢測方法,該運算元計算影象中某

MySQL資料庫實驗:任務二 表資料的插入修改刪除

目錄 任務二 表資料的插入、修改及刪除 一、利用介面工具插入資料 二、資料更新 (一)利用MySQL命令列視窗更新資料 (二)利用Navicat for MySQL客戶端工具更新資料 三、資料庫的備份與還原

MySQL數據庫實驗:任務二 表數據的插入修改刪除

mysql con 一個表 刪除 完整 命令 ado character 提示 目錄 任務二 表數據的插入、修改及刪除 一、利用界面工具插入數據 二、數據更新 (一)利用MySQL命令行窗口更新數據 (二)利用Navicat for MySQL客戶端工具更新數據 三、數

(jsp五)簡單功能的實現:刪除修改註冊完善

a. update.jsp程式碼 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>學員資訊修改</title> &l

(jsp七)專案例項功能實現補充: 查詢修改新增功能

說明:如果在頁面顯示的內容不是來自同一張表,則可以將查詢的每一個欄位及內容封裝為一個Map物件,key為所查欄位名,型別為字串,value為所查欄位值,因為值可以有很多種型別,所以需要設為Object型別,然後將所有集合物件存放到List中,這樣就可以實現所查欄位不來自同一張表的值的引用。本例中有兩

linux使用者和使用者組管理(新增刪除修改)說明

理解Linux的單使用者多工,多使用者多工概念 Linux 是一個多使用者、多工的作業系統;我們應該瞭解單使用者多工和多使用者多工的概念; 1、Linux 的單使用者多工; 單使用者多工;比如我們以beinan 登入系統,進入系統後,我要開啟gedit 來寫

deb的提取修改以及打包

以下皆以fglrx驅動deb包為例,fglrx資料夾用來存放解包後的所有檔案,fglrx_8.753-0ubuntu1_amd64.deb為需要修改的deb包 建立fglrx資料夾 $ mkdir fglrx 解包deb $dkpg-deb -x fglrx_8.75

MySql--資料庫和資料表的建立修改刪除

總結一下MySql的資料庫和資料表的簡單操作,關於使用者註冊、修改許可權、資料庫和資料表的建立、修改和刪除的語句。 /***************************使用者**********************************/ select use

MySQL安裝與配置 -- 壓縮包版本解決服務不啟動修改密碼的問題

安裝步驟: 1、解壓縮到你指定的路徑 2、進入mysql-5.7.15-winx64資料夾,新建my.ini配置檔案代替my-default.ini檔案 3、開啟my.ini檔案,貼入以下程式碼 [mysql] # 設定mysql客戶端預設字

iOS 的視層次結構繼承關系常用結構探討

typedef round tof 圖層 矩形 send 其它 mov uiscreen UIView表示屏幕上的一塊矩形區域,它在App中占有絕對重要的地位,因為IOS中幾乎所有可視化控件都是UIView的子類。負責渲染區域的內容,並且響應該區域內發生的觸摸事件

Praat指令碼提取時長共振峰並繪製聲學母音

具體的步驟不再多解釋,大部分的步驟和上一篇“Praat提取時長和基頻"是一樣的,只不過那裡是生成一個Pitch檔案,這裡是生成一個Formant提取共振峰,而且這裡給出的共振峰F1,F2都是音素這段時間內的平均值。 得到最後的結果result.txt之後,拷貝到Excel裡,需要自己過濾母音,把

遠端更新之STARTUPE2原語(fpga控制flash

作者:九章子 來源:CSDN 原文:https://blog.csdn.net/jiuzhangzi/article/details/79471365    有的專案需要遠端更新韌體,更新完成後斷電、重啟即可。那遠端更新是如何實現的呢?用的最多的應該是乙太網或者自定義的區域網為

mtk7620(斐訊K2)openwrt 18.06.1 硬改 華邦winbond的W25Q256FV 32M spi flash

網上的很多方法都是錯的,網上很多編譯好的韌體只支援8M 或者16M flash,根本不支援32M flash,有的根本啟動不了,有的就算能啟動,啟動後會出沒有無線的問題。 筆者在https://github.com/coolsnowwolf/lede專案上做了測試。 經過自己的測

J-link V8升級克隆版破解嚮導(系統WIN10)

最近學習ARM9,於是把朋友的Jlink拿來用了一下,由於想在IAR下開發ARM9裸機程式的,結果沒弄好不說還把朋友的Jlink韌體升級了。由於沒有破解,升級了又要重新刷韌體,為解決下載除錯程式時,不提醒韌體升級。參考網上教程,在win10系統下,進行了韌體重刷