Eu tenho várias câmeras IP da China com base no Hi3516A SOC. Eles funcionam bem e eu quero ter acesso a eles usando VPN. Eu decido instalar tinc-vpn
na câmera porque eu tenho acesso total ao shell da câmera usando telnet.
Ok, bem, usando buildroot eu criei com sucesso uma toolchain cross-compile e criei tinc. Mas o tinc requer suporte para dispositivos tun / tap que a câmera não suporta por padrão. Então, usando dmesg
e uname -a
i encontrado, qual câmera usa o kernel Linux 3.4.35. Eu faço o download do código-fonte do kernel, adiciono suporte para TUN / TAP como módulo de kernel carregável e compilo:
~$ 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
O Kernel compilou bem e eu coloquei tun.ko na minha câmera. Depois de executar insmod ./tun.ko
, obtive
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 '
pesquisando por algum tempo eu encontrei esta solução . Depois do que, módulo carregado com sucesso, mas depois eu tento ler ou gravar em /dev/net/tun
execução falha com falha de segmentação e iniciando tincd
termina com erro indefinido.
Então, alguma idéia de como eu posso construir o driver TUN / TAP para minhas câmeras?
P.S.
~ # 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
Eu usei a mesma versão do compilador e o kernel do 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
Eu tentei construir compilação cruzada para o ARM Cortex-A7 usando o kernel do linux buildroot e compilar com ele, mas sem resultado.
Obrigado antecipadamente.