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