สิ่งที่เป็นปัญหาโดยเฉพาะอย่างยิ่งเมื่อคุณสร้างโมดูลของคุณแผนผังแหล่งที่มาของเคอร์เนลอาจหายไปจากไฟล์ Modules.symvers ระบบ kbuild เตือนคุณเกี่ยวกับสิ่งนี้เมื่อคุณสร้างโมดูล หาก Modules.symvers หายไปคุณจะเห็น:
คำเตือน: สัญลักษณ์เวอร์ชันดัมพ์ /usr/src/linux-2.6.34-12/Modules.symvers หายไป; โมดูลจะไม่มีการพึ่งพาและการดัดแปลง
หากเคอร์เนลของคุณCONFIG_MODVERSIONS
เปิดใช้งานอยู่ในระหว่างขั้นตอน modpost ของการสร้างไดรเวอร์ของคุณมันจะเรียกใช้สคริปต์ / mod / modpostด้วยตัวเลือก -m หากคุณกล้าหาญและดูที่สคริปต์ / mod / modpost.c source คุณจะเห็นว่าตัวเลือก -m เพิ่มสัญลักษณ์ _module_layout_ จาก vmlinux อย่างไรก็ตามหากคุณไม่มี Modules.symvers จากเคอร์เนลของคุณ คุณจะไม่ได้รับค่า CRC สำหรับสัญลักษณ์นี้และคุณจะพบข้อความแสดงข้อผิดพลาดนี้
ดังนั้นมีสองวิธีรอบนี้
1) เรียกใช้งานบิลด์เคอร์เนลของคุณเพื่อสร้าง Modules.symvers จากนั้นสร้างโมดูลใหม่ [http://www.mjmwired.net/kernel/Documentation/kbuild/modules.txt][1]
51 === 2. How to Build External Modules
52
53 To build external modules, you must have a prebuilt kernel available
54 that contains the configuration and header files used in the build.
55 Also, the kernel must have been built with modules enabled. If you are
56 using a distribution kernel, there will be a package for the kernel you
57 are running provided by your distribution.
58
59 An alternative is to use the "make" target "modules_prepare." This will
60 make sure the kernel contains the information required. The target
61 exists solely as a simple way to prepare a kernel source tree for
62 building external modules.
63
64 NOTE: "modules_prepare" will not build Module.symvers even if
65 CONFIG_MODVERSIONS is set; therefore, a full kernel build needs to be
66 executed to make module versioning work.
2) ตัวเลือกอื่นคือบอก modprobe ที่โง่เพียงแค่ละเว้น crap นั้นและเพียงแค่โหลดโมดูลของคุณอย่างไรก็ตาม:
modprobe -f <module>
ฉันมักจะชอบตัวเลือกที่ 2 :)