Pārlūkot izejas kodu

Improve the compatibility with kernel version < 5.6

Jim Huang 3 gadi atpakaļ
vecāks
revīzija
64f791f274
8 mainītis faili ar 74 papildinājumiem un 13 dzēšanām
  1. 0 3
      examples/chardev.c
  2. 0 3
      examples/chardev2.c
  3. 2 1
      examples/kbleds.c
  4. 11 0
      examples/procfs1.c
  5. 12 0
      examples/procfs2.c
  6. 14 0
      examples/procfs3.c
  7. 20 5
      examples/procfs4.c
  8. 15 1
      examples/sleep.c

+ 0 - 3
examples/chardev.c

@@ -3,9 +3,6 @@
  *  you've read from the dev file
  */
 
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
 #include <linux/cdev.h>
 #include <linux/delay.h>
 #include <linux/device.h>

+ 0 - 3
examples/chardev2.c

@@ -2,9 +2,6 @@
  *  chardev2.c - Create an input/output character device
  */
 
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
 #include <linux/cdev.h>
 #include <linux/delay.h>
 #include <linux/device.h>

+ 2 - 1
examples/kbleds.c

@@ -2,7 +2,6 @@
  *  kbleds.c - Blink keyboard leds until the module is unloaded.
  */
 
-#include <linux/console_struct.h> /* For vc_cons */
 #include <linux/init.h>
 #include <linux/kd.h> /* For KDSETLED */
 #include <linux/module.h>
@@ -10,6 +9,8 @@
 #include <linux/vt.h>
 #include <linux/vt_kern.h> /* for fg_console */
 
+#include <linux/console_struct.h> /* For vc_cons */
+
 MODULE_DESCRIPTION("Example module illustrating the use of Keyboard LEDs.");
 MODULE_AUTHOR("Daniele Paolo Scarpazza");
 MODULE_LICENSE("GPL");

+ 11 - 0
examples/procfs1.c

@@ -6,6 +6,11 @@
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/uaccess.h>
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define HAVE_PROC_OPS
+#endif
 
 #define procfs_name "helloworld"
 
@@ -26,9 +31,15 @@ ssize_t procfile_read(struct file *filePointer,
     return ret;
 }
 
+#ifdef HAVE_PROC_OPS
 static const struct proc_ops proc_file_fops = {
     .proc_read = procfile_read,
 };
+#else
+static const struct file_operations proc_file_fops = {
+    .read = procfile_read,
+};
+#endif
 
 int init_module()
 {

+ 12 - 0
examples/procfs2.c

@@ -7,6 +7,11 @@
 #include <linux/module.h>  /* Specifically, a module */
 #include <linux/proc_fs.h> /* Necessary because we use the proc fs */
 #include <linux/uaccess.h> /* for copy_from_user */
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define HAVE_PROC_OPS
+#endif
 
 #define PROCFS_MAX_SIZE 1024
 #define PROCFS_NAME "buffer1k"
@@ -68,10 +73,17 @@ static ssize_t procfile_write(struct file *file,
     return procfs_buffer_size;
 }
 
+#ifdef HAVE_PROC_OPS
 static const struct proc_ops proc_file_fops = {
     .proc_read = procfile_read,
     .proc_write = procfile_write,
 };
+#else
+static const struct file_operations proc_file_fops = {
+    .read = procfile_read,
+    .write = procfile_write,
+};
+#endif
 
 /**
  *This function is called when the module is loaded

+ 14 - 0
examples/procfs3.c

@@ -7,6 +7,11 @@
 #include <linux/proc_fs.h>
 #include <linux/sched.h>
 #include <linux/uaccess.h>
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define HAVE_PROC_OPS
+#endif
 
 #define PROCFS_MAX_SIZE 2048
 #define PROCFS_ENTRY_FILENAME "buffer2k"
@@ -57,12 +62,21 @@ int procfs_close(struct inode *inode, struct file *file)
     return 0;
 }
 
+#ifdef HAVE_PROC_OPS
 static struct proc_ops File_Ops_4_Our_Proc_File = {
     .proc_read = procfs_read,
     .proc_write = procfs_write,
     .proc_open = procfs_open,
     .proc_release = procfs_close,
 };
+#else
+static const struct file_operations File_Ops_4_Our_Proc_File = {
+    .read = procfs_read,
+    .write = procfs_write,
+    .open = procfs_open,
+    .release = procfs_close,
+};
+#endif
 
 int init_module()
 {

+ 20 - 5
examples/procfs4.c

@@ -8,6 +8,11 @@
 #include <linux/module.h>   /* Specifically, a module */
 #include <linux/proc_fs.h>  /* Necessary because we use proc fs */
 #include <linux/seq_file.h> /* for seq_file */
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define HAVE_PROC_OPS
+#endif
 
 #define PROC_NAME "iter"
 
@@ -92,11 +97,21 @@ static int my_open(struct inode *inode, struct file *file)
  * This structure gather "function" that manage the /proc file
  *
  */
-static struct proc_ops my_file_ops = {.proc_open = my_open,
-                                      .proc_read = seq_read,
-                                      .proc_lseek = seq_lseek,
-                                      .proc_release = seq_release};
-
+#ifdef HAVE_PROC_OPS
+static const struct proc_ops my_file_ops = {
+    .proc_open = my_open,
+    .proc_read = seq_read,
+    .proc_lseek = seq_lseek,
+    .proc_release = seq_release,
+};
+#else
+static const struct file_operations my_file_ops = {
+    .open = my_open,
+    .read = seq_read,
+    .llseek = seq_lseek,
+    .release = seq_release,
+};
+#endif
 
 /**
  * This function is called when the module is loaded

+ 15 - 1
examples/sleep.c

@@ -9,6 +9,11 @@
 #include <linux/sched.h>   /* For putting processes to sleep and
                                    waking them up */
 #include <linux/uaccess.h> /* for get_user and put_user */
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define HAVE_PROC_OPS
+#endif
 
 /*
  * The module's file functions
@@ -219,12 +224,21 @@ int module_close(struct inode *inode, struct file *file)
  * the functions called when somebody tries to do something to our file. NULL
  * means we don't want to deal with something.
  */
-static struct proc_ops File_Ops_4_Our_Proc_File = {
+#ifdef HAVE_PROC_OPS
+static const struct proc_ops File_Ops_4_Our_Proc_File = {
     .proc_read = module_output,   /* "read" from the file */
     .proc_write = module_input,   /* "write" to the file */
     .proc_open = module_open,     /* called when the /proc file is opened */
     .proc_release = module_close, /* called when it's closed */
 };
+#else
+static const struct file_operations File_Ops_4_Our_Proc_File = {
+    .read = module_output,
+    .write = module_input,
+    .open = module_open,
+    .release = module_close,
+};
+#endif
 
 /*
  * Module initialization and cleanup