[etherlab-dev] initialization from incompatible pointer type

Geller, Nir nir.geller at servotronix.com
Sun Apr 1 12:03:16 CEST 2018


Hi Chris,



The following patch makes a few minor adjustments to the etherlab master code in order to adapt it to kernel 4.13


Hope this helps you out,


Nir.




diff --git a/drivers/misc/ethercat_master/devices/generic.c b/drivers/misc/ethercat_master/devices/generic.c
index 9f19a79..11ed091 100644
--- a/drivers/misc/ethercat_master/devices/generic.c
+++ b/drivers/misc/ethercat_master/devices/generic.c
@@ -206,14 +206,29 @@ int ec_gen_device_create_socket(
 {
     int ret;
     struct sockaddr_ll sa;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+    struct net *nd_net;
+#endif

     dev->rx_buf = kmalloc(EC_GEN_RX_BUF_SIZE, GFP_KERNEL);
     if (!dev->rx_buf) {
         return -ENOMEM;
     }

+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0))
     ret = sock_create_kern(PF_PACKET, SOCK_RAW,
         htons(ETH_P_ETHERCAT), &(dev->socket));
+#else
+    nd_net = dev_net(dev->netdev);
+
+    if (!nd_net) {
+        printk(KERN_ERR PFX "Failed to obtain net namespace\n");
+        return -EINVAL;
+    }
+
+    ret = sock_create_kern(nd_net, PF_PACKET, SOCK_RAW, htons(ETH_P_ETHERCAT),
+            &dev->socket);
+#endif
     if (ret) {
         printk(KERN_ERR PFX "Failed to create socket (ret = %i).\n", ret);
         return ret;
diff --git a/drivers/misc/ethercat_master/master/cdev.c b/drivers/misc/ethercat_master/master/cdev.c
index 3361872..14e2e86 100644
--- a/drivers/misc/ethercat_master/master/cdev.c
+++ b/drivers/misc/ethercat_master/master/cdev.c
@@ -64,7 +64,7 @@ static int eccdev_mmap(struct file *, struct vm_area_struct *);
 #define PAGE_FAULT_VERSION KERNEL_VERSION(2, 6, 23)

 #if LINUX_VERSION_CODE >= PAGE_FAULT_VERSION
-static int eccdev_vma_fault(struct vm_area_struct *, struct vm_fault *);
+static int eccdev_vma_fault(struct vm_fault *);
 #else
 static struct page *eccdev_vma_nopage(
         struct vm_area_struct *, unsigned long, int *);
@@ -276,12 +276,11 @@ int eccdev_mmap(
  * \return Zero on success, otherwise a negative error code.
  */
 static int eccdev_vma_fault(
-        struct vm_area_struct *vma, /**< Virtual memory area. */
         struct vm_fault *vmf /**< Fault data. */
         )
 {
     unsigned long offset = vmf->pgoff << PAGE_SHIFT;
-    ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data;
+    ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vmf->vma->vm_private_data;
     struct page *page;

     if (offset >= priv->ctx.process_data_size) {
@@ -297,7 +296,7 @@ static int eccdev_vma_fault(
     vmf->page = page;

     EC_MASTER_DBG(priv->cdev->master, 1, "Vma fault, virtual_address = %p,"
-            " offset = %lu, page = %p\n", vmf->virtual_address, offset, page);
+            " offset = %lu, page = %p\n", (void*)vmf->address, offset, page);

     return 0;
 }
diff --git a/drivers/misc/ethercat_master/master/master.c b/drivers/misc/ethercat_master/master/master.c
index 3a65030..d589d5d 100644
--- a/drivers/misc/ethercat_master/master/master.c
+++ b/drivers/misc/ethercat_master/master/master.c
@@ -44,6 +44,8 @@
 #include <linux/device.h>
 #include <linux/version.h>
 #include <linux/hrtimer.h>
+#include <linux/sched/signal.h>
+#include <uapi/linux/sched/types.h>
 #include "globals.h"
 #include "slave.h"
 #include "slave_config.h"


________________________________
From: etherlab-dev <etherlab-dev-bounces at etherlab.org> on behalf of Chris Grigg <chrislgrigg at gmail.com>
Sent: Friday, March 30, 2018 1:07:51 AM
To: etherlab-dev at etherlab.org
Subject: [etherlab-dev] initialization from incompatible pointer type

Hello everyone,

I'm trying to install the EtherCAT Master in Ubuntu 17.04, Kernel 4.13.0-37-generic, and I am encountering this error when building:

/workspace/Etherlab_EtherCAT_Master/master/cdev.c:87:14: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
     .fault = eccdev_vma_fault
              ^~~~~~~~~~~~~~~~

I am unsure of how to proceed or troubleshoot but would greatly appreciate any help or advice. Thank you!

Best,

Chris

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-dev/attachments/20180401/3a890b7b/attachment.html>


More information about the etherlab-dev mailing list