Отвязка от Ростелеком камеры IPC2122SR3-RUO

Отвязка от Ростелеком

Прислали камеру IPC2122SR3-RUO для исследования на предмет отвязки от облака Ростелеком. Занимался этим на протяжении нескольких месяцев и результат, хотя и с некоторыми нюансами и вообще странным образом, но был достигнут.

По серийному номеру с платы поддержка прислала прошивку, которая была успешно прошита и запущена, но картинка отсутствовала. То есть камера загружается и войти в веб-морду можно, но изображения нет, а в консоли – ошибки.

При сравнении со стоковым аналогом – камерой Uniview IPC2122SR3-PF40-C, выяснилось, что камеры одинаковые только на первый взгляд. Корпус, основная плата, процессор и память те же, поэтому прошивка и стартует, но вот сенсор совсем другой.

Стоковую прошивку пока найти не удалось и не факт, что она вообще есть. OpenIPC запускается, но картинка фиговая, как и у камеры IPC-HFW1230SP. Самое интересное, что платформы этих камер в основных компонентах совпадают: процессор – HI3516CV300, память – NAND и сенсор OV2735. Возникла мысль – почему бы не попробовать залить в камеру Uniview прошивку от Dahua?

Ещё одна модель, которую удалось прошить по этому же мануалу: IPC322SR3-VSPF28-C.

Инструменты

Материалы

Утилиты

  • TFTP-сервер Tftpd64 — TFTP-сервер для передачи файлов.
  • Putty — программа для работы через UART.
  • ConfigTool — поисковая утилита для камер Dahua.

Исходные данные

u-boot
hi3516cv300 System startup


U-Boot 2010.06 (Jul 07 2020 - 13:00:40)

Check Flash Memory Controller v100 ... Found
SPI Nand(cs 0) ID: 0xef 0xaa 0x21 Name:"W25N01GV"
Block:128KB Page:2KB Chip:128MB*1 OOB:64B ECC:8bit/512
ECC provided by Flash Memory Controller
SPI Nand total size: 128MB
MMC:
EMMC/MMC/SD controller initialization.
Card did not respond to voltage select!
No EMMC/MMC/SD device found !
*** Warning - bad CRC or NAND, using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
hi3516cv300-vc #
help
?       - alias for 'help'
base    - print or set address offset
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
bootss  - boot from snapshot image
cmp     - memory compare
cp      - memory copy
crc32   - checksum calculation
ddr     - ddr training function
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fwupdate- fwupdate command allows to flash vc camera firmware from file on mmc or from memory.
getinfo - print hardware information
go      - start application at address 'addr'
help    - print command description/usage
hi_gpio - set hisilicon gpio states
loadb   - load binary file over serial line (kermit mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - mmcinfo -- display MMC info
mtest   - simple RAM read/write test
mw      - memory write (fill)
nand    - NAND sub-system
nboot   - boot from NAND device
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sf      - SPI flash sub-system
tftp    - tftp  - download or upload image via network using TFTP protocol
ugzip   - Compress gzipfile with hardware IP
version - print monitor version
printenv
bootargs=mem=64M console=ttyAMA0,115200 rootfstype=ramfs mtdparts=hinand:1024K(boot),1024K(tech),5120K(kernel),16384K(app),-(config) hw_type=1204 ubi.mtd=3,2048
bootcmd=hi_gpio $(hi_gpios); fwupdate mmc 0:1 firmware.bin --enable-legacy-fw --with-props; nand read 0x82000000 0x200000 0x500000; bootm 0x82000000; setenv bootargs $(bootargs) bkp=1; nand read 0x82000000 0x700000 0x500000; bootm 0x82000000
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=0! 7! 0 72! 73!
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Jul 07 2020 - 13:00:40)

Environment size: 657/131068 bytes

Вскрытие

Наверное самое сложное – это разобрать камеру. Первым делом надо снять декоративную накладку, которая держится на 4-х защёлках, расположенных по углам. Аккуратно поддеваем накладку, просунув, например, кредитную карту, между ней и корпусом в верхней части, ведём вдоль щели и освобождаем защёлки.

Далее откручиваем 4 винта крепления передней крышки и снимаем её, стараясь не оторвать шлейф и провод питания ИК-подсветки.

Следующий этап – откручиваем 3 винта крепления платы и вынимаем её. Далее, откручиваем шестигранные проставки. Для этого понадобится миниголовка – пришлось специально купить набор, в котором она была.

Отвязка от Ростелеком камеры IPC2122SR3-RUO

Нижнюю плату тоже вынимаем из корпуса и соединяем с верхней. С помощью проставки лучше сделать так, чтобы платы не соприкасались друг с другом. Иначе могут коротнуть.

Подключение

После этого можно подключаться к разъёму 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
Перед манипуляциями с tftp-сервером отключайте Брандмауэр Windows или, если используете какой-то другой, то его, либо ставьте порт UDP 69 в исключения.

Прошивка

Шьём подготовленный загрузчик и перезагружаемся в него.

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

Тюнинг

Платформа та же, но производитель другой, поэтому и совместимость не полная. Обнаружил три момента:

  1. В Dahua есть такая вещь – Voltage Detection. Видимо, это какой-то контроль напряжения, поддержки которого в железе от Uniview нет, поэтому через некоторое время работы в правом верхнем углу экрана вылезает красный мигающий значок батарейки. Ни на что, вроде бы, не влияет, но напрягает – надо отключить! Делается это в разделе Event->Abnormality->Voltage Detection.
  2. ИК-фильтр срабатывает наоборот, т.е. в ночном режиме он включен, а в дневном выключен. Тут уже программно не решишь – надо в разъёме поменять местами красный и чёрный проводок, инвертируя управление.
  3. В ночной режим камера переходит нормально, а вот в дневной возвращаться не хочет. Надо в разделе Camera->Conditions, в профиле дневного режима Day, в подразделе Day & Night выбрать вариант Color вместо Auto и на вкладке Profile Management задать расписание.

Для удобства сохранил настройки в файл и достаточно их просто импортировать в разделе System.

После прошивки получаем рабочую камеру и даже с подключением к облаку Dahua!

Оцените статью
( Пока оценок нет )
МихаТроник
Добавить комментарий

  1. Слава

    Добрый день, не останавливается загрузка при первоначальном подключении камеры. Что можно сделать?

    Ответить
    1. mixatronik автор

      В статье в том числе и про это написано – пункт Подключение

      Ответить
      1. Слава

        Я такой же программатор использую, камера Uniview только модель другая(купольная).

        Ответить
        1. mixatronik автор

          Какую клавишу жмёшь?

          Ответить
          1. Слава

            Сначала *, а потом все подряд и никакой реакции.

          2. mixatronik автор

            А какая модель камеры то и какая в ней сейчас прошивка? * – это для Dahua. Для Uniview Ctrl+B или Ctrl+Enter или просто Enter можно попробовать. Ну и ты же понимаешь, что нельзя шить какую-либо случайную прошивку на любую имеющуюся камеру?

  2. Виктор

    nand write 0x82000000 0x0 0x1000000
    reset

    Здравствуйте. После этого шага видеокамера кирпичится. Висит на startup.
    С этим файлом что-то надо делать, как-то ещё подготавливать?

    Ответить
    1. mixatronik автор

      Думаю, всё в порядке. Просто загрузчик не выводит ничего в консоль. Надо сразу после подачи питания давить * и всё будет.

      Ответить
      1. Виктор

        К сожалению не заходит.
        Приложу часть лога. Есть какой-то 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

        Ответить
        1. mixatronik автор

          Ага… Да, дело именно в этом. Из нескольких прошитых камер у одной была точно такая же беда, но удалось обойти. Смысл в том, что загрузчик у Дахуа состоит из двух частей, а в предлагаемом файле есть они оба, но при наличии бэдов, всё, что после них смещается, соответственно вторая часть загрузчика пишется по другому адресу и управление ей не передаётся. Задача в том, чтобы вычислить адрес бэд-блока и надеяться на то, что данных там нет. И если это действительно так, то просто прошить файл частями. Точнее, первая то уже на месте. Вторую часть прошить надо. Ещё бы вспомнить, как именно я это делал :))))
          Для начала попробуйте после прошивки и перед резетом прошить ещё отдельно файл dhboot.bin по адресу 0x200000

          mw.b 0x82000000 0xff 0x1000000
          tftp 0x82000000 dhboot.bin
          nand erase 0x200000 0x1000000
          nand write 0x82000000 0x200000 0x1000000

          Если не получится, будем думать дальше.

          З.Ы. Нашёл свои записки – у меня бэд был по тому же адресу.

          Ответить
          1. Виктор

            Благодарю. Предложенное вами решение сработало. Прошивка успешно загружена. Но потом во время загрузки множество ошибок и, как я понял, нормально не запустилась. В сети пингуется, но для инициализации не видна.
            И тут я понял, что был не внимателен, у меня модель IPC2122SR3-PF40-C, и скорее всего прошивка не подошла.

          2. mixatronik автор

            То есть PF40-C, но камера Ростелекомовская? Вообще эта модели, как я понял, идентичны за исключением платы сенсора. Но с IPC2122SR3-PF40-C даже проще. Если это действительно она, то и прошивка есть и дамп. Визуально платы отличаются цветом текстолита и количеством электроники. У IPC2122SR3-PF40-C плата чёрная, а у IPC2122SR3-RUO зелёная. Возможно переменные неверно прописались из-за такого способа прошивки. У меня тоже не с первого раза вышло, но что именно было не так – запамятовал. Покажите printenv.

  3. Виктор

    Ростелкомовская. Плата зелёная.
    Вот 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)

    Ответить
    1. Виктор

      Смущают ещё ошибки после загрузки прошивки.

      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 …

      Ответить
      1. mixatronik автор

        В принципе, как я и думал. 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

        Без этого система не стартует.

        Ответить
        1. Виктор

          Спасибо большое за помощь!
          Всё получилось.
          По настройкам. Батарейка светится – отключил. Шторка работает правильно – не трогал. В день не переходит – поставил color и настроил расписание.

          Ответить
          1. mixatronik автор

            В статье конфиг-файл есть со всеми необходимыми настройками, а насчёт шторки – присмотритесь. Там не сильно заметно, в отличие от Хиков, например, где прям всё розовое становится, но когда увидишь, как должно быть, то становится понятно, что было неправильно. Не сильно критично, но цвета некорректно отображаются, а если сделать как надо, то будет всё ярко и красиво. Проверить и убедиться просто даже без смены проводков – пусть перейдёт в ночной режим и потом можно снять питание шторки и переключить в дневной.

          2. Виктор

            Да, вы правы на счёт шторки. В искусственном освещении не замечал разницы. Переставил провода.