armv7 tun/tap デバイスドライバクロスコンパイル

armv7 tun/tap デバイスドライバクロスコンパイル

私は中国製Hi3516A SOCベースのネットワークカメラを複数台持っています。うまく動作し、VPNを使用してアクセスしたいです。tinc-vpnTelnetを使用してカメラハウジングへのフルアクセス権を持っていたので、カメラに取り付けることにしました。

さて、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を試しましたが、結果はありません。

よろしくお願いします。

関連情報