Купил IP-камеру, на которой установлено фирменное ПО (без HTTP-сервера). Это мешает мне интегрировать его в мою домашнюю сеть.
Я хочу заменить программное обеспечение (ELF с закрытым исходным кодом) на пакет Motion, который я уже использую, и добавить некоторые функции.
У меня нет особой системной компетенции, и прошло больше недели с тех пор, как я путешествую по сети, чтобы учиться, но я не могу выйти. У меня есть доступ к консоли U-boot (адаптер USB-TTL) и telnet (root). На веб-камере есть устройство для чтения SD-карт, которое я мог бы использовать, если мне нужно место. Я начал с резервного копирования трех разделов (с помощью dd).
Я разархивировал файл mtdblock2 (binwalk -e). Который генерирует классическое дерево Linux со ссылками на Busybox, некоторую бинарную систему и проприетарное ПО.
Я попытался разархивировать mtdblock1, который генерирует zImage. Декомпрессия zImage генерирует два каталога и один файл (консоль). Но мне нужны модули ядра, которые в нем есть. Что делать? Я также хочу получить настройки компиляции ядра, это возможно?
Я распаковал прошивку, доступную на сайте производителя. Он содержит только обновление ELF, один файл .so и несколько скриптов Bash.
Сначала я думал, что три раздела напрямую переносятся в Qemu. Но, насколько я понимаю, это невозможно, потому что адреса памяти жестко запрограммированы в ядре. Я понимаю хорошо?
Поэтому я думаю, что у меня есть одно решение: собрать новое ядро и пересобрать rootfs с нуля. Это единственное решение?
Я начал играть с Buildroot, но не могу найти файл конфигурации для платы на основе Hisilicon Hi3518. Я плохо смотрел или это бесполезно? Для моего первого теста я использовал board/qemu/arm-versatile. Это правильный выбор? Это не помешает мне перейти на физическую машину?
Для проверки, если бы мне удалось собрать ядро и rootfs, я бы установил эти разделы на SD, чтобы ничего не сломать. Для этого «достаточно» изменить параметры ядра (в переменной bootargs), верно? Значит, мне не нужно перестраивать раздел U-boat для моего устройства?
Короче говоря, как вы уже догадались, я задаю себе много вопросов (и других, но «по одному» за раз). Мне нужен совет, правильно ли я выберу дорогу. Пожалуйста, если я говорю глупости, не стесняйтесь меня поправлять. Если есть идеи или темы для размышлений, мне интересно.
# cat /proc/cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 218.72
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : hi3518
Revision : 0000
Serial : 0000000000000000
# cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00010000 "boot"
mtd1: 00300000 00010000 "kernel"
mtd2: 00c00000 00010000 "rootfs"
# binwalk mtdblock0
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
122044 0x1DCBC CRC32 polynomial table, little endian
# binwalk mtdblock1
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 uImage header, header size: 64 bytes, header CRC: 0x853F419E, created: 2014-07-22 02:45:04, image size: 2890840 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0xB24E77CA, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "Linux-3.0.8"
22608 0x5850 gzip compressed data, maximum compression, from Unix, NULL date:
# binwalk zImage
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
113732 0x1BC44 ASCII cpio archive (SVR4 with no CRC), file name: "dev", file name length: "0x00000004", file size: "0x00000000"
113848 0x1BCB8 ASCII cpio archive (SVR4 with no CRC), file name: "dev/console", file name length: "0x0000000C", file size: "0x00000000"
113972 0x1BD34 ASCII cpio archive (SVR4 with no CRC), file name: "root", file name length: "0x00000005", file size: "0x00000000"
114088 0x1BDA8 ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
1903753 0x1D0C89 Certificate in DER format (x509 v3), header length: 4, sequence length: 1284
4188800 0x3FEA80 Linux kernel version "3.0.8 (cwen@ubuntu) (gcc version 4.4.1 (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)) ) #1 Tue Jul 22 10:45:00 H"
4403540 0x433154 CRC32 polynomial table, little endian
5053435 0x4D1BFB Unix path: /mtd/devices/hisfc350/hisfc350_spi_gd25qxxx.c
5054731 0x4D210B Unix path: /mtd/devices/hisfc350/hisfc350.c
5058939 0x4D317B Unix path: /net/wireless/rt2x00/rt2x00dev.c
5059323 0x4D32FB Unix path: /net/wireless/rt2x00/rt2x00config.c
5060683 0x4D384B Unix path: /net/wireless/rt2x00/rt2x00usb.c
5060851 0x4D38F3 Unix path: /net/wireless/rt2x00/rt2x00.h
5061171 0x4D3A33 Unix path: /net/wireless/rt2x00/rt73usb.c
5081107 0x4D8813 Unix path: /S70/S75/505V/F505/F707/F717/P8
5102399 0x4DDB3F Unix path: /mmc/host/himciv100/himci.c
5141264 0x4E7310 Neighborly text, "NeighborSolicits/ipv6/inet6_hashtables.c"
5141284 0x4E7324 Neighborly text, "NeighborAdvertisementses.c"
# binwalk mtdblock2
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JFFS2 filesystem, little endian
722980 0xB0824 JFFS2 filesystem, little endian
732282 0xB2C7A Zlib compressed data, compressed
737031 0xB3F07 Zlib compressed data, compressed
738287 0xB43EF Zlib compressed data, compressed
.... most other lines in the same genre
IP-камера QQZM N5063 http://www.zmvideo.com/product/detail.php?id=60
Прошивка http://bbs.zmmcu.com/forum.php?mod=attachment&aid=MzU2fDBiY2M4NDdjfDE0MTkxMTEzODl8MzQ4fDIwMzc%3D
nandread /dev/mtd0, это лучше, так как у вас могут быть плохие блоки, аddбудет непригодным для использования. Лучше всего получить консоль u-boot и посмотреть, сможете ли вы загрузить по сети собственное ядро; серийный/usb и т. д. Может быть /proc/config.gz или, возможно, что-то в /boot/config. Убедитесь, что вы можете правильно прочитать и восстановить mtd, прежде чем что-либо записывать. - person artless noise   schedule 09.01.2015