Компилировать или кросс-компилировать драйвер с открытым исходным кодом для телефона Aquaris E4.5 Ubuntu

Я пытаюсь подключить адаптер OTG USB-Ethernet на Aquaris E4.5 с работающим ядром 3.4.67. Адаптер Cable Matters AX88179 имеет драйверов с открытым исходным кодом , доступных для Linux.

Для установки требуются исходные файлы для ядра устройства, которые, однако, отсутствуют на устройстве. Я попытался установить соответствующие заголовки linux, но они не доступны для образа ядра, который у меня есть (см. uname -r). Установка исходных или общих заголовочных файлов linux приводит к ошибкам, когда у меня заканчиваются i-узлы на телефоне.

Есть ли способ кросс-компиляции драйверов C для Aquaris?

3
задан 19 December 2015 в 00:07

1 ответ

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

0
ответ дан 19 December 2015 в 10:07

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

Похожие вопросы: