Компилировать или кросс-компилировать драйвер с открытым исходным кодом для телефона 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 работал для меня.

Другие вопросы по тегам