为 Aquaris E4.5 Ubuntu Phone 编译或交叉编译开源驱动程序

为 Aquaris E4.5 Ubuntu Phone 编译或交叉编译开源驱动程序

我正在尝试在运行内核 3.4.67 的 Aquaris E4.5 上连接 OTG USB 以太网适配器。该适配器是 Cable Matters AX88179,具有开源驱动程序适用于Linux。

安装需要设备内核的源文件,但设备上没有。我尝试安装相应的 linux 头文件,但它们不适用于我拥有的内核映像(通过 找到uname -r)。安装源代码或 linux 通用头文件时出现错误,因为我的手机上的 i-node 用完了。

有没有办法交叉编译 Aquaris 的 C 驱动程序?

答案1

要在 x86 Ubuntu 主机上交叉编译 Aquaris E4.5,您需要 ARM androideabi 工具链。您可以使用以下命令安装它:

$ sudo apt install gcc-arm-linux-androideabi

Aquaris E4.5 的 Linux 内核源代码可以在以下位置找到:BQ 的 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

ax88179_178a.ko在此之后,您将获得交叉编译的内核对象,然后您应该 1) 传输和 2) 加载到您的手机上(传输内核对象后,应在手机上执行以下命令):

# modprobe usbnet
# insmod ax88179_178a.ko

瞧!以太网 OTG 对我来说有效。

相关内容