動態載入模組出現disagrees about version of symbol 問題分析
阿新 • • 發佈:2019-02-02
1.編譯kernel的時候,會生成Module.symvers檔案,記錄每個Symbol 和相應的CRC code,例如: 比如這個kernel 版本是2.6.38-1.4
0x258d700e raw_seq_open vmlinux EXPORT_SYMBOL_GPL
0xebba1d26 device_add vmlinux EXPORT_SYMBOL_GPL
0xfb0f0e78 device_del vmlinux EXPORT_SYMBOL_GPL
0xa5bf5c3e pm_qos_add_requirement vmlinux EXPORT_SYMBOL_GPL
2.編寫動態載入module的時候,也會生成類似的檔案module_name.mod.c,將module呼叫到的system call 記錄在裡面,這個的symbol使用編譯module的時候指向的kernel路徑。比如這個kernel 版本是2.6.37-2.5。
3.載入這個動態module的時候,kernel會去check載入模組的每一個symbol的CRC,看看是否與kernel相應的symbol相同,不同的話就會報錯。 同一個kernel版本,不同的config也會出這個問題。
Found checksum 818923239 vs module A1009786
"***module": disagrees about version of symbol device_add
"***module": Unknown symbol device_add