Я пытаюсь подключить адаптер OTG USB-Ethernet на Aquaris E4.5 с работающим ядром 3.4.67. Адаптер Cable Matters AX88179 имеет драйверов с открытым исходным кодом , доступных для Linux.
Для установки требуются исходные файлы для ядра устройства, которые, однако, отсутствуют на устройстве. Я попытался установить соответствующие заголовки linux, но они не доступны для образа ядра, который у меня есть (см. uname -r
). Установка исходных или общих заголовочных файлов linux приводит к ошибкам, когда у меня заканчиваются i-узлы на телефоне.
Есть ли способ кросс-компиляции драйверов C для Aquaris?
Чтобы кросс-скомпилировать для Aquaris E4.5 на x86 Ubuntu размещают Вас, нуждаются в ARM androideabi набор инструментальных средств. Можно установить это с:
$ sudo apt install gcc-arm-linux-androideabi
исходный код ядра Linux для Aquaris E4.5 может быть найден на страница 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 Вашим полным путем к KERNEL_OBJ
в aquaris
каталог.
После этого Вы получаете кросс-скомпилированный объект ядра, который необходимо затем 1) передать и 2) загрузиться на Ваш телефон (следующие команды должны быть выполнены по телефону после того, как объект ядра ax88179_178a.ko
передан):
# modprobe usbnet
# insmod ax88179_178a.ko
И voilГ! Ethernet OTG работал на меня.