2015-01-08 6 views
0

독점 소프트웨어 (HTTP 서버 없음)가 설치된 IP 카메라를 구입했습니다. 이렇게하면 홈 네트워크에 통합 할 수 없습니다.리눅스 기반 USB 카메라 리버스 엔진 개발

이미 사용중인 모션 패키지로 소프트웨어 (ELF 폐쇄 소스)를 교체하고 일부 기능을 추가하고 싶습니다.

나는 특별한 시스템 능력이 없으며 배우기 위해 그물을 여행 했으므로 일주일이 지났지 만 나갈 수는 없습니다. U 부팅 콘솔 (USB-TTL 어댑터) 및 텔넷 (루트)에 액세스 할 수 있습니다. 웹캠에는 공간이 필요할 때 사용할 수있는 SD 카드 리더기가 있습니다. 3 개의 파티션 (dd 포함)을 백업하여 시작했습니다.

mtdblock2 (binwalk -e) 파일의 압축이 풀 렸습니다. Busybox, 일부 이진 시스템 및 독점 소프트웨어에 대한 링크가있는 고전적인 Linux 트리를 생성합니다.

zImage를 생성하는 mtdblock1의 압축을 풀려고했습니다. 압축 해제 zImage는 두 개의 디렉토리와 하나의 파일 (콘솔)을 생성합니다. 그러나 커널 모듈이 필요합니다. 무엇을해야합니까? 커널 컴파일 설정을 가져오고 싶습니다. 가능합니까?

제조업체의 웹 사이트에서 제공되는 펌웨어의 압축을 풉니 다. ELF, 하나의 .so 파일 및 일부 Bash 스크립트 만 업데이트합니다.

처음에는 세 개의 파티션이 Qemu로 직접 이동한다고 생각했습니다. 그러나 메모리 주소가 커널에 하드 코딩되어 있기 때문에 이것이 불가능하다는 것을 알고 있습니다. 잘 이해합니까?

그래서 저는 하나의 해결책이 있다고 생각합니다 : 새로운 커널을 만들고 rootfs를 처음부터 다시 빌드하십시오. 이 유일한 해결책입니까?

Buildroot로 게임을 시작했지만 Hisilicon Hi3518을 기반으로 보드 용 구성 파일을 찾을 수 없습니다. 나쁘게 보였거나 쓸모가 있습니까? 첫 번째 테스트에서는 보드/qemu/arm-versatile를 사용했습니다. 이것은 올바른 선택입니까? 이것은 실제 컴퓨터로 마이그레이션하지 못하게합니까?

테스트를 위해 커널과 rootfs를 다시 빌드하면 SD에이 파티션을 설치하여 아무 것도 손상시키지 않습니다. 커널 매개 변수를 수정하려면 "충분합니다"(bootargs 변수에서) 그게 옳은가요? 그래서 장치 용 U 보트 파티션을 다시 만들 필요가 없습니까?

간단히 말해서, 나는 많은 질문을 던졌을 것입니다. (그러나 한 번에 "하나"가 아닌). 나는 올바른 길을 가고 있는지에 대한 조언이 필요합니다. 제발, 말도 안되는 소리가 있으면 저를 시정 해주십시오. 아이디어 나 주제가 있다면 나는 관심이있다. 모든


# 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 ([email protected]) (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

+0

제 생각에는 * mtd0 *은 u-boot입니다. * mtd1 *은 cpio 아카이브 인 'initrd'가있는 리눅스 이미지입니다. * mtd2 *는 아마도 액세스 할 수있는 JFFS2 파티션 일 것입니다. 'nandread/dev/mtd0'을 사용하고 있다면 나쁜 블록이있을 수 있고'dd'는 쓸모 없기 때문에 더 좋습니다. 최선의 방법은 u-boot 콘솔을 사용하여 네트워크에 커널을로드 할 수 있는지 확인하는 것입니다. serial/usb, etc/*/proc/config.gz * 또는 아마도/boot/config *에 뭔가있을 수 있습니다. * mtd *를 읽고 쓸 수 있는지 확인하십시오. –

+1

* qemu *에서 왜 이것을 실행하길 원하는지 이해가되지 않습니다. 셸 액세스 권한이 있습니다. ARM 컴파일러 만 있으면되며 장치에 HTTP 서버를 배치 할 수 있습니다. 그것은 이미있을 수 있습니다. telnet과 같은 네트워크 인터페이스가 있는지 확인하십시오. –

+0

/proc/config가 존재하지 않습니다. 커널을 생성하지 못하게하는 특별한 옵션으로 커널이 컴파일되었다는 것을 이해한다면. 어제 파티션을 복원하려는 웹캠이 고장났습니다. 이제 커널 로딩 과정을 반복합니다. ( 이 튜토리얼을 따라 제 문제를 설명했습니다 : http://felipe.astroza.cl/hacking-hi3518-based-ip-camera/ – Mauricio

답변

1

첫째, 당신은이 장치가 부팅 할 수 없게 될 수도로 U-부팅을 대체하지 않습니다.U 부팅 콘솔에서 SD 카드 mmc rescan 0; fatload mmc 0 ${loadaddr} uImage 또는 네트워크 dhcp ${loadaddr} ${serverip}:uImage에서 부팅 할 수 있는지 확인하십시오. 더 많은 도움을 받으려면이 명령에 대한 설명서를 찾아야합니다.

하지만 아마도 커널을 교체 할 필요조차 없습니다. 3.0.8 커널이기 때문에이 커널 버전의 사용자 공간을 구축 할 수 있습니다. 그리고 그것에 의해 사용되는 독점적 인 모듈은 jffs2 파일 시스템으로부터 해제 될 수 있습니다. 텔넷 세션에서 어떤 모듈이로드되어 있는지 확인하려면 lsmod을 수행하십시오. SD 카드를 마운트하고 복사 할 수 있습니다. 모듈은 /lib/modules/3.0.8에 있습니다.

그래서 당신은 아마도 buildroot에서 커널을 빌드 할 필요조차 없으며 rootfs 만 빌드 할 것입니다. 먼저 telnet 세션에서 어떤 파일 시스템이 지원되는지 확인하십시오 : cat /proc/filesystems. 그런 다음 buildroot 구성에서 적절한 파일 시스템을 선택하십시오. 대상 아키텍처의 경우 arm926t을 선택하십시오. 또한 툴체인 구성에서 3.0 커널 헤더를 선택하거나 Arago ARMv5 2011.09 외부 툴체인 (이전 커널 헤더가 있음)을 선택하십시오.

잡음이 적다는 이유로 SD 카드가 안전하므로 qemu에서 테스트 할 필요가 없습니다.

+0

지금 선택의 여지가 없습니다. SD 카드에서 부팅하는 방법을 찾아야합니다. 네트워크에서 최악의 경우. 사실 Qemu를 사용할 필요가 없습니다. – Mauricio

+0

코어를 반복하지 않고 rootfs를 만들 수 있다는 것을 알았다면 부트 파티션을 건드리지 않았을 것입니다. 맞습니다. 가장 좋은 해결책은 코어를 건드리지 않고 rootfs를 재 구축하는 것입니다. 그리고 SD 또는 네트워크에서 시작하십시오. 나는이 방향으로 일할 것입니다. 대단히 감사합니다. – Mauricio