我將一個外部驅動程序模塊添加到Android薑餅內核(類似於Linux)。我之前已經完成了它,它的工作,但這次我有一個問題。我按照O'Reilly的「Linux設備驅動程序第三版」,這是發現的食譜:內核驅動程序外部模塊不完全構建
在當地的Makefile,添加這些語句:
obj-m := GobiNet.o GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
在人類語言就意味着打造我GobiNet。來自GobiUSBNet.c + QMIDevice.c + QMI.c.
這是在構建整個內核時調用makefile的情況。我在Ubuntu x86-64bit上交叉編譯ARM-EABI系統(Cortex-A8)。
不知何故,構建系統瞭解我想要的東西,因爲它在編譯時說:
/home/sylvain/Projects/android_gingerbread_realv210_ver_1_0/kernel CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: `include/generated/mach-types.h' is up to date. CALL scripts/checksyscalls.sh CHK include/generated/compile.h LD drivers/cell/OptionGobiNet/built-in.o CC [M] drivers/cell/OptionGobiNet/GobiUSBNet.o CC [M] drivers/cell/OptionGobiNet/QMIDevice.o CC [M] drivers/cell/OptionGobiNet/QMI.o LD [M] drivers/cell/OptionGobiNet/GobiNet.o Kernel: arch/arm/boot/Image is ready SHIPPED arch/arm/boot/compressed/lib1funcs.S AS arch/arm/boot/compressed/lib1funcs.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready Building modules, stage 2. MODPOST 5 modules ERROR: "usbnet_suspend" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined! ERROR: "usbnet_resume" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined! ERROR: "usbnet_disconnect" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined! ERROR: "usbnet_probe" [drivers/cell/OptionGobiNet/GobiNet.ko] undefined! make[1]: *** [__modpost] Error 1 make: *** [modules] Error 2
它也產生了典型的「GobiNet.mod.c」和「GobiNet.o」時產生,當你希望驅動程序作爲一個模塊,但它不會與我期望的「GobiNet.ko」完成。我在主目錄中運行了「find -name * .ko」,並且「GobiNet.ko」無處可尋。
我也查看了WEB和kernel/documentation/kbuild/*。txt。有三種方法可以做到這一點。我選擇了上面描述的一個,因爲所有的環境變量都是在頂層構建腳本中設置的,並且我不編譯本地,但是我交叉編譯。無論如何,內核樹中的其他「.ko」都會生成,所以構建腳本應該很好地生成「.ko」模塊。
任何想法是什麼讓這個過程開始,但沒有完成「.ko」文件?
我收到了一些錯誤:aml_unregister_fe_drv ite9133_fe.ko undefined –