Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make error: implicit declaration of function ‘init_timer’; #29

Open
bomilkar opened this issue Jun 20, 2020 · 3 comments
Open

make error: implicit declaration of function ‘init_timer’; #29

bomilkar opened this issue Jun 20, 2020 · 3 comments

Comments

@bomilkar
Copy link

I followed the instructions including rpi-source.
Make fails early when it compiles rfm12b.c. Details below.
Any idea??

$ make
make -C /lib/modules/4.19.118+/build  M=/opt/public/rfm69/rfm12b-linux-master modules
make[1]: Entering directory '/home/pi/linux-fe2c7bf4cad4641dfb6f12712755515ab15815ca'
  CC [M]  /opt/public/rfm69/rfm12b-linux-master/rfm12b.o
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c: In function ‘rfm_update_rxtx_watchdog’:
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c:765:6: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-declaration]
      init_timer(&rfm12->rxtx_watchdog);
      ^~~~~~~~~~
      init_timers
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c:767:26: error: ‘struct timer_list’ has no member named ‘data’
      rfm12->rxtx_watchdog.data = (unsigned long)rfm12;
                          ^
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c:768:36: error: assignment to ‘void (*)(struct timer_list *)’ from incompatible pointer type ‘void (*)(long unsigned int)’ [-Werror=incompatible-pointer-types]
      rfm12->rxtx_watchdog.function = rfm_rxtx_watchdog_expired;
                                    ^
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c: In function ‘rfm_start_trysend_retry_timer’:
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c:845:30: error: ‘struct timer_list’ has no member named ‘data’
    rfm12->retry_sending_timer.data = (unsigned long)rfm12;
                              ^
/opt/public/rfm69/rfm12b-linux-master/rfm12b.c:846:40: error: assignment to ‘void (*)(struct timer_list *)’ from incompatible pointer type ‘void (*)(long unsigned int)’ [-Werror=incompatible-pointer-types]
    rfm12->retry_sending_timer.function = rfm_trysend_retry_timer_expired;
                                        ^
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:310: /opt/public/rfm69/rfm12b-linux-master/rfm12b.o] Error 1
make[1]: *** [Makefile:1522: _module_/opt/public/rfm69/rfm12b-linux-master] Error 2
make[1]: Leaving directory '/home/pi/linux-fe2c7bf4cad4641dfb6f12712755515ab15815ca'
make: *** [Makefile:30: all] Error 2

@gkaindl
Copy link
Owner

gkaindl commented Jun 23, 2020

Hi @bomilkar! Yes, this is because the module has originally been written for the 2.x line of kernels, but 4.x changes the structure for timer callbacks. There's an updated .c file in the #28 issue, which you can probably use.

Unfortunately, I haven't yet had the time to look into it and merge it to the repo, but a pull request would be welcome!

@bomilkar
Copy link
Author

bomilkar commented Jun 24, 2020

Thanks @gkaindl for pointing that out.
make works now but how can I judge it's really working?? For instance: How can I see the register content? Or is there a loop back test which checks if all is well?
I have a commit ready with changes to 3 files. As soon as I'm confident it's working I'll push and post a PR.

@bomilkar
Copy link
Author

After playing with it for a bit I conclude it does NOT work with this modified rfm12b.c .

I can "make" the kernel module and "sudo insmod rfm12b.ko" says nothing (maybe good).
But then I recompiled it after some change to rfm12b_config.h and tried to replace the module:

$ sudo insmod rfm12b.ko
insmod: ERROR: could not insert module rfm12b.ko: File exists
$ sudo rmmod rfm12b.ko
rmmod: ERROR: Module rfm12b is not currently loaded
$ sudo modprobe -v rfm12b.ko
modprobe: FATAL: Module rfm12b.ko not found in directory /lib/modules/4.19.118+

It seems as if the first "insmod rfm12b.ko" did not insert the module correctly.

Also suspicious:

$ ./examples/bin/rfm12b_chat
successfully opened /dev/spidev0.0 as fd 3.
error during ioctl(): Inappropriate ioctl for device. 
$ ls -l /dev/spidev0.0
crw-rw---- 1 root spi 153, 0 Jun 24 16:01 /dev/spidev0.0

Any idea what to try next?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants