我正在尝试在运行内核 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 对我来说有效。