Compile ou Cross-compile driver de código aberto para Aquaris E4.5 Ubuntu Phone

4

Estou tentando conectar um adaptador OTG USB-Ethernet no Aquaris E4.5 executando o kernel 3.4.67. O adaptador é o Cable Matters AX88179 que tem drivers de código-fonte aberto disponíveis para o linux.

A instalação requer os arquivos de origem para o kernel do dispositivo que, no entanto, não estão no dispositivo. Eu tentei instalar os respectivos cabeçalhos linux, mas eles não estão disponíveis para a imagem do kernel que eu tenho (encontrado através de uname -r ). A instalação dos cabeçalhos genéricos de origem ou linux gera erros quando eu fico sem i-nodes no telefone.

Existe uma maneira de compilar os drivers C para o Aquaris?

    
por koukouviou 18.12.2015 / 22:07

1 resposta

0

Para fazer uma compilação cruzada para o Aquaris E4.5 em um host x86 Ubuntu, você precisa da toolchain androideabi do ARM. Você pode instalar isso com:

$ sudo apt install gcc-arm-linux-androideabi

O código-fonte do kernel do Linux para o Aquaris E4.5 pode ser encontrado na página do GitHub do BQ . Conforme documentado no arquivo README da BQ, você pode construir o kernel com:

$ ./makeMtk -t krillin n k

Para compilar cruzadamente os drivers do AX88179 (espero que o procedimento seja semelhante para outros drivers, mas eu não testei em nada além dos drivers do AX88179) Eu modifiquei os drivers ' Makefile da seguinte forma:

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

Certifique-se de substituir o valor KDIR pelo seu caminho absoluto para KERNEL_OBJ no diretório aquaris .

Depois disso, você obtém o objeto de kernel cross-compilado, que você deve 1) transferir e 2) carregar no seu telefone (os seguintes comandos devem ser executados no telefone após o objeto do kernel ax88179_178a.ko ser transferido):

# modprobe usbnet
# insmod ax88179_178a.ko

Et voilà! Ethernet OTG funcionou para mim.

    
por koukouviou 15.01.2017 / 18:22