7
我試圖在樹莓派上編譯一個內核模塊(我自己寫了)。我正在編譯目標環境。「__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
,並在系統日誌:
Sep 2 22:44:26 pidora kernel: [ 7589.354709] ppminput: Unknown symbol __aeabi_ldivmod (err 0)
在我的模塊,我確定了導致問題的線路:
unsigned int chan_abs_val = tdiff/CHAN_SCALE;
(其中tdiff是s64,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(Fedora的20)。內核是3.12.21-1.20140626git25673c3.rpfr20.armv6hl.bcm2708。
- gcc是4.8.2。
更新
我明明沒有搜索使用正確的術語。 Another search已經購買了很多參考文獻,但沒有解決方案。閱讀他們我認爲如果想爲ARM編譯,不應該在內核中執行任何64位分區?
嗨!以及如何使模數? – flav 2016-12-06 07:17:15
@flav要問一個問題,請使用「提問」按鈕。或者先閱讀[文檔](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/asm-generic/div64.h)。 – 2016-12-06 07:33:50