저는 중국산 Hi3516A SOC 기반 네트워크 카메라를 여러 대 가지고 있습니다. 잘 작동하고 VPN을 사용하여 액세스하고 싶습니다. tinc-vpn
텔넷을 사용하여 카메라 하우징에 대한 전체 액세스 권한을 갖고 있었기 때문에 카메라에 설치하기로 결정했습니다 .
글쎄, buildroot를 사용하여 크로스 컴파일 툴체인을 만들고 Tinc를 빌드했습니다. 하지만 Tinc는 tun/tap 장치를 지원해야 하며 카메라는 기본적으로 이러한 장치를 지원하지 않습니다. 그래서 사용해본 dmesg
결과 uname -a
어떤 카메라가 Linux 3.4.35 커널을 사용하는지 알아냈습니다. 커널 소스를 다운로드하고 TUN/TAP에 대한 지원을 로드 가능한 커널 모듈로 추가하고 컴파일했습니다.
~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- defconfig
~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- menuconfig
# add building of TUN/TAP driver
~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- -k
커널이 잘 컴파일되고 tun.ko를 카메라에 넣었습니다. 실행 후 insmod ./tun.ko
나는 얻었다
insmod: can't insert 'tun.ko': invalid module format
~ # dmesg | tail -n 1
tun: version magic '3.4.35 mod_unload ARMv5 p2v8 ' should be '3.4.35 mod_unload ARMv7 p2v8 '
한동안 구글링해서 찾아낸이것해결책. 그 후 모듈이 성공적으로 로드되지만 /dev/net/tun
실행을 읽거나 쓰려고 하면 분할 오류로 인해 충돌이 발생하고 tincd
정의되지 않은 오류로 끝나기 시작합니다.
그렇다면 내 카메라용 TUN/TAP 드라이버를 구축하는 방법에 대한 아이디어가 있습니까?
폴리스티렌
~ # dmesg | head -n 10
Booting Linux on physical CPU 0
Linux version 3.4.35 (root@wang) (gcc version 4.8.3 20131202 (prerelease) (Hisilicon_v300) ) #3 Mon Aug 10 15:39:44 CST 2015
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: hi3516a
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 32768
free_area_init_node: node 0, pgdat c04c0878, node_mem_map c04e0000
Normal zone: 256 pages used for memmap
Normal zone: 0 pages reserved
동일한 버전의 컴파일러와 Linux 커널을 사용합니다.
~ # cat /proc/cpuinfo
Processor : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 1196.85
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : hi3516a
Revision : 0000
Serial : 0000000000000000
ARM Cortex-A7용 크로스 컴파일을 빌드하고 이를 사용하여 Linux 커널을 컴파일하기 위해 buildroot를 사용해 보았지만 결과가 없습니다.
미리 감사드립니다.