在板子上本地编译模块出现错误,鲁班猫/usr/src/linux-headers-$(uname -r)/scripts/basic/fixdep 为X86-64的,应该是编译内核时编译成了X86架构的,实际应该是ARM64,导致在本地编译时调用该文件时报错,只有在虚拟机上交叉编译再加入模块
下载链接:RTL8188EU
进入虚拟机,修改Makefile文件,将编译架构改为ARM64,修改环境变量,保存后编译,直接make
随后生成8188eus.ko,加入到开发板,成功运行
#该文件为X86 /usr/src/linux-headers-$(uname -r)/scripts/basic/fixdep #修改 CONFIG_PLATFORM_I386_PC = n //y CONFIG_PLATFORM_RPI_ARM = n CONFIG_PLATFORM_RPI_ARM64 = y //n #配置编译 # $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) modules $(MAKE) ARCH=arm64 CROSS_COMPILE=/home/lubancat/LubanCat_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -C /home/lubancat/LubanCat_SDK/kernel M=$(shell pwd) modules #makefile简介 KERNEL_DIR=../../../kernel/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- export ARCH CROSS_COMPILE obj-m := hellomodule.o all: $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules .PHONE:clean clean: $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean $(MAKE)的MAKE是Makefile中的宏变量,要引用宏变量要使用符号。 这里实际上就是指向make程序,所以这里也可以把$(MAKE)换成make。 make -C是make命令的一个选项,-C作用是changedirectory, -C dir 就是转到dir目录。M=$(CURDIR):返回当前目录。 这句话的意思是:当make执行默认的目标all时,-C(KVDIR)指明跳转到内核源码目录下去执行那里的Makefile,-C $(KERNEL_DIR)指明跳转到内核源码目录下去执行那里的Makefile,M=(CURDIR)表示又返回到当前目录来执行当前的Makefile