Отвязка от Ростелеком камеры IPC-C22E-S2

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

Если с камерой от ДОМ.РУ всё обстоит довольно просто – нужно только штатными средствами прошить оригинальную прошивку, то Ростелеком постарался на славу! Прошивка совсем другая и надо менять её полностью.

Инструменты

Материалы

Утилиты

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

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

u-boot
IPL geaba80f
D-0a
128MB
BIST0_0001-OK
Load IPL_CUST from SPINAND
u16Pba: 0006
crc OK

IPL_CUST geaba80f
u16Pba: 0009
Load UBOOT from SPINAND
  decomp_size=0x00074400


U-Boot 2015.01 (May 17 2021 - 15:28:41)

Version: I6g#######
I2C:   ready
DRAM:
WARNING: Caches not enabled
SPINAND_I:  SPINAND: _MDrv_SPINAND_GET_INFO: Found spinand INFO
(0xA1), (0xE4), (0x7F),
SPINAND: board_nand_init: CIS contains part info
128 MiB
MMC:   MStar SD/MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   MAC Address 00:30:1B:BA:02:DB
Auto-Negotiation...
AN failLink Status Speed:10 Full-duplex:0
Status Error!
sstar_emac
Warning: sstar_emac using MAC address from net device

gpio debug MHal_GPIO_Pad_Set:599
gpio[12] is 1
gpio debug MHal_GPIO_Pad_Set:599
gpio[13] is 1
gpio debug MHal_GPIO_Pad_Set:599
gpio[63] is 0
gpio debug MHal_GPIO_Pad_Set:599
gpio[62] is 0
gpio debug MHal_GPIO_Pad_Set:599
gpio[52] is 0
gpio debug MHal_GPIO_Pad_Set:599
gpio[6] is 1
gpio debug MHal_GPIO_Pad_Set:599
gpio[7] is 1
gpio debug MHal_GPIO_Pad_Set:599
gpio[6] is 0
_[sdmmc_0] Err: #Cmd_8 (0x000001AA)=>(E: 0x0008)(S: 0x00000000)__(L:913)
_[sdmmc_0] Err: #Cmd_55 (0x00000000)=>(E: 0x0008)(S: 0x00000000)__(L:913)
_[sdmmc_0] Err: #Cmd_1 (0x00000000)=>(E: 0x0008)(S: 0x00000000)__(L:913)
Card did not respond to voltage select!
Invalid device index:part 0:1
SigmaStar #
help
?       - alias for 'help'
aes     - Control Mstar AES engine
base    - print or set address offset
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
chpart  - change active partition
cmp     - memory compare
cp      - memory copy
crc32   - checksum calculation
dbg     - set debug message level. Default level is INFO
dcache  - enable or disable data cache
debug   - Disable uart rx via PAD_DDCA to use debug tool
dhcp    - boot image via network using DHCP/TFTP protocol
dstar   - script via SD/MMC
eeprom  - EEPROM sub-system
env     - environment handling commands
estar   - script via network
estart  - EMAC start
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fatread - FAT fatread with FSTART
fatsize - determine a file's size
fwupdate- fwupdate command allows to flash vc camera firmware from file on mmc or from memory.
go      - start application at address 'addr'
gpio    - Config gpio port
help    - print command description/usage
i2c     - I2C sub-system
icache  - enable or disable instruction cache
initDbgLevel- Initial varaible 'dbgLevel'
loop    - infinite loop on address range
macaddr - setup EMAC MAC addr
md      - memory display
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mssdmmc - Mstar SD/MMC IP Verification System
mstar   - script via TFTP
mtdparts- define flash/nand partitions
mw      - memory write (fill)
mxp     - MXP function for Mstar MXP partition
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
readcis - Read cis block content
reset   - Perform RESET of the CPU
riu     - riu  - riu command

run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
secauth - Control Sstar security authenticate sequence
setenv  - set environment variables
sf      - SPI flash sub-system
sfbin   - for uploading sf image to a server(via network using TFTP protocol)
sigauth - Only verify digital signature without aes
srcfg   - sensor pin and mclk configuration.
tftpboot- boot image via network using TFTP protocol
ubi     - ubi commands
usb     - USB sub-system
usbboot - boot from USB device
ustar   - script via USB
version - print monitor, compiler and linker version
writecis- Search CIS in dram then write to spinand.
printenv
baudrate=115200
bootargs=mem=130840K console=ttyS0,115200 LX_MEM=0x7fc6000 mma_heap=mma_heap_name0,miu=0,sz=0x4000000 rootfstype=ramfs mtdparts=nand0:1536K(boot),512K(tech),5120K(kernel),16384K(app),-(config) hw_type=2010
bootcmd=nand read 0x22000000 0x200000 0x500000; bootm 0x22000000; setenv bootargs $(bootargs) bkp=1; nand read 0x22000000 0x700000 0x500000; bootm 0x22000000
bootdelay=0
ethact=sstar_emac
ethaddr=00:30:1b:ba:02:db
preboot=gpio output 12 1;gpio output 13 1;gpio output 63 0;gpio output 62 1;gpio output 52 0;gpio output 6 1;gpio output 7 1;gpio output 6 0; ; fwupdate mmc 0:1 firmware.bin --enable-legacy-fw --with-props
stderr=serial
stdin=serial
stdout=serial
usb_folder=images

Environment size: 724/131068 bytes

Подготовка

  • Разархивировать подготовленные файлы прошивки, скопировать их на карту памяти и вставить карту в камеру. Я использовал карту объёмом 16Gb, отформатированную в FAT32.
  • Подключить UART-адаптер к камере и компьютеру. Установить драйверы, если ещё не установлены.
  • Открыть Putty, выбрать COM-порт, на котором висит адаптер и задать параметры порта.
  • Подать питание на камеру.
  • Остановить загрузку нажатием клавиши Enter.
Отвязка от Ростелеком камеры IPC-C22E-S2

Бэкап

Если планов возвращаться на ростелекомовскую прошивку нет, то этот пункт можно пропустить. Тем более, что камера на процессоре SigmaStar, а методика раскирпичивания таких камер уже освоена и описана: Восстановление камер на процессорах SigmaStar.

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

mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x0 0x1000000;mmc write 0x22000000 0x0 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x1000000 0x1000000;mmc write 0x22000000 0x8000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x2000000 0x1000000;mmc write 0x22000000 0x10000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x3000000 0x1000000;mmc write 0x22000000 0x18000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x4000000 0x1000000;mmc write 0x22000000 0x20000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x5000000 0x1000000;mmc write 0x22000000 0x28000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x6000000 0x1000000;mmc write 0x22000000 0x30000 0x8000
mw.b 0x22000000 0xff 0x1000000;nand read 0x22000000 0x7000000 0x1000000;mmc write 0x22000000 0x38000 0x8000

После записи дампа нужно в Linux проделать следующие операции, чтобы получить файлы, пригодные для дальнейшего использования в случае необходимости.

sudo dd bs=512 count=32768 if=/dev/sdd of=./c22ep_s2_dump0.bin
sudo dd bs=512 skip=32768 count=32768 if=/dev/sdd of=./c22ep_s2_dump1.bin
sudo dd bs=512 skip=65536 count=32768 if=/dev/sdd of=./c22ep_s2_dump2.bin
sudo dd bs=512 skip=98304 count=32768 if=/dev/sdd of=./c22ep_s2_dump3.bin
sudo dd bs=512 skip=131072 count=32768 if=/dev/sdd of=./c22ep_s2_dump4.bin
sudo dd bs=512 skip=163840 count=32768 if=/dev/sdd of=./c22ep_s2_dump5.bin
sudo dd bs=512 skip=196608 count=32768 if=/dev/sdd of=./c22ep_s2_dump6.bin
sudo dd bs=512 skip=229376 count=32768 if=/dev/sdd of=./c22ep_s2_dump7.bin
При первой попытке отвязки такой камеры прошил только загрузчик, наивно полагая, что остальное прошью уже из него с помощью макросов. Ошибка была в том, что упустил два важных момента. Первый – проводной сети у камеры нет, а значит использовать tftp не получится и второй – в родном загрузчике отсутствует команда fatload для чтений данных с карты памяти, а значит считать дампы с карты тоже не выйдет.
Нужная команда есть в ростелекомовском загрузчике, поэтому пришлось посредством I2C залить в камеру первый кусочек бэкапа и повторить процесс, но уже с заливкой всех частей прошивки.

Прошивка

Общая метода уже описана в статье Восстановление камер Dahua, поэтому здесь повторяться не буду и приведу только конкретные шаги. Тем более, что ничего резать и высчитывать не надо – вся информация предоставлена. В двух словах: нужно залить на флешку заранее подготовленные части прошивки, а затем, после перезагрузки и входа в оригинальный загрузчик, подправить переменные окружения.

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 dhboot-min.bin
nand erase 0x0 0x200000
nand write 0x22000000 0x0 0x200000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 dhboot.bin
nand erase 0x340000 0x100000
nand write 0x22000000 0x340000 0x100000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 partition-x.cramfs.bin
nand erase 0x1C00000 0x100000
nand write 0x22000000 0x1C00000 0x100000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 pd-x.squashfs.bin
nand erase 0x1D00000 0x100000
nand write 0x22000000 0x1D00000 0x100000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 kernel.bin
nand erase 0x2200000 0x300000
nand write 0x22000000 0x2200000 0x300000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 web-x.squashfs.bin
nand erase 0x2900000 0x100000
nand write 0x22000000 0x2900000 0x100000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 romfs-x.squashfs_0.bin
nand erase 0x3300000 0x1000000
nand write 0x22000000 0x3300000 0x1000000

mw.b 0x22000000 0xff 0x1000000
fatload mmc 0 0x22000000 romfs-x.squashfs_1.bin
nand erase 0x4300000 0x100000
nand write 0x22000000 0x4300000 0x100000

Переменные окружения

После прошивки нужно перезагрузить камеру командой reset и снова войти в загрузчик. Теперь это уже родной загрузчик Dahua, поэтому останавливаем загрузку звёздочкой: *. Войдя в загрузчик задаём переменные. Значение ID берётся из QR-кода на корпусе ИК-фильтра (точки убрать), а MAC-адрес, он же wifiaddr – с наклейки. Теоретически ID тоже можно взять с наклейки. С ростелекомовским ID облако тоже вроде бы работает, но могут ведь и забанить такие идентификаторы, а ID из QR-кода хотя бы похож на родной, хоть и цифр в нём чуть больше. SC – это Security Code использующийся в качестве пароля администратора и пароля точки доступа Wi-Fi, которую запускает камера для того, чтобы можно было к ней подключиться. Можно задать своё значение, но не меньше 8 символов.

setenv HWID IPC-C22E-S2:01:02:0F:77:3B:00:01:10:01:01:04:400:00:02:00:00:04:01:00:01:80
setenv hwidEx 00:03:00:00:00:00:00:00:00:00:00:00:00:00:00:00
setenv devalias IPC-C22E-S2

setenv SC MXTR2023
setenv ID 7F0638DB0000000
setenv wifiaddr 6C:1C:71:00:00:00

save

Подключение

Подключение камеры к Wi-Fi и к облаку производится с помощью приложения IMOU или DMSS. Проще всего сделать это отсканировав QR-код, но ростелекомовский не подойдёт, т.к. содержит только ID, да и тот теперь неправильный. Правильный QR-код нужно сгенерировать каким-нибудь сервисом, например qrcoder.ru. Кодируемая строка должна иметь вид:

{SN:7F0638DB0000000,DT:IPC-C22EP-S2,SC:MXTR2023,NC:008}

где SN – ваш серийный номер, а SC – ваш Security Code. Остальное менять не нужно. Для этой строки QR-код выглядит так:

Отвязка от Ростелеком камеры IPC-C22E-S2

Полученный QR-код сканируется приложением и, после запроса параметров местной Wi-Fi сети, камера подключается к ней и добавляется в аккаунт. Подробнее тут: Подключение.

Web-морды у камеры нет, но понастраивать её можно через ConfigTool.

Оцените статью
( 1 оценка, среднее 5 из 5 )
МихаТроник
Добавить комментарий

  1. Владимир

    Доброго дня. А есть чуть более подробная инструкция для чайников?
    Камеру разобрал, подпаялся к разъёму.
    Скопировал разархивированную прошивку на флешку.
    Запустил Putty, в графе Session выставил свой COM4 и скорость 115200, нажал Open – открылось окно сессии.
    А вот после этого всё дальше не пошло: подаю на камеру питание, в окне начинают в массовом порядке бегать надписи, но ни сразу ни потом нажатие Enter этот процесс не останавливает. Делаю я это соответственно из Win10… может, нужно было из-под Линукса?

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

      Доброго! Камера точно этой модели?

      Ответить
  2. Владимир

    Естественно, с первого раза не получилось 🙂 Бэкап не сделал. Загрузчик прошился, но видимо что-то из файлов прошилось некорректно, т.к. при включении камера вроде и грузится, но диод мигать не начинает и, а просто горит, судя по логу в Putty, загрузка останавливается на стадии
    init: Unable to open persistent property directory /data/property errno: 2
    init: property_service started…
    init: minit [MVX2####g8f044dCM_MINIT#####XVN]
    И всё, камера просто так и стоит с горящим красным диодом, сеть WI-FI не появляется.

    Поделитесь кто-нибудь бэкапом плиз на почту megabyte-s@yandex.ru

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

      Видимо да – что-то пошло не так… Все части прошивки заливал? И все они записались успешно? Ошибок не было? И переменные инициализированы?
      С восстановлением два варианта. Первый – штатный, но зависит от того, какая часть системы работает. К сожалению одного загрузчика для этого недостаточно. Мануал такой:
      1. Отформатируйте карту памяти в fat;
      2. Положите 2 файла из архива в корень карточки;
      3. отключите питание от камеры;
      4. вставьте карту;
      5. зажмите кнопку RESET, и с зажатой кнопкой подайте питание и удерживайте до тех пор пока камера не начнет перемигиваться красным и зеленым цветом.
      Нужные файлы вот: https://disk.yandex.ru/d/UiqUAlj1g5gcsA
      Если не сработало, то надо восстанавливать через I2C. Как именно описано в статье: Восстановление камер на процессорах SigmaStar. Надо залить в память камеры первый кусочек ростелекомовского дампа, в котором есть загрузчик и повторить процедуру, но уже внимательнее :). Заливается правда долго, но можно и вырезать – сам-то загрузчик маленький. Дамп смоуг скинуть только вечером – никуда не выкладывал его пока – дома на компе лежит.

      Ответить
      1. Владимир

        0) Судя по ростелекомовской наклейке, это именно IPC-C22E-S2. Дата производства указана 10.2022. Но есть некотрое отличие с той, что в этой статье: наклейка с ID находится не на объективе, а со сзади на плате, причём это не просто QR, а рядом с ним ещё и строчкой продублирован сам ID.
        1) На удержание кнопки при включении камера никак не реагирует. Видимо, всё плохо. Но попробую ещё раз с правильными файлами в правильной ФС карточки (было FAT32), чем чёрт не шутит.
        2) Части прошивки вроде заливал все. Ошибок не видел. Но заливались они как-то слишком стремительно, буквально 0,5…2 секунды, что несколько подозрительно. Ну и, судя по тому, что камера не запускается, где-то я всё-таки накосячил, т.к. чудес не бывает 🙂
        3) Переменные ввёл, но, к сожалению, не знаю, как понять, что они инициализированы. ID взял с наклейки на плате камеры, MAC – с наклейки РТ на подставке камеры, SC оставил как в статье. Может, можно попробовать повторить?

        Дамп не сделал только потому, что программатор CH341A только через 2 дня приедет на руки. О чём теперь, естественно, жалею.
        Не столько ценна сама камера, сколько из спортивного интереса хочется её поднять. Да и с программаторами интересно поработать.

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

          Начну с конца. Для снятия дампа программатор не нужен, т.к. всё делается через консоль и пишется дамп на карту, но там хитро. Ну и насчёт возможности снятия дампа с НАНДов этим программатором мнения расходятся. Сам не пробовал, поэтому ничего сказать не могу.
          Насчёт инициализированы или нет, и имею ввиду, что прописаны и сохранены. Достаточно вызвать printenv, чтобы убедиться, что переменные на месте. Если нет, например HWID или он указан неверно, то камера не запустится.
          Шьются быстро все кроме предпоследнего бинарника, который весит 16 метров. Остальные мелкие.
          С родным ID бывает по разному – либо он в разных местах, либо его вообще нет. Кау же писал кажется, с ростелекомовским тоже работает.

          Если с переменными всё в порядке но не стартует и через зажатый резет не шьётся, то только snander поможет. Дамп скину.

          Ответить
          1. Владимир

            В общем, результаты такие: с карточки не шьётся, переменные не применились. Ввожу команды, никакой ошибки при этом не выдаётся, но после ввода reset и printenv всё становится вот так:

            bootargs=mem=128M console=ttyS0,115200 root=/dev/mtdblock12 rootfstype=squashfs
            bootcmd=kload 0x22000000; bootm 0x22000000
            bootdelay=1
            baudrate=115200
            ethaddr=00:12:34:56:78:9A
            ipaddr=192.168.1.108
            serverip=192.168.1.1
            gatewayip=192.168.1.1
            netmask=255.255.255.0
            bootfile=”uImage”
            wifiaddr=00:12:34:56:78:91
            mp_autotest=0
            UUID=tuya136991455963d822
            AUTHKEY=wc2QVH1BIK5APSQ9nV9Mz9vxYfAsQ6Cu
            ID=000000000000000000
            da=tftp 0x22000000 dhboot.bin.img; flwrite;tftp dhboot-min.bin.img;nand protect off;flwrite
            dr=tftp 0x22000000 romfs-x.squashfs.img; flwrite
            dk=tftp 0x22000000 kernel.img; flwrite
            du=tftp 0x22000000 user-x.squashfs.img; flwrite
            dw=tftp 0x22000000 web-x.squashfs.img; flwrite
            dp=tftp 0x22000000 partition-x.cramfs.img;flwrite
            dc=tftp 0x22000000 custom-x.squashfs.img; flwrite
            up=tftp 0x22000000 update.img; flwrite
            tk=tftp 0x22000000 uImage; bootm
            dh_keyboard=1
            appauto=1
            sysbackup=1
            loglevel=4
            pd=tftp 0x22000000 pd-x.squashfs.img; flwrite
            stdin=serial
            stdout=serial
            stderr=serial
            ethact=sstar_emac
            ver=U-Boot 2010.06-svn8061 (Nov 27 2021 – 10:11:10)

            Environment size: 1063/131068 bytes

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

          2. mixatronik автор

            А-а-а-а-а-а! Позор на мои седины… Конечно переменные не сохранились. Команды save то нет!!! После ввода переменных надо её ввести… Поправил.
            З.Ы. Благодарю за фидбэк.
            З.З.Ы. Пардоньте…

          3. Владимир

            Воооот! Теперь у меня полный “дас ист фантастиш”. После сохранения переменных камера загрузилась, заморгал диод и нашлась приложением ImoU, подключилась к вайфаю и открылась в Конфиг Туле.
            Так что громадное спасибо за статью и за то, что помогли разобраться в том, что не понял!

          4. mixatronik автор

            Рад, что всё в порядке! И ошибку в статье исправили заодно…

  3. Евгений

    SigmaStar # fatload mmc 0 0x22000000 dhboot-min.bin
    _[sdmmc_0] Err: #Cmd_16 (0x00000200)=>(E: 0x0008)(S: 0x00000B00)__(L:913)
    ** Unrecognized filesystem type ** тут я перезагрузил камеру
    SigmaStar # ▒<▒8▒<8▒▒▒<
    это всё,я убил загрузчик?

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

      Да нет. Убивается он только после nand erase 0x0.

      Ответить
      1. Евгений

        Я вводил эти команды
        mw.b 0x22000000 0xff 0x1000000
        fatload mmc 0 0x22000000 dhboot-min.bin
        nand erase 0x0 0x200000
        nand write 0x22000000 0x0 0x200000
        потом понял что файлы с карты не записываются, поробовал с другой картой и тоже ответ был Unrecognized filesystem type
        вот я и перезагрузил камеру.
        далее при загрузке такие символы ▒<▒8▒<8▒▒▒<

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

          Основной мой посыл в том, что если команда fatload mmc 0 0x22000000 dhboot-min.bin закончилась неудачей, то не надо делать nand erase 0x0 0x200000 и nand write 0x22000000 0x0 0x200000, потому что раз с карты ничего не считалось, то и записывать нечего. В результате – кирпич. Другое дело, что эту камеру можно восстановить через snander, так что не всё потеряно.

          Ответить
  4. Pavel

    что может быть?, восстановил по инструкции, но теперь в терминал пишет такое:

    ▒▒0▒3ь2▒#s▒▒▒3▒J▒\J▒1B▒▒▒▒
    ▒1▒▒ͺJ▒
    -\J!j▒▒▒▒

    камера при этом пашет нормально видится в сети, подключается

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

      Похоже на неправильную скорость – надо 115200. Либо плохой контакт.

      Ответить
      1. Pavel

        Да, все верно, по запаре забыл сменить скорость порта, стояла поумолчанию 9600 поставил 115200 и все пошло, спасибо большое!!!

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

          Пожалуйста!

          Ответить