カーネル3.4.67を実行しているAquaris E4.5にOTG USB-Ethernetアダプターを接続しようとしています。アダプタはCable Matters AX88179で、Linuxで オープンソースドライバ を使用できます。
インストールには、デバイスのカーネルのソースファイルが必要ですが、デバイスにはありません。私はそれぞれのlinux-headersをインストールしようとしましたが、それらは私が持っているカーネルイメージ(uname -r
)。ソースまたはLinuxの汎用ヘッダーをインストールすると、電話のiノードが不足するため、エラーが発生します。
Aquaris用のCドライバーをクロスコンパイルする方法はありますか?
X86 UbuntuホストでAquaris E4.5をクロスコンパイルするには、ARM androideabiツールチェーンが必要です。これは次のコマンドでインストールできます。
$ Sudo apt install gcc-arm-linux-androideabi
Aquaris E4.5のLinuxカーネルソースコードは BQのGitHubページ にあります。 BQのREADMEファイルに記載されているように、次のコマンドでカーネルを構築できます。
$ ./makeMtk -t krillin n k
AX88179ドライバーをクロスコンパイルするには(手順は他のドライバーでも同様であると思いますが、AX88179ドライバー以外ではテストしていません)ドライバーのMakefile
を次のように変更しました。
export Arch:=arm
export CROSS_COMPILE:=arm-linux-androideabi-
TARGET = ax88179_178a
OBJS = ax88179_178a.o
MDIR = drivers/net/usb
KDIR = <absolute-path>/aquaris/out/target/product/krillin/obj/KERNEL_OBJ
USBNET = $(Shell find $(KDIR)/include/linux/usb/* -name usbnet.h)
EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(Shell pwd)
obj-m := $(TARGET).o
default:
make -C $(KDIR) SUBDIRS=$(PWD) modules
$(TARGET).o: $(OBJS)
$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
.PHONY: modules clean
-include $(KDIR)/Rules.make
KDIR値は、aquaris
ディレクトリのKERNEL_OBJ
への絶対パスに置き換えてください。
この後、クロスコンパイルされたカーネルオブジェクトを取得します。このオブジェクトを1)転送し、2)電話機にロードします(カーネルオブジェクトax88179_178a.ko
が転送された後、次のコマンドを電話機で実行する必要があります):
# modprobe usbnet
# insmod ax88179_178a.ko
エボラ!イーサネットOTGは私のために働いた。