Próbuję skompilować moduł jądra (który sam napisałem) na raspberry pi. Kompiluję go w środowisku docelowym."__aeabi_ldivmod" undefined podczas kompilowania modułu jądra
pojawia się następujący komunikat:
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'
pewno wystarczy, gdy próbuję wstawić moduł, otrzymuję:
insmod: ERROR: could not insert module ./ppminput.ko: Unknown symbol in module
i syslog:
Sep 2 22:44:26 pidora kernel: [ 7589.354709] ppminput: Unknown symbol __aeabi_ldivmod (err 0)
W mój moduł, zidentyfikowałem linię powodującą problem:
unsigned int chan_abs_val = tdiff/CHAN_SCALE;
(gdzie tdiff to s64, a CHAN_SCALE to liczba całkowita).
Jeśli skomentuję podział, problem zniknie. To jedyna linia wykorzystująca podział w moim module.
Trochę googlowania zwróciło kilka odniesień do tego problemu, ale żaden nie mogłem znaleźć w kontekście kompilowania modułów jądra.
Moje makefile wygląda następująco:
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
Środowisko szczegóły:
- Pi jest uruchomiony Pidora 2014 (Fedora 20).
- Jądro to 3.12.23-1.20140626git25673c3.rpfr20.armv6hl.bcm2708.
- gcc to 4.8.2.
Aktualizacja
I oczywiście nie szukać przy użyciu poprawnych terminów. Another search kupił wiele referencji, ale żadnych rozwiązań jako takich. Czytając je, mam opinię, że nie należy wykonywać żadnych 64-bitowych podziałów wewnątrz jądra, jeśli chce się skompilować na ARM?
HI! I jak zrobić modulo? – flav
@flav Aby zadać pytanie, użyj przycisku "Zadaj pytanie". Lub raczej przeczytaj [dokumentację] (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/asm-generic/div64.h). –