web-dev-qa-db-fra.com

Pilote open source de compilation ou de compilation croisée pour le téléphone Ubuntu Aquaris E4.5

J'essaie de connecter un adaptateur USB-Ethernet OTG sur le noyau 3.4.67 d'Aquaris E4.5. L'adaptateur est Cable Matters AX88179 qui a pilotes open source disponibles pour linux.

L'installation nécessite les fichiers source du noyau de l'appareil qui ne sont cependant pas sur l'appareil. J'ai essayé d'installer les en-têtes Linux respectifs, mais ils ne sont pas disponibles pour l'image du noyau que j'ai (trouvée via uname -r). L'installation des en-têtes génériques source ou linux donne des erreurs lorsque je manque de i-nœuds sur le téléphone.

Existe-t-il un moyen de compiler les pilotes C pour les Aquaris?

3
koukouviou

Pour effectuer une compilation croisée pour Aquaris E4.5 sur un hôte Ubuntu x86, vous avez besoin de la chaîne d'outils ARM androideabi. Vous pouvez l'installer avec:

$ Sudo apt install gcc-arm-linux-androideabi

Le code source du noyau Linux pour Aquaris E4.5 peut être trouvé sur page GitHub de BQ . Comme indiqué dans le fichier README de BQ, vous pouvez créer le noyau avec:

$ ./makeMtk -t krillin n k

Pour compiler de manière croisée les pilotes AX88179 (je m'attends à ce que la procédure soit similaire pour les autres pilotes mais je ne l'ai testée sur rien d'autre que les pilotes AX88179), j'ai modifié le Makefile des pilotes comme suit:

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

Assurez-vous de remplacer la valeur KDIR par votre chemin absolu vers KERNEL_OBJ dans le répertoire aquaris.

Après cela, vous obtenez l'objet noyau compilé de manière croisée, que vous devez ensuite 1) transférer et 2) charger sur votre téléphone (les commandes suivantes doivent être exécutées sur le téléphone après l'objet noyau ax88179_178a.ko est transféré):

# modprobe usbnet
# insmod ax88179_178a.ko

Et voilà! Ethernet OTG a fonctionné pour moi.

0
koukouviou