Прислали камеру IPC2122SR3-RUO для исследования на предмет отвязки от облака Ростелеком. Занимался этим на протяжении нескольких месяцев и результат, хотя и с некоторыми нюансами и вообще странным образом, но был достигнут.
По серийному номеру с платы поддержка прислала прошивку, которая была успешно прошита и запущена, но картинка отсутствовала. То есть камера загружается и войти в веб-морду можно, но изображения нет, а в консоли – ошибки.
При сравнении со стоковым аналогом – камерой Uniview IPC2122SR3-PF40-C, выяснилось, что камеры одинаковые только на первый взгляд. Корпус, основная плата, процессор и память те же, поэтому прошивка и стартует, но вот сенсор совсем другой.
Стоковую прошивку пока найти не удалось и не факт, что она вообще есть. OpenIPC запускается, но картинка фиговая, как и у камеры IPC-HFW1230SP. Самое интересное, что платформы этих камер в основных компонентах совпадают: процессор – HI3516CV300, память – NAND и сенсор OV2735. Возникла мысль – почему бы не попробовать залить в камеру Uniview прошивку от Dahua?
Инструменты
Материалы
- ipc1230sp-boot+.zip – кусочек оригинального дампа.
- update.zip – оригинальная прошивка.
- DeviceConfig.zip – файл конфигурации.
Утилиты
- TFTP-сервер Tftpd64 — TFTP-сервер для передачи файлов.
- Putty — программа для работы через UART.
- ConfigTool — поисковая утилита для камер Dahua.
Исходные данные
Вскрытие
Наверное самое сложное – это разобрать камеру. Первым делом надо снять декоративную накладку, которая держится на 4-х защёлках, расположенных по углам. Аккуратно поддеваем накладку, просунув, например, кредитную карту, между ней и корпусом в верхней части, ведём вдоль щели и освобождаем защёлки.
Далее откручиваем 4 винта крепления передней крышки и снимаем её, стараясь не оторвать шлейф и провод питания ИК-подсветки.
Следующий этап – откручиваем 3 винта крепления платы и вынимаем её. Далее, откручиваем шестигранные проставки. Для этого понадобится миниголовка – пришлось специально купить набор, в котором она была.
Нижнюю плату тоже вынимаем из корпуса и соединяем с верхней. С помощью проставки лучше сделать так, чтобы платы не соприкасались друг с другом. Иначе могут коротнуть.
Подключение
После этого можно подключаться к разъёму UART и приступать к прошивке. При подключении через CH340 к камерам Uniview почему-то почти всегда не работает TX, соответственно не удаётся остановить загрузку системы и отдавать команды тоже. А вот CH341A в режиме TTL отлично работает, поэтому его и использую. Разъём подойдёт такой же, как и для камер Dahua: Коннектор JST 1,25 4p, только расположение контактов другое.
Бэкап
Алгоритм прошивки аналогичен описанному в статье Отвязка от Ростелеком камеры IPC-HFW1230SP/IPC-HDW1230SP. Приведу его здесь вкратце, а за подробностями – туда.
Делаем резервную копию прошивки. Достаточно первых 32 Мб.
setenv serverip 192.168.1.128;setenv ipaddr 192.168.1.10;save
mw.b 0x82000000 0xff 0x1000000;nand read 0x82000000 0x0 0x1000000;tftp 0x82000000 rt-ipc2122SR3-ruo_dump0.bin 0x1000000
mw.b 0x82000000 0xff 0x1000000;nand read 0x82000000 0x1000000 0x1000000;tftp 0x82000000 rt-ipc2122SR3-ruo_dump1.bin 0x1000000
Прошивка
Шьём подготовленный загрузчик и перезагружаемся в него.
mw.b 0x82000000 0xff 0x1000000
tftp 0x82000000 ipc1230sp-boot+.bin
nand erase 0x0 0x1000000
nand write 0x82000000 0x0 0x1000000
reset
Запуск нового загрузчика останавливаем нажатием * и конфигурируем его задавая ID, MAC-адрес и снова адрес tftp-сервера. Далее выполняем команду run up запускающую процесс прошивки.
Поскольку серийник Dahua взять негде, в качестве ID используем ростелекомовский серийник.
setenv ID 123450000000 // значение берётся с шильдика
setenv ethaddr 08:ed:ed:00:00:00 // значение берётся с шильдика
setenv serverip 192.168.1.128
save
run up
...
reset
setenv phyaddru 0;setenv phyaddrd 1;save
Тюнинг
Платформа та же, но производитель другой, поэтому и совместимость не полная. Обнаружил три момента:
- В Dahua есть такая вещь – Voltage Detection. Видимо, это какой-то контроль напряжения, поддержки которого в железе от Uniview нет, поэтому через некоторое время работы в правом верхнем углу экрана вылезает красный мигающий значок батарейки. Ни на что, вроде бы, не влияет, но напрягает – надо отключить! Делается это в разделе Event->Abnormality->Voltage Detection.
- ИК-фильтр срабатывает наоборот, т.е. в ночном режиме он включен, а в дневном выключен. Тут уже программно не решишь – надо в разъёме поменять местами красный и чёрный проводок, инвертируя управление.
- В ночной режим камера переходит нормально, а вот в дневной возвращаться не хочет. Надо в разделе Camera->Conditions, в профиле дневного режима Day, в подразделе Day & Night выбрать вариант Color вместо Auto и на вкладке Profile Management задать расписание.
Для удобства сохранил настройки в файл и достаточно их просто импортировать в разделе System.
После прошивки получаем рабочую камеру и даже с подключением к облаку Dahua!
Добрый день, не останавливается загрузка при первоначальном подключении камеры. Что можно сделать?
В статье в том числе и про это написано – пункт Подключение
Я такой же программатор использую, камера Uniview только модель другая(купольная).
Какую клавишу жмёшь?
Сначала *, а потом все подряд и никакой реакции.
А какая модель камеры то и какая в ней сейчас прошивка? * – это для Dahua. Для Uniview Ctrl+B или Ctrl+Enter или просто Enter можно попробовать. Ну и ты же понимаешь, что нельзя шить какую-либо случайную прошивку на любую имеющуюся камеру?
nand write 0x82000000 0x0 0x1000000
reset
Здравствуйте. После этого шага видеокамера кирпичится. Висит на startup.
С этим файлом что-то надо делать, как-то ещё подготавливать?
Думаю, всё в порядке. Просто загрузчик не выводит ничего в консоль. Надо сразу после подачи питания давить * и всё будет.
К сожалению не заходит.
Приложу часть лога. Есть какой-то bad блок, может из-за этого что-то не так идёт.
hi3516cv300-vc # nand erase 0x0 0x1000000
NAND erase: device 0 offset 0x0, size 0x1000000
Skipping bad block at 2% complete.
0x00060000
Erasing at 0xfe0000 — 100% complete.
OK
hi3516cv300-vc # nand write 0x82000000 0x0 0x1000000
NAND write: device 0 offset 0x0, size 0x1000000
pure data length is 16777216, len_incl_bad is 16908288
data length:0x1000000, include bad block length: 0x1020000
Skip bad block 0x00060000
16777216 bytes written: OK
hi3516cv300-vc # reset
resetting …
hi3516cv300 System startup
Ага… Да, дело именно в этом. Из нескольких прошитых камер у одной была точно такая же беда, но удалось обойти. Смысл в том, что загрузчик у Дахуа состоит из двух частей, а в предлагаемом файле есть они оба, но при наличии бэдов, всё, что после них смещается, соответственно вторая часть загрузчика пишется по другому адресу и управление ей не передаётся. Задача в том, чтобы вычислить адрес бэд-блока и надеяться на то, что данных там нет. И если это действительно так, то просто прошить файл частями. Точнее, первая то уже на месте. Вторую часть прошить надо. Ещё бы вспомнить, как именно я это делал :))))
Для начала попробуйте после прошивки и перед резетом прошить ещё отдельно файл dhboot.bin по адресу 0x200000
mw.b 0x82000000 0xff 0x1000000
tftp 0x82000000 dhboot.bin
nand erase 0x200000 0x1000000
nand write 0x82000000 0x200000 0x1000000
Если не получится, будем думать дальше.
З.Ы. Нашёл свои записки – у меня бэд был по тому же адресу.
Благодарю. Предложенное вами решение сработало. Прошивка успешно загружена. Но потом во время загрузки множество ошибок и, как я понял, нормально не запустилась. В сети пингуется, но для инициализации не видна.
И тут я понял, что был не внимателен, у меня модель IPC2122SR3-PF40-C, и скорее всего прошивка не подошла.
То есть PF40-C, но камера Ростелекомовская? Вообще эта модели, как я понял, идентичны за исключением платы сенсора. Но с IPC2122SR3-PF40-C даже проще. Если это действительно она, то и прошивка есть и дамп. Визуально платы отличаются цветом текстолита и количеством электроники. У IPC2122SR3-PF40-C плата чёрная, а у IPC2122SR3-RUO зелёная. Возможно переменные неверно прописались из-за такого способа прошивки. У меня тоже не с первого раза вышло, но что именно было не так – запамятовал. Покажите printenv.
Ростелкомовская. Плата зелёная.
Вот printenv. Идентификаторы скрыл.
bootargs=mem=256M console=ttyS0,115200 root=/dev/mtdblock7 rootfstype=squashfs
bootdelay=1
baudrate=115200
ipaddr=192.168.1.108
gatewayip=192.168.1.1
netmask=255.255.255.0
bootfile=”uImage”
quickstart=0
wifiaddr=00:12:34:56:78:91
mp_autotest=0
dh_keyboard=1
appauto=1
sysbackup=1
loglevel=4
pd=tftp 0x82000000 pd-x.squashfs.img; flwrite
ID=
ethaddr=
serverip=192.168.1.2
filesize=147AA77
fileaddr=82000000
da=tftp 0x82000000 dhboot.bin.img;flwrite;tftp 0x82000000 dhboot-min.bin.img;nand protect off;flwrite;
dr=tftp 0x82000000 romfs-x.squashfs.img; flwrite;
dk=tftp 0x82000000 kernel.img;flwrite;
du=tftp 0x82000000 user-x.squashfs.img; flwrite
dw=tftp 0x82000000 web-x.squashfs.img; flwrite
dp=tftp 0x82000000 partition-x.cramfs.img;flwrite;
dc=tftp 0x82000000 custom-x.squashfs.img; flwrite
up=tftp 0x82000000 update.img;flwrite;
tk=tftp 0x82000000 uImage;bootm;
bootcmd=kload 0x82000000;bootm 0x82000000
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 2010.06-svn6470 (Dec 11 2018 – 16:27:39)
Смущают ещё ошибки после загрузки прошивки.
Erasing at 0x3c0000 — 87% complete.
Erasing at 0x3e0000 — 100% complete.
Writing to Nand… done
exce update config script complete!
set error count failed, ret=255, writeSize=0x800, wrLen=0x0
partition file version 2
rootfstype squashfs root /dev/mtdblock7
nand_write: protect addr
partition file version 2
rootfstype squashfs root /dev/mtdblock7
fail to parse HWID
fail to parse bootargsParametersV2.text info
WARNING: Fail to update bootargs!!!
dhboot # reset
resetting …
В принципе, как я и думал. HWID отсутствует. Надо добавить:
setenv HWID IPC-HDBW1230E-S2:01:02:05:60:28:00:01:00:00:00:00:320:00:00:00:00:00:00:00:00:100
setenv hwidEx 00:03:00:00:00:00:00:00:00:00:00:00:00:00:00:00
setenv devalias DH-IPC-HFW1230SP-0280B
save
Без этого система не стартует.
Спасибо большое за помощь!
Всё получилось.
По настройкам. Батарейка светится – отключил. Шторка работает правильно – не трогал. В день не переходит – поставил color и настроил расписание.
В статье конфиг-файл есть со всеми необходимыми настройками, а насчёт шторки – присмотритесь. Там не сильно заметно, в отличие от Хиков, например, где прям всё розовое становится, но когда увидишь, как должно быть, то становится понятно, что было неправильно. Не сильно критично, но цвета некорректно отображаются, а если сделать как надо, то будет всё ярко и красиво. Проверить и убедиться просто даже без смены проводков – пусть перейдёт в ночной режим и потом можно снять питание шторки и переключить в дневной.
Да, вы правы на счёт шторки. В искусственном освещении не замечал разницы. Переставил провода.
Ну я ж говорю – почему-то у Uniview не сильно заметна разница. Только если сравнивать.
Добрый день! А для IPC322SR3-VSPF28-C от Ростелеком родная прошивка от UNV есть или Ростелекомовская IPC322SR3-VSPF28-C также как IPC2122SR3-RUO отличается сенсором и поэтому родную от UNV поставить не получится?
Такой камеры у меня не было. Просто помогал человеку с прошивкой. У него всё заработало, значит прошивка и сенсор те же. Значит родную от Uniview залить не получится, если его железо совпадает с Вашим.
+ IPC322SR3-VSPF28-C с прошивкой Dahua работает запись на карту?
Сам не проверял, так что – неизвестно.
З.Ы. Насколько помню, в процессе экспериментов я камеру окирпичил, а потом восстановил. Так что можно смело экспериментировать – в случае чего можно вернуться к исходному состоянию. Главное заранее сделать резервную копию. Теоретически можно и подпалить кое-что, но не будем о грустном…
Спасибо за ответы. На данной стадии вопрос больше в целесообразности приобретения.
Не тот случай. Хотя всё зависит от цены.
Есть камера ростелеком ipc2322ebr5-p-c. Есть ли у Вас прошивка для этой камеры ?
Это та же платформа, что и у камеры IPC2122SR3-RUO. Вопрос в том какой сенсор – если родной, то проблем вообще быть не должно, потому что родная прошивка доступна.Раз ве что с облаком будут проблемы, как обычно у Uniview.
Как-то купил на Авито несколько таких камер уже отвязанных от РТ, но у них оказались родные сенсоры. Первый признак родных – текстолит чёрного цвета, как и у основной платы. РТ ставит платы сенсора с зелёным текстолитом. Поскольку плата сенсора – это отдельная плата, то была мысль найти её родную, как зап.часть, но Uniview официально же ушли из нашей страны, поэтому не удалось. А так бы можно было и родную прошивку залить. Пока можно действовать по инструкции: Отвязка от Ростелеком камеры IPC2122SR3-RUO
Здравствуйте всем. Подскажите пожалуйста, при экспериментах окирпичил IPC2122SR3-RUO. Восстановление загрузчика с помощью HiTool не помогает, хоть вроде и проходит без ошибок. В терминале просто пустота. Это о чем может говорить? К сожалению ростелекомовский дамп не сделал, может кто поделиться?
Каким-то чудесным образом удалось вывести из этого состояния одним из загрузчиков u-boot из прошивки для Uniview. Но после записи загрузчика ipc1230sp-boot+.bin, после ресета сразу стопорится на hi3516cv300 System startup. Что-то сдается мне, паршивит nand, хоть и нет ошибок записи. Что можно еще попробовать?
У Дахи молчаливый бут. Он ничего коме этой строки и не пишет. Тупо сразу жми * и попадёшь в загрузчик.
Да, пробовал, но и как в комментах тут выше у человека, не реагирует. Только у него были ошибки записи, а у меня все гладко .
А надпись один раз появляется или в цикле?
один раз
А какой загрузчик то сейчас прошит? Так себя ведёт половина даховского обычно. Надо ростелекомовский шить.
Сейчас прошит ipc1230sp-boot+ из этой статьи. В ростелекомовском не отрабатывает команда TFTP. Пишет PHY not link. Немного предыстории. Еще когда только камера попала ко мне, у меня получилось все прошить с первого раза, но только MAC упорно не хотел меняться. Просто после команды setenv не менялся и все. Вот тогда я начал играться разными прошивками…
ipc1230sp-boot+ – это не загрузчик и через HiTool он не зальётся. Или сначала заливал другой загрузчик, а потом уже этот кусок дампа прошил? А насчёт похожей ситуации в комментах. Там я удалённо подключался и решили, но в чём дело было смутно помню. Изначально не всё правильно было подключено и сконфигурировано. И ещё потом пробовали setenv phyaddru 0; setenv phyaddrd 1; saveenv; reset.
Да, совершенно верно, сначала через HiTool и загрузчика u-boot.bin с какой-то родственной модели восстанавливается кирпич. После попадания в загрузчик переписываю его на ipc1230sp-boot+. После ресета загрузка стоит на hi3516cv300 System startup и в загрузчик не попасть по нажатию *.
Если ipc1230sp-boot+ прошита успешно и без бэдов, то всё должно быть. Варианта два – либо не успеваешь нажать *, либо какой-то косяк с TX. У меня такое случается рандомно на разных камерах. Спасает замена адаптера – если не работает CH340, то работает CH341A в режиме TTL и наоборот. Почему так происходит точно не знаю, но происходит периодически.
Спасибо большое, mixatronik, за помощь, жму руку! Мне не хватает знаний только понять, почему только с ростелекомовского загрузчика получается правильно перейти на дахуашный? Ведь идут команды с прямой работой с памятью…
То есть получилось?
Это очень правильный вопрос! Из-за этого провозился с камерой 1230 почти год, пока камрад АВАТАРА, с которым скооперировались, не подкинул одну идею. В общем, если присмотреться к первым строкам лога загрузки, то там есть в том числе и параметры алгоритма расчёта контрольной суммы. У Ростелекома и Дахи – 8 бит, а у OpenIPC, например, 1 бит. Поэтому дамп записанный из под OpenIPC некорректно считывается из под Дахи и не запускается.
Да, получилось, спасибо за ценную информацию! 🙂 Только теперь не хочет бэкап конфигурации импортировать, но это уже мелочи, сейчас все в ручную настрою
Вангую – не тот браузер.
А, все, загрузилась, это я уже туплю под вечер, забыл совсем про “правильный” браузер))
Да, вечерами тоже подтраиваю…
Дамп есть, но там же NAND и просто так его не залить. Самое правильное всё-таки залить загрузчик, но не даховский, а ростелекомовский. А когда камера оживёт, повторить процесс внимательнее. Пару раз было такое, что при прошивке ipc1230sp-boot+.zip система ругалась на бэды и всё, что было дальше записывалось со смещением. Такая ситуация тоже приводит к окирпичиванию и требует записи даховского дампа по частям. Как праивло бэды приходятся на пустые области и если их миновать, то всё работает.
И ростелекомовский дамп и ростелекомовский загрузчик отдельно есть в статье Отвязка от Ростелеком камеры IPC-HFW1230SP/IPC-HDW1230SP
З.Ы. В процессе экспериментов стопицот раз убивал камеры – и 1230 и 2122, но всегда оживлял.
Да, я пробовал загрузчик с этой статьи. Но почему-то в нем не отрабатывает команда TFTP. Пишет PHY not link. Там кстати в комментах кто-то тоже сталкивался с такой проблемой но решения не увидел.
И я столкнулся… Решение вот:
setenv phyaddru 0;setenv phyaddrd 1;save
nand write 0x82000000 0x0 0x1000000
reset
Здравствуйте. После этого шага видеокамера кирпичится. Висит на startup.
С этим файлом что-то надо делать, как-то ещё подготавливать?
То же самое происходит
nand tc58cvg0s3h камера ipc2122sr3-ruo4
пробовал dhboot.bin прошивать перед reset не помогает
восстанавливаю Ростелекомовский загрузчик, вывод printenv
bootcmd=hi_gpio $(hi_gpios); fwupdate mmc 0:1 firmware.bin –enable-legacy-fw — with-props; nand read 0x82000000 0x200000 0x500000; bootm 0x82000000; setenv boo targs $(bootargs) bkp=1; nand read 0x82000000 0x700000 0x500000; bootm 0x8200000 0
bootdelay=1
baudrate=115200
ethaddr=00:00:23:34:45:66
ipaddr=192.168.1.10
serverip=192.168.1.2
netmask=255.255.255.0
bootfile=”uImage”
hi_gpios=60! 0! 73 27 72
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Jun 01 2020 – 08:20:12)
bootargs=mem=64M console=ttyAMA0,115200 rootfstype=ramfs mtdparts=hinand:1024K(b oot),1024K(tech),5120K(kernel),16384K(app),-(config) hw_type=405 ubi.mtd=3,2048 bkp=1
Environment size: 662/131068 bytes
Тут два варианта:
1. В родном даховском загрузчике по умолчанию отключен вывод лога, поэтому после подачи питания не надо ничего ждать, а надо сразу давить *. Если удастся войти в загрузчик – хорошо.
2. Этот вариант похуже. Вангую – после указанной команды была ошибка про bad block. Была?
З.Ы. Не дожидаясь ответа напишу, что делать если таки была. При обнаружении бэд-блока он пропускается и дальше дамп пишется со смещением, соответственно последовательность выполнения команд нарушается. Плюс в том, что в дампе много пустых областей, которые можно пропускать и на работу это не влияет. Главное, чтобы бэд-блок попадал именно на такое пустое место. Решение состоит в том, чтобы залить дамп по частям:
mw.b 0x82000000 0xff 0x200000
tftp 0x82000000 dhboot-min.bin
nand erase 0x0 0x200000
nand write 0x82000000 0x0 0x200000
mw.b 0x82000000 0xff 0x200000
tftp 0x82000000 dhboot.bin
nand erase 0x200000 0x200000
nand write 0x82000000 0x200000 0x200000
После этого нужно войти в загрузчик и задать переменные HWID и hwidEx:
setenv HWID IPC-HDBW1230E-S2:01:02:05:60:28:00:01:00:00:00:00:320:00:00:00:00:00:00:00:00:100
setenv hwidEx 00:03:00:00:00:00:00:00:00:00:00:00:00:00:00:00
save
Как правило этого достаточно. Дальше по мануалу. Если в загрузчике не будет сети, то надо сделать ещё:
setenv phyaddru 0;setenv phyaddrd 1;save
Была ошибка, забыл написать.
Завтра попробую.
Спасибо!!! Все получилось.
Пожалуйста!
Здравствуйте! IPC2122SR3-PF40-C от РТК отвызвается? не пробовали?
Привет! Отвязывается, но с некоторыми оговорками: Отвязка от Ростелеком камеры IPC2122SR3-RUO