背景
2020年買了個小米云臺相機pro,后來搬家沒怎么用,放家里吃灰一年多,前兩天突然翻到想著拿來用一用,結(jié)果開機后提示要升級,我就點了升級,結(jié)果升級好重啟后就一直沒反應(yīng)了,一直黃燈常亮。升級期間也沒斷電干啥的,結(jié)果就不能開機了。然后網(wǎng)上找方法說可以下載固件放到sd卡里重啟就能恢復(fù),結(jié)果試了下,幾個小時過去了,也沒能修好,于是打電話給小米客服,說可以寄過去幫忙修。東西寄過去兩天后,售后來電話說試了不能用tf卡自動升級,要換主板,這個機器過了一年保修了,換主板要收80。然后我說這個主板硬件是好的,你能不能拆開來刷個固件修下,他說不行。聽到這瞬間就來氣了,主板肯定是好的,升級失敗肯定是軟件問題并不是硬件問題,我以我做軟硬件工程師的經(jīng)驗來看,這絕對是軟件的BootLoader有個bug,升級時寫flash數(shù)據(jù)錯誤導(dǎo)致的。軟件工程師的責(zé)任,出了問題居然要消費者來買單,這點責(zé)任都擔(dān)不起,售后維修連個最基礎(chǔ)的刷固件的方案都給不出,真的時失望至極,果斷拒絕維修。不知道這個售后是真不會刷固件還是假的不會刷固件,還是說要以換主板的名義來收費,實際換主板的操作只是刷了個固件。收到相機后各種爬網(wǎng)找資料,找方法,看見遇到我這個問題的人不在少數(shù),所以把我總結(jié)的方法分享給大家。
刷機方法
準(zhǔn)備
- linux系統(tǒng)的電腦,推薦使用ubuntu
- 十字螺絲刀
- 吹風(fēng)機,或者熱風(fēng)槍
- ch341a 編程器,沒這個可以去淘寶買,幾十塊一個,如下圖
相機拆機
- 準(zhǔn)備十字螺絲刀,熱風(fēng)槍
- 用吹風(fēng)機把底部貼紙吹熱,腳墊吹熱,
- 趁熱去除相機底部四個腳墊,腳墊里隱藏著四個螺絲,用十字螺絲刀擰下
- 趁熱撕下貼紙,防止二維碼損壞,壞了就不能掃碼鏈接了,貼紙下也有一顆螺絲,直接擰下。
- 從底部往相機內(nèi)部拆,遇到螺絲拆螺絲,遇到排線小心取下排線,最后把主板拆出來。
主板如下圖所示
下圖所示的xh25l12833f是flash芯片,相機固件就存這里。
修補固件
這里的主要思路是,將原相機損壞部分的數(shù)據(jù)通過其他能用的相機的完好的數(shù)據(jù)來替換,并且保留原相機數(shù)據(jù)。其實如果有其他相機的整個固件直接刷進去應(yīng)該也能用,但是我估計會導(dǎo)致你的相機的序列號和別人的沖突。下面我也把修補好的固件分享給大家,供大家使用
-
連接相機,如下圖所示,注意不要接反了,接反了編程器的紅燈不會亮。
-
讀取原相機固件 ,得到backup.bin文件
sudo apt update
sudo apt install flashrom
sudo flashrom -p ch341a_spi -r backup.bin -c MX25L12805D
- 去這里 下載對應(yīng)相機的的恢復(fù)固件,我的型號是MJSXJ06CM,下載解壓開得到tf_update.img
- 去網(wǎng)上找一個自己對應(yīng)型號相機的能用的固件dumped_firmware.bin,我的MJSXJ06CM在這里找到的
- 使用binwalk工具分析backup.bin,tf_update.img,的內(nèi)容
$ binwalk backup.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
80649 0x13B09 xz compressed data
81388 0x13DEC CRC32 polynomial table, little endian
327744 0x50040 xz compressed data
2424832 0x250000 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 7370730 bytes, 2104 inodes, blocksize: 131072 bytes, created: 2020-09-15 08:29:51
10158080 0x9B0000 JFFS2 filesystem, little endian
11804260 0xB41E64 JFFS2 filesystem, little endian
15387028 0xEAC994 JFFS2 filesystem, little endian
16646255 0xFE006F Unix path: /usr/share/zoneinfo/Asia/Shanghai
$ binwalk tf_update.img
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
64 0x40 xz compressed data
2097152 0x200000 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 7370730 bytes, 2104 inodes, blocksize: 131072 bytes, created: 2020-09-15 08:29:51
9830400 0x960000 JFFS2 filesystem, little endian
說明:
這里的DECIMAL,代表十進制的起始地址,如要提取tf_update.img 中Squashfs filesystem文件系統(tǒng),就在終端輸入
dd if=tf_update.img of=rootfs.bin bs=1 count=7733248 skip=2097152
這里的skip代表起始地址,count代表讀取內(nèi)容的大小,bs代表塊的大小設(shè)為1計算簡單點一個塊一個字節(jié),通過下一個數(shù)據(jù)的起始地址減當(dāng)前數(shù)據(jù)起始地址得到9830400-2097152 = 7733248
最后一個分區(qū)的count 使用文件大小的size來減去這個分區(qū)起始地址來計算
- 編輯一個腳本文件run.sh,根據(jù)以上分析內(nèi)容,添加如下內(nèi)容
#!/bin/bash
mkdir files
mkdir out
dd if=tf_update.img of=files/kernel.bin bs=1 count=2097152 skip=0 #從文件tf_update.img,讀取從地址0開始,大小為2097152字節(jié)的數(shù)據(jù)
dd if=tf_update.img of=files/rootfs.bin bs=1 count=7733248 skip=2097152 #讀取從地址2097152開始,大小為7733248字節(jié)的數(shù)據(jù)
dd if=tf_update.img of=files/data.bin bs=1 count=6488144 skip=9830400
dd if=dumped_firmware.bin of=files/vendor1.bin bs=1 count=131072 skip=16646144
dd if=backup.bin of=files/vendor2.bin bs=1 count=65536 skip=16711680
cp dumped_firmware.bin -f out/flash.bin
dd if=files/kernel.bin of=out/flash.bin bs=1 count=2097152 seek=327680 # 把數(shù)據(jù)kernel.bin從地址327680覆蓋2097152個數(shù)據(jù)到flash.bin
dd if=files/rootfs.bin of=out/flash.bin bs=1 count=7733248 seek=2424832
dd if=files/data.bin of=out/flash.bin bs=1 count=6488144 seek=10158080
dd if=files/vendor1.bin of=out/flash.bin bs=1 count=131072 seek=16646144 #這里的seek由上面data的地址加數(shù)據(jù)大小得到10158080 + 6488144 = 16646144
dd if=files/vendor2.bin of=out/flash.bin bs=1 count=65536 seek=16711680
注意:型號是如果是MJSXJ06CM的相機這個腳本可以直接使用,如果是其他型號,需要對照著修改以上參數(shù),flash.bin的數(shù)據(jù)大小必須保證為16,777,216字節(jié)。
- 執(zhí)行修復(fù)固件,將上面準(zhǔn)備的文件run.sh dumped_firmware.bin tf_update.img backup.bin 放在同一個文件夾下,在終端輸入sh run.sh,等待腳本執(zhí)行完畢,在文件夾out下找到flash.bin,即為修好的固件。
刷入固件
直接在終端執(zhí)行
$ sudo flashrom -p ch341a_spi -w out/flash.bin -c MX25L12805D
如果嫌麻煩,并且和我的相機型號一樣,同為MJSXJ06CM的也可以直接刷我修補好的固件,放心沒有添加任何后門程序的哈。
上一步操作執(zhí)行完后裝機,不出意外相機應(yīng)該能正常啟動了。文章來源:http://www.zghlxwxcb.cn/news/detail-498652.html
破解相機
破解相機,登錄相機后臺,參考連接文章來源地址http://www.zghlxwxcb.cn/news/detail-498652.html
A firmware hack is possible, but requires some tools:
CH341A flash programmer
SOIC8 clip and some dupont wires
Complete device teardown
Basic steps are:
Create a flash backup:
flashrom -p ch341a_spi -r backup.bin
Download the firmware and put it into the same folder.
Run this script to patch the backup:
#!/bin/bash
# extract firmware
mkdir -p files
dd if=tf_recovery.img of=files/kernel.bin bs=1 count=2097152
dd if=tf_recovery.img of=files/rootfs.bin bs=1 count=7733248 skip=2097152
dd if=tf_recovery.img of=files/data.bin bs=1 count=6488064 skip=9830400
dd if=backup.bin of=files/vendor.bin bs=1 count=131072 skip=16646144
# patch jffs2 partition
sudo modprobe mtdblock
sudo modprobe mtdram total_size=6336
sudo dd if=files/data.bin of=/dev/mtdblock0 bs=1
mkdir mount
sudo mount -t jffs2 /dev/mtdblock0 mount
echo '#!/bin/sh' | sudo tee -a mount/bin/log_diag_platform.sh
echo '/mnt/sdcard/override.sh' | sudo tee -a mount/bin/log_diag_platform.sh
sudo chmod 755 mount/bin/log_diag_platform.sh
sudo umount mount
rmdir mount
sudo dd if=/dev/mtdblock0 of=files/data.bin bs=1
# update flash backup
mkdir -p out
cp backup.bin -f out/flash.bin
dd if=files/kernel.bin of=out/flash.bin bs=1 count=2097152 seek=327680
dd if=files/rootfs.bin of=out/flash.bin bs=1 count=7733248 seek=2424832
dd if=files/data.bin of=out/flash.bin bs=1 count=6488064 seek=10158080
dd if=files/vendor.bin of=out/flash.bin bs=1 count=131072 seek=16646144
Re-flash the modified backup:
flashrom -p ch341a_spi -w out/flash.bin
Prepare the sdcard script:
/sdcard/override.sh
#!/bin/sh
main() {
# start telnet
/mnt/sdcard/busybox telnetd
}
if [ ! -f /tmp/.override ]; then
touch /tmp/.override
main
fi
Press the reset button (briefly) on the camera to launch the override script.
到了這里,關(guān)于小米攝像機升級失敗,小米攝像機黃燈常亮修復(fù),全網(wǎng)最硬核修復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!