系統整合時,常常會跟driver有關,不管是port driver還是拿廠商build好的driver。開發環境不同時,很可能會有driver跟 kernel版號不同的情況,而產生類似"-1 Invalid module format" 這樣的錯誤訊息。如果kernel 版本差別不大,是有機會可以modprobe成功,看看結果如何。而不用卡在版號不同,插不進去的loop裡。

在kernel裡,先disable modules version:

modversion

 

接下來修改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了。

 

arrow
arrow
    全站熱搜

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()