系統整合時,常常會跟driver有關,不管是port driver還是拿廠商build好的driver。開發環境不同時,很可能會有driver跟 kernel版號不同的情況,而產生類似"-1 Invalid module format" 這樣的錯誤訊息。如果kernel 版本差別不大,是有機會可以modprobe成功,看看結果如何。而不用卡在版號不同,插不進去的loop裡。
在kernel裡,先disable modules version:
接下來修改include/linux/vermagic.h
#ifdef CONFIG_SMP
#define MODULE_VERMAGIC_SMP "SMP "
#else
#define MODULE_VERMAGIC_SMP ""
#endif
#ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt "
#else
#define MODULE_VERMAGIC_PREEMPT ""
#endif
#ifdef CONFIG_MODULE_UNLOAD
#define MODULE_VERMAGIC_MODULE_UNLOAD "mod_unload "
#else
#define MODULE_VERMAGIC_MODULE_UNLOAD ""
#endif
#ifdef CONFIG_MODVERSIONS
#define MODULE_VERMAGIC_MODVERSIONS "modversions "
#else
#define MODULE_VERMAGIC_MODVERSIONS ""
#endif
#ifndef MODULE_ARCH_VERMAGIC
#define MODULE_ARCH_VERMAGIC ""
#endif
#define VERMAGIC_STRING UTS_RELEASE " " \
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS \
MODULE_ARCH_VERMAGIC
根據kernel cofig會有不同的定義,最後結果會是VERMAGIC_STRING_UTS_RELEASE。
UTS_RELEASE就是在kernel Makefile裡的版號,如2.6.32.1。MODULE_VERMAGIC_SMP就看有沒有SMP等等,可search 一下 menuconfig就知道。
所以拿到一個ko,先modinfo看一下vermagic,然後就
#define VERMAGIC_STRING "....1.2.3.4 anyway"
就可以插看看有沒有什麼unknown symbol了。
留言列表