मैं एक रास्पबेरी पीआई पर एक कर्नेल मॉड्यूल (जिसे मैंने स्वयं लिखा है) संकलित करने का प्रयास कर रहा हूं। मैं इसे लक्षित वातावरण में संकलित कर रहा हूं। पर्याप्त"__aeabi_ldivmod" कर्नेल मॉड्यूल संकलित करते समय अपरिभाषित
make -C /lib/modules/3.12.23-1.20140626git25673c3.rpfr20.armv6hl.bcm2708/build M=/home/harmic/horus/ppminput modules
make[1]: Entering directory `/usr/src/kernels/3.12.23-1.20140626git25673c3.rpfr20.armv6hl.bcm2708'
CC [M] /home/harmic/horus/ppminput/ppminput.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "__aeabi_ldivmod" [/home/harmic/horus/ppminput/ppminput.ko] undefined!
CC /home/harmic/horus/ppminput/ppminput.mod.o
LD [M] /home/harmic/horus/ppminput/ppminput.ko
make[1]: Leaving directory `/usr/src/kernels/3.12.23-1.20140626git25673c3.rpfr20.armv6hl.bcm2708'
ज़रूर, अगर मैं मॉड्यूल सम्मिलित करने के लिए प्रयास करते हैं, मैं:
मैं निम्नलिखित आउटपुट प्राप्त
insmod: ERROR: could not insert module ./ppminput.ko: Unknown symbol in module
और syslog में:
Sep 2 22:44:26 pidora kernel: [ 7589.354709] ppminput: Unknown symbol __aeabi_ldivmod (err 0)
में मेरे मॉड्यूल, मैंने समस्या के कारण रेखा की पहचान की है:
unsigned int chan_abs_val = tdiff/CHAN_SCALE;
(जहां टीडीएफ एक एस 64 है, और CHAN_SCALE एक पूर्णांक अक्षर है)।
यदि मैं विभाजन को टिप्पणी करता हूं, तो समस्या दूर हो जाती है। मेरे मॉड्यूल में विभाजन का उपयोग करने वाली यही एकमात्र पंक्ति है।
थोड़ी सी गुगलिंग ने इस मुद्दे के कुछ संदर्भों को बदल दिया, लेकिन कर्नेल मॉड्यूल को संकलित करने के संदर्भ में मुझे कोई भी नहीं मिला।
मेरे makefile इस तरह दिखता है:
obj-m += ppminput.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
पर्यावरण विवरण:
- पाई Pidora 2014 (फेडोरा 20) चल रहा है।
- कर्नेल 3.12.23-1.20140626git25673c3.rpfr20.armv6hl.bcm2708 है।
- जीसीसी 4.8.2 है।
अद्यतन
मैं स्पष्ट रूप से सही शब्दों का उपयोग करके खोज नहीं की थी। Another search ने कई संदर्भ खरीदे हैं, लेकिन इस तरह के कोई समाधान नहीं है। उन्हें पढ़ना मुझे लगता है कि अगर कोई एआरएम के लिए संकलन करना चाहता है तो कर्नेल के अंदर किसी को 64 बिट डिवीजन नहीं करना चाहिए?
HI! और मॉड्यूलो कैसे बनाना है? – flav
@flav एक प्रश्न पूछने के लिए, "प्रश्न पूछें" बटन का उपयोग करें। या इसके बजाय [प्रलेखन] पढ़ें (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/asm-generic/div64.h) पहले। –