Kernel module compiler error: function declaration is not a prototype [-Werror = strict-prototypes]

this code: a Linux kernel module that directly controls the LEDs on your PS / 2 keyboard (Num Lock, Caps Lock and Scroll Lock)

#include <linux/module.h> #include <linux/kernel.h> int check_bit(unsigned char status, int i) { return (status & (1<<(i))); } unsigned char kbd_read_status() { // <== ERROR first appears on this line return inb(0x64); } unsigned char kbd_read_data() { unsigned char status; do { status = kbd_read_status(); } while(!check_bit(status, 0)); return inb(0x60); } 

when running makefile:

 make -C /lib/modules/3.19.0-15-generic/build M=/home/fyousry/Desktop/hellokernel modules make[1]: Entering directory '/usr/src/linux-headers-3.19.0-15-generic' CC [M] /home/fyousry/Desktop/hellokernel/New.o /home/fyousry/Desktop/hellokernel/New.c:9:15: error: function declaration isn't a prototype [-Werror=strict-prototypes] unsigned char kbd_read_status() { ^ /home/fyousry/Desktop/hellokernel/New.c:13:15: error: function declaration isn't a prototype [-Werror=strict-prototypes] unsigned char kbd_read_data() { ^ cc1: some warnings being treated as errors scripts/Makefile.build:263: recipe for target '/home/fyousry/Desktop/hellokernel/New.o' failed make[2]: *** [/home/fyousry/Desktop/hellokernel/New.o] Error 1 Makefile:1394: recipe for target '_module_/home/fyousry/Desktop/hellokernel' failed make[1]: *** [_module_/home/fyousry/Desktop/hellokernel] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-3.19.0-15-generic' Makefile:3: recipe for target 'all' failed make: *** [all] Error 2 

when adding #include 'sys / io.h' this error shows

 make -C /lib/modules/3.19.0-15-generic/build M=/home/fyousry/Desktop/hellokernel modules make[1]: Entering directory '/usr/src/linux-headers-3.19.0-15-generic' CC [M] /home/fyousry/Desktop/hellokernel/New.o /home/fyousry/Desktop/hellokernel/New.c:3:21: fatal error: sys/uio.h: No such file or directory #include <sys/io.h> ^ compilation terminated. scripts/Makefile.build:263: recipe for target '/home/fyousry/Desktop/hellokernel/New.o' failed make[2]: *** [/home/fyousry/Desktop/hellokernel/New.o] Error 1 Makefile:1394: recipe for target '_module_/home/fyousry/Desktop/hellokernel' failed make[1]: *** [_module_/home/fyousry/Desktop/hellokernel] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-3.19.0-15-generic' Makefile:3: recipe for target 'all' failed make: *** [all] Error 2 
+5
source share
1 answer

For the correct prototype, you cannot leave your parameter list empty.
If your function does not accept any parameters, you must indicate that it is (void) .

kbd_read_status(void) instead of kbd_read_status( )

The kernel code is much more pedantic.
In another code, you can leave with empty parameters, but not according to the most strict rules.

+9
source

Source: https://habr.com/ru/post/1258952/


All Articles