mirror of https://github.com/OpenIPC/wiki.git
commit
0fe68c5e3f
|
@ -21,13 +21,21 @@ root@openipc-hi3518ev100:~#
|
||||||
### Сохранение заводской прошивки без tftp.
|
### Сохранение заводской прошивки без tftp.
|
||||||
|
|
||||||
В программе-терминале, используемой для подключения к порту UART, установите
|
В программе-терминале, используемой для подключения к порту UART, установите
|
||||||
сохранение лога сессии. После чего в консоли загрузчика запустите команду чтения
|
сохранение лога сессии. В качестве примера мы используем программу-терминал
|
||||||
данных из памяти длиной в объем флэш-памяти начиная с нулевого адреса.
|
`screen`. В этом случае команда подлючения к UART-адаптеру с сохранением лога
|
||||||
|
сессии в файл _fulldump.log_ будет выглядеть примерно так:
|
||||||
|
|
||||||
Используйте шестнадцатеричное представление для адресов памяти. Так 0 в
|
```
|
||||||
шестнадцатеричной записи выглядит как 0x0, 8 мегабайтов (8 * 1024 * 1024 =
|
$ screen -L -Logfile fulldump.log /dev/ttyUSB0 115200
|
||||||
8,388,608 байтов) выглядят как 0x800000, 16 мегабайтов (16 * 1024 * 1024 =
|
```
|
||||||
или 16,777,216 байтов) - как 0x1000000.
|
|
||||||
|
После чего в консоли загрузчика запустите команду чтения данных из памяти длиной
|
||||||
|
в объем флэш-памяти начиная с нулевого адреса.
|
||||||
|
|
||||||
|
Используйте шестнадцатеричную запись для адресов памяти.
|
||||||
|
Так 0 в шестнадцатеричном представлении выглядит как 0x0,
|
||||||
|
8 мегабайтов (8 * 1024 * 1024 = 8,388,608 байтов) -- как 0x800000,
|
||||||
|
16 мегабайтов (16 * 1024 * 1024 = или 16,777,216 байтов) -- как 0x1000000.
|
||||||
|
|
||||||
Чтение 8МБ флэш-памяти:
|
Чтение 8МБ флэш-памяти:
|
||||||
|
|
||||||
|
@ -41,16 +49,78 @@ md.b 0x0 0x800000
|
||||||
md.b 0x0 0x1000000
|
md.b 0x0 0x1000000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
После запуска команды чтения содержимого памяти вы можете отсоедить сессию,
|
||||||
|
чтобы случайное нажатие клавиш не замусорило лог. В `screen` это делается
|
||||||
|
последовательным нажатием комбинации клавиш `Ctrl-a` и клавиши `d` (detach).
|
||||||
|
Для последующего присоединения к запущенной сессии используйте команду
|
||||||
|
|
||||||
|
```
|
||||||
|
screen -r
|
||||||
|
```
|
||||||
|
|
||||||
Будьте готовы к тому, что процесс передачи данных через серийное подключение
|
Будьте готовы к тому, что процесс передачи данных через серийное подключение
|
||||||
займет несколько часов. Зато в результате у вас будет полная копия оригинальной
|
займет несколько часов. Зато в результате у вас будет полная копия оригинальной
|
||||||
прошивки, которую можно конвертировать в бинарный файл с помощью программы
|
прошивки, которую можно конвертировать в бинарный файл с помощью программы
|
||||||
[binwalk](https://github.com/ReFirmLabs/binwalk) и использовать для дальнейшего
|
[binwalk](https://github.com/ReFirmLabs/binwalk) и использовать для дальнейшего
|
||||||
изучения или для восстановления камеры в её оригинальный вид.
|
изучения или для восстановления камеры в её оригинальный вид.
|
||||||
|
|
||||||
|
#### Сохранение прошивки через SD карту.
|
||||||
|
|
||||||
|
Бывает, что у камеры есть только беспроводной доступ, который не работает
|
||||||
|
напрямую из загрузчика. Очень часто такие камеры имеют разъём для внешней карты
|
||||||
|
памяти формата microSD. В таком случае можно попробовать получить копию
|
||||||
|
оригинальной прошивки используя карту как носитель-посредник. Объем данных,
|
||||||
|
которые вам потребуется сохранить -- не более 16 МБ, поэтому подойдет любая
|
||||||
|
доступная карта, даже самого маленького объема.
|
||||||
|
|
||||||
|
Вставьте карту в соответствующий разъем на камере, подключите серийный адаптер
|
||||||
|
к порту UART, подайте питание на камеру и остановите процесс загрузки так,
|
||||||
|
чтобы оказаться в консоли загрузчика.
|
||||||
|
|
||||||
|
Инициализируйте доступ к карте, и очистите место для сохранения копии прошивки.
|
||||||
|
Запись на карту производится блоками по 512 байтов. Для очистки 8 МБ вам
|
||||||
|
потребуется стереть 16384 таких блоков, а для 16 МБ - 32768, что в
|
||||||
|
шестнадцатеричном представлении будет 0x4000 и 0x8000, соответственно.
|
||||||
|
|
||||||
|
Обратите внимание, что мы используем прямой доступ к регистрам карты, минуя
|
||||||
|
таблицу разделов. Чтобы избежать конфликтов при обращении к данным карты, мы
|
||||||
|
будем записывать данные пропустив 8 килобайтов от начала (8 * 1024 = 8192 байтов
|
||||||
|
или 16 блоков по 512 байтов, или 0x10 блоков в шестнадцатеричном представлении)
|
||||||
|
|
||||||
|
```
|
||||||
|
mmc dev 0
|
||||||
|
mmc erase 0x10 0x8000
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь вам надо скопировать содержимое прошивки из микросхемы флэш-памяти в
|
||||||
|
оперативную память камеры. Для этого очистите участок оперативной памяти
|
||||||
|
(0x800000 байтов для микросхем объемом 8 МБ или 0x1000000 байтов для микросхем
|
||||||
|
объемом 16 МБ), получите доступ к микросхеме флэш-памяти и скопируйте весь объем
|
||||||
|
флэш-памяти в очищенное пространство оперативной памяти. После чего сохраните
|
||||||
|
скопированные данные из оперативной памяти на карту.
|
||||||
|
|
||||||
|
NB! В примере мы используем стартовый адрес 0x2000000, но этот параметр может
|
||||||
|
отличаться у разных моделей камер.
|
||||||
|
|
||||||
|
```
|
||||||
|
mw.b 0x2000000 ff 0x1000000
|
||||||
|
sf probe 0
|
||||||
|
sf read 0x2000000 0x0 0x1000000
|
||||||
|
mmc write 0x2000000 0x10 0x8000
|
||||||
|
```
|
||||||
|
|
||||||
|
Выньте карту из камеры и вставьте в компьютер с операционной системой Linux.
|
||||||
|
Используя команду `dd` скопируйте данные с карты в бинарный файл на диске
|
||||||
|
компьютера.
|
||||||
|
|
||||||
|
```
|
||||||
|
dd bs=512 skip=16 count=32768 if=/dev/sdc of=./fulldump.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### Обход запароленного загрузчика.
|
### Обход запароленного загрузчика.
|
||||||
|
|
||||||
Смена загрузчика -- рискованная операция. Уж слишком высоки шансы превратить
|
Смена загрузчика -- рискованная операция. Уж слишком высоки шансы превратить
|
||||||
камеру в пресс-папье, если что-то пойдёт не так. Поэтому прежде чем прошивать
|
камеру в пресс-папье, если что-то пойдёт не так. Поэтому прежде чем прошивать
|
||||||
новый загрузчик надо взвесить все риски и бенефиты.
|
новый загрузчик надо взвесить все риски и бенефиты.
|
||||||
|
|
||||||
|
@ -62,7 +132,7 @@ md.b 0x0 0x1000000
|
||||||
загрузки -- это приглашение ввести пароль. В таком случае относительно
|
загрузки -- это приглашение ввести пароль. В таком случае относительно
|
||||||
безопасным решением будет даунгрейд родной прошивки до версии, где ещё не
|
безопасным решением будет даунгрейд родной прошивки до версии, где ещё не
|
||||||
требовался пароль. Например, у камер Xiongmai пароль в загрузчике появился
|
требовался пароль. Например, у камер Xiongmai пароль в загрузчике появился
|
||||||
где-то в районе июля 2021 года, следовательно вам понадобится файл с фирменной
|
где-то в районе июля 2021 года, следовательно, вам понадобится файл с фирменной
|
||||||
прошивкой от вашей камеры с более ранней датой. После успешного даунгрейда на
|
прошивкой от вашей камеры с более ранней датой. После успешного даунгрейда на
|
||||||
беспарольный загрузчик вы сможете установить прошивку OpenIPC уже стандартными
|
беспарольный загрузчик вы сможете установить прошивку OpenIPC уже стандартными
|
||||||
средствами.
|
средствами.
|
||||||
|
|
|
@ -160,7 +160,7 @@ tftp 0x82000000 firmware-full.bin 0x1000000
|
||||||
присущих той или иной камере. Но и казалось бы менее значимые детали могут
|
присущих той или иной камере. Но и казалось бы менее значимые детали могут
|
||||||
устанавливать ограничения на возможности камеры и её прошивки. Например, у
|
устанавливать ограничения на возможности камеры и её прошивки. Например, у
|
||||||
разных камер могут отличаться установленные микросхемы флэш-памяти. Одни камеры
|
разных камер могут отличаться установленные микросхемы флэш-памяти. Одни камеры
|
||||||
могут иметь флэш-память объемом 8 МБ, в то время как другие - 16 МБ, то и
|
могут иметь флэш-память объемом 8 МБ, в то время как другие - 16 МБ, а то и
|
||||||
больше. В больший объем флэш-памяти можно поместить большее количество
|
больше. В больший объем флэш-памяти можно поместить большее количество
|
||||||
программного кода, позволить камере запускать дополнительные сервисы, которые
|
программного кода, позволить камере запускать дополнительные сервисы, которые
|
||||||
недоступны на камерах с меньшим объёмом флэш-памяти. Поэтому мы решили
|
недоступны на камерах с меньшим объёмом флэш-памяти. Поэтому мы решили
|
||||||
|
|
Loading…
Reference in New Issue