web-dev-qa-db-ja.com

Aquaris E4.5 Ubuntu Phone用のオープンソースドライバーのコンパイルまたはクロスコンパイル

カーネル3.4.67を実行しているAquaris E4.5にOTG USB-Ethernetアダプターを接続しようとしています。アダプタはCable Matters AX88179で、Linuxで オープンソースドライバ を使用できます。

インストールには、デバイスのカーネルのソースファイルが必要ですが、デバイスにはありません。私はそれぞれのlinux-headersをインストールしようとしましたが、それらは私が持っているカーネルイメージ(uname -r)。ソースまたはLinuxの汎用ヘッダーをインストールすると、電話のiノードが不足するため、エラーが発生します。

Aquaris用のCドライバーをクロスコンパイルする方法はありますか?

3
koukouviou

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は私のために働いた。

0
koukouviou