KastnerRG / riffa

The RIFFA development repository
https://riffa.ucsd.edu
Other
766 stars 313 forks source link

Compilation/loading issues on Redhat 9 kernel 5.14.0-427.16.1.el9_4.x86_64 #66

Closed bsobhani closed 1 week ago

bsobhani commented 1 month ago

If I go into riffa/driver/linux and type make I get the following error message:

/home/controls/misc/riffa/driver/linux/riffa_driver.c: In function ‘fpga_init’:
./include/linux/export.h:17:22: error: passing argument 1 of ‘class_create’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   17 | #define THIS_MODULE (&__this_module)
      |                     ~^~~~~~~~~~~~~~~
      |                      |
      |                      struct module *
/home/controls/misc/riffa/driver/linux/riffa_driver.c:1609:47: note: in expansion of macro ‘THIS_MODULE’
 1609 |                 mymodule_class = class_create(THIS_MODULE, DEVICE_NAME);
      |                                               ^~~~~~~~~~~
In file included from ./include/linux/device.h:31,
                 from /home/controls/misc/riffa/driver/linux/riffa_driver.c:49:
./include/linux/device/class.h:230:54: note: expected ‘const char *’ but argument is of type ‘struct module *’
  230 | struct class * __must_check class_create(const char *name);
      |                                          ~~~~~~~~~~~~^~~~
/home/controls/misc/riffa/driver/linux/riffa_driver.c:1609:34: error: too many arguments to function ‘class_create’
 1609 |                 mymodule_class = class_create(THIS_MODULE, DEVICE_NAME);
      |                                  ^~~~~~~~~~~~
In file included from ./include/linux/device.h:31,
                 from /home/controls/misc/riffa/driver/linux/riffa_driver.c:49:
./include/linux/device/class.h:230:29: note: declared here
  230 | struct class * __must_check class_create(const char *name);
      |                             ^~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:299: /home/controls/misc/riffa/driver/linux/riffa_driver.o] Error 1
make[1]: *** [Makefile:1934: /home/controls/misc/riffa/driver/linux] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.14.0-427.16.1.el9_4.x86_64'
make: *** [Makefile:101: riffa.ko] Error 2

This seems to be a result of a Redhat 9 change to the 5.14 kernel that does not exist in the standard kernel. It is described here:

https://community.intel.com/t5/Analyzers/redhat9-5-14-0-kernal-header-changes-break-sepdk-build/m-p/1605740

If I make the following change I can get it to compile:

diff --git a/driver/linux/riffa_driver.c b/driver/linux/riffa_driver.c
index 817236a..0bbbb34 100644
--- a/driver/linux/riffa_driver.c
+++ b/driver/linux/riffa_driver.c
@@ -1606,7 +1606,8 @@ static int __init fpga_init(void)
        }

        #if LINUX_VERSION_CODE < KERNEL_VERSION(6, 4, 0)
-               mymodule_class = class_create(THIS_MODULE, DEVICE_NAME);
+               //mymodule_class = class_create(THIS_MODULE, DEVICE_NAME);
+               mymodule_class = class_create(DEVICE_NAME);
        #else
                mymodule_class = class_create(DEVICE_NAME);
        #endif

And then "sudo make" and "sudo make install" apparently execute without issue.

But then if I type "sudo make load" I get the following:

q8i@bl100-dassrv2:/home/controls/misc/riffa/driver/linux$ sudo make load
insmod riffa.ko
insmod: ERROR: could not insert module riffa.ko: Invalid module format
make: *** [Makefile:111: load] Error 1
bsobhani commented 1 week ago

Closing. The second issue was an issue with my kernel source, which I fixed by reinstalling it:

sudo yum remove kernel-devel-$(uname -r)
sudo yum install kernel-devel-$(uname -r)

The first issue is still an issue with RHEL9, but can be manually fixed by the user with the code change from my previous comment.

For reference, uname -r gives me: 5.14.0-427.16.1.el9_4.x86_64