我正在編譯linux內核版本3.17。默認情況下,驅動程序靜態編譯到Linux內核中,並在啓動時進行探測。但我希望這個特定的驅動程序可以作爲模塊構建,因此我將CONFIG_driver從'y'更改爲'm'。但是在這樣做之後,內核輸出一個未定義的引用錯誤並中斷構建。編譯靜態內核驅動程序到模塊
以下控制檯日誌
| LD drivers/built-in.o
| LINK vmlinux
| LD vmlinux.o
| MODPOST vmlinux.o
| GEN .version
| CHK include/generated/compile.h
| UPD include/generated/compile.h
| CC init/version.o
| LD init/built-in.o
| drivers/built-in.o: In function `adv7511_irq_handler':
| /var/adnan/work/git/mel_repos/mel_cedar_2/build/build_zedboard-zynq7-mel/tmp/work-shared/zedboard-zynq7-mel/kernel-source/drivers/gpu/drm/i2c/adv7511_core.c:314: undefined reference to `drm_helper_hpd_irq_event'
| make: *** [vmlinux] Error 1
| ERROR: oe_runmake failed
其中作爲函數drm_helper_hpd_irq_event
存在於drm_probe_helper.c。並根據生成文件
obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
其中我建立選擇CONFIG_DRM_KMS_HELPER該模塊。在.config中,當我構建我的模塊時,這與模塊直接成比例,這也會在模塊中生成,否則它會靜態構建。但是,當它在模塊中生成時,文件不會被編譯。
任何想法?我如何強制這個進入靜態構建,而在模塊中做我的驅動程序?
請點擊這裏把精確的輸出代替
。 –
是否所說的驅動程序實際上支持被構建爲模塊(如in,是它的Kconfig條目「tristate」,還是「bool」)? – Notlikethat
提供錯誤信息。看來該模塊需要不會被導出到模塊的符號。 – 0andriy