Для восстановления “окирпиченных” камер или живых, но с чужой прошивкой, до рабочего состояния необходим дамп. Дальше есть два варианта. Если камера не совсем “кирпич”, а её загрузчик жив и в него можно попасть, то можно залить дамп средствами загрузчика. Если же всё плохо и никаких признаков жизни камера не подаёт, то спасёт только программатор.
Для процессоров HiSilicon есть ещё один вариант – прошивка утилитой HiTool через UART. Но для этого процессор надо ввести в аварийный режим, а это операция нетривиальная. Про работу с HiTool тоже планирую написать статейку, а пока можно задавать вопросы на эту тему в группах проекта OpenIPC. Там обитают ребята, которые мне эту тему подсказали и разбираются в вопросе гораздо лучше.
Как только в руки снова попадёт подобный зверёк, дополню статью и уберу этот транспарант, а пока прошу относиться к изложенной информации с некоторой степенью недоверия 🙂
Инструменты
Материалы
- Дамп (в идеале) или прошивка
Софт
Подготовка
В деле восстановления IP-камер самое главное – это бутлоадер, он же бут, он же загрузчик. Если получается залить во флеш правильный бут, то это 99% успеха. Дальше всё штатно.
Если есть нужный дамп, то тоже всё просто. Берём программатор и заливаем дамп. Дальше правим уникальные параметры в буте и всё работает.
Дамп просто так не достать, но прошивка чаще всего находится в общем доступе и, в случае с камерами Dahua, этого может быть достаточно, хотя бывают и исключения.
Прошивка чаще всего выкладывается в заархивированном виде. Качаем и распаковываем, чтобы получить доступ к бинарнику. Далее, уже этот бинарник, распаковываем архиватором 7Zip. Он ругнётся, но это не страшно. Заходим в папку с распакованным содержимым и ищем там два файла: dhboot.bin и dhboot-min.bin. Если есть они оба, то всё прекрасно.
Например, берём прошивку камеры DH-IPC-K42AP, распаковываем и видим, что в ней оба этих файла есть. Уже хорошо.
Открываем файлы в шестнадцатеричном редакторе, например HxD и смотрим. Первые 64 байта – это заголовок. Он содержит служебную информацию и, в том числе, адрес, по которому следует прошивать содержимое. Поэтому, первым делом, нужно это заголовок отрезать, а затем залить то, что осталось по указанному адресу.
Для dhboot-min адрес прошивки: 0x00000000, а для dhboot – 0x00340000.


Удаляем заголовок и сохраняем файлы, получая готовые для прошивки бинарники.
Резервная копия
Перед тем, как шить, нужно позаботиться о возвращении к исходному состоянию, поэтому полезно сделать резервную копию, то бишь – снять дамп. Подробнее о том, как снять дамп и залить его обратно рассказано в статье Работа с памятью в загрузчике.
Если дамп с этой камеры или камеры аналогичной модели уже есть или есть уверенность, что восстановление не понадобится, то можно и пропустить этот важный шаг.
Прошивка
Прошивка через UART
Собственно, в вышеобозначенной статье Работа с памятью в загрузчике есть инфа и об этом. В даном случае надо прошить два бинарника по определённым адресам адресам. Какие конкретно команды использовать – зависит от типа памяти – NOR или NAND.
Прошивка программатором
Лично для меня прошивка программатором – это крайняя мера, когда по-другому никак не получается. Причина в том, что это требует выпаивания чипа памяти, а это не очень умею. Иногда, можно и без выпаивания, но надо цеплять прищепку или зажимы, а это тонкая операция.
Если без программатора никак, то берём CH341A, цепляем зажимы, запускаем AsProgrammer и шьём дамп, если он есть. Если нет, то надо подготовить дамп, собрав его из двух частей загрузчика в редакторе.
Изменение параметров
После прошивки дампа или загрузчика тем или иным способом надо подкорректировать значения переменных. В первую очередь HWID – это идентификатор конкретной модели камеры, BSN – серийный номер и ethaddr – MAC-адрес.
программатор есть и паять совсем не проблема, а вот найти дамп и собрать это для меня сложнее. HDW1230SP-0360B не могу найти. Мб они совместимые какие с другими моделями?
Уже всё есть и статья пишется. Ничего паять не надо – всё через UART. Осталось только перепроверить.
З.Ы. Ксттаи, можешь побыть бета-тестером. Скину все материалы и мануал. Если всё получится, значит статью можно публиковать 🙂 И так на 90% уверен, что метод рабочий, т.к. рождён совместными усилиями с камрадом @ABATAPA, но перепроверить не помешает.
Добрый день, возможно как то описать процесс сборки дампа под загрузку программатором?! Уж очень поверхностно описан процесс в статье. Есть камера Dahua от “ростелекома” на амбреловском процессоре с Amboot загрузчиком, но в загрузчике не поднята Eth порт, по этому загрузить родную прошивку по Tftp возможности нет, как поднять порт, я не разобрался.
Вопрос снят с повестки, все с бинарными фалами понятно, но нужно было немного углубиться в тему.
Да, в нашем деле без самообразования – никак! 🙂
Добрый! Дамп слепить можно, размещая бинарники по адресам из заголовков, но проще поднять ethernet.
Пока с поднятием Eth порта проблема. Камера Dahua HFW2231TP-VFS, достаточно интересная в плане характеристик, но телеком со своим потоком на сервер в 2 Mb, режет в трое качество картинки… Да и 400 рэ за юнит, не кисло получается, все это вынудило двинуться в направлении отвязки. На момент ситуация такая, есть доступ к загрузчику “Amboot”, но нет доступа к ядру, нет возможности получить root права, так же не нашел способа поднять eth порт в загрузчике.
Log:
amboot> help
The following commands are supported:
r32 w32 boot erase
help reboot setenv show
memtest fs fdt nand
usbdl gpio tftp ping
sd
Use ‘help’ to get help on a specific command
Может у вас был опыт работы с данным загрузчиком?
Не встречал такого. А printenv что-то выдаёт? Насчёт ethernet, обычно нужно подобрать правильную комбинацию phyaddru и phyaddrd. Значения меняются от 0 до 3. Нужно пробовать разные комбинации, например: setenv phyaddru 0;setenv phyaddrd 0 и т.д.
К сожалению команда printenv в загрузчике отсутствует, так же как и параметр “phy” команды setenv.
log:
Help for ‘setenv’:
setenv [param] [val]
sn – Serial number
auto_boot – Automatic boot
boot_opt – boot option for bios
bootcmd – boot command for bios
splash_id – splash logo id
[eth|wifi|usb] [0|1] [mac|ip|mask|gw]
– [device] [instances] [mac addr|IP addr|network mask|gateway]
auto_dl – Automatically try to boot over network
tftpd – TFTP server address
pri_addr – RTOS download address
pri_file – RTOS file name
pri_comp – RTOS compressed?
rmd_addr – Ramdisk download address
rmd_file – Ramdisk file name
rmd_comp – Ramdisk compressed?
dsp_addr – DSP download address
dsp_file – DSP file name
dsp_comp – DSP compressed?
amboot> show netboot
eth0_mac: 00:00:1b:01:3e:7e
eth0_ip: 192.168.1.64
eth0_mask: 255.255.255.0
eth0_gw: 192.168.1.10
eth1_mac: 00:00:00:00:00:00
eth1_ip: 0.0.0.0
eth1_mask: 0.0.0.0
eth1_gw: 0.0.0.0
auto_dl: 0
tftpd: 192.168.1.10
pri_addr: 0x00000000
pri_file:
pri_comp: 0
rmd_addr: 0x00000000
rmd_file:
rmd_comp: 0
dsp_addr: 0x00000000
dsp_file:
dsp_comp: 0
Интересно… Ну setenv есть – установить переменные можно, значит должно быть можно и посмотреть их. Наверное есть параметр в команде show – что-то типа show env или типа того, по аналогии с show netboot.
Все что есть в show:
show ptb – flash partition table
show poc – power on config
show netboot – netboot parameters
show wifi – show wifi infomations
show usb_eth – show usb ethernet infomations
Display various system properties
Мда… Тут, к сожалению, ничем помочь не могу – опыта нет. Сам в таких случаях ищу оригинал и изучаю, как с него снять дамп и перенести на пациента.
Получается либо лить собранный загрузчик из оригинальной прошивки, либо искать рабочий полный аналог, снимать с него дамп и уже лить его, благо флешка NOR. Спасибо за помощь!
Да, подход такой. В ряде случаев ещё можно использовать загрузчик OpenIPC, но для Амбареллы его пока нет.
Пожалуйста! Хотя по факту ничем и не помог 🙂 А ConfigTool-ом, она кстати не видится?
З.Ы. Можно попробовать запросить прошивку и/или дамп на dahuacctv.com
Нет, к сожалению специфические сканеры, подобные ConfigTool её не видят, видит Ростелекомовский софт, но она запаролена, пароль подобрать не удалось.
Понятно.