Я добавляю модуль внешнего драйвера в ядро Android Gingerbread (работает аналогично Linux).Я делал это раньше, и это сработало, но на этот раз у меня проблема.Я следую рецепту, найденному в O'Reilly «Драйверы устройств Linux 3-е издание», а именно:
в локальном Makefile, вы добавляете следующие операторы:
obj-m := GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
На человеческом языке это означает построить мне GobiNet.ko из GobiUSBNet.c + QMIDevice.c + QMI.c.
Это для случая, когда make-файл вызывается при сборке всего ядра.Я кросс-компилирую на 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 и в ядре / Documentation / kbuild / *. Txt.Существует около 3 способов сделать это.Я выбрал описанную выше, потому что все переменные окружения установлены в верхнем скрипте сборки, и я не компилирую нативный, но я кросс-компилирую.В любом случае, другие ".ko" в дереве ядра генерируются, поэтому сценарий сборки должен быть хорош для генерации модулей ".ko".
Есть идеи, что заставляет этот процесс запускаться, а не заканчиваться файлом ".ko"?