mirror of
https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git
synced 2026-09-21 16:38:39 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a21b53cd1 | ||
|
|
9da27da69e | ||
|
|
6bbcf1b527 | ||
|
|
668e50d08c | ||
|
|
6025ea1349 | ||
|
|
d75acfa8a5 |
@@ -1,3 +1,15 @@
|
|||||||
|
v2.0.5
|
||||||
|
Add support for kernels 5.9+
|
||||||
|
Tested on 5.11.0-rc5
|
||||||
|
CAN frames with length > 8 from userspace are rejected rather than truncated
|
||||||
|
|
||||||
|
v2.0.4
|
||||||
|
Ensure carrier is up on new kernels which require it
|
||||||
|
|
||||||
|
v2.0.3
|
||||||
|
Add support for kernels 5.1+
|
||||||
|
Tested on 5.3.0 (Ubuntu 19.10)
|
||||||
|
|
||||||
v2.0.2
|
v2.0.2
|
||||||
Add support for older kernels
|
Add support for older kernels
|
||||||
Tested working properly back to 4.4
|
Tested working properly back to 4.4
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
Version 2.0.2
|
Version 2.0.5
|
||||||
|
|
||||||
This is the kernel object portion of the Intrepid Control Systems SocketCAN support. For SocketCAN to work with Intrepid devices you will need to have this kernel object loaded on your system. Once the module is built and loaded run [icsscand](https://github.com/intrepidcs/icsscand) to turn on SocketCAN support.
|
This is the kernel object portion of the Intrepid Control Systems SocketCAN support. For SocketCAN to work with Intrepid devices you will need to have this kernel object loaded on your system. Once the module is built and loaded run [icsscand](https://github.com/intrepidcs/icsscand) to turn on SocketCAN support.
|
||||||
|
|
||||||
First, install the necessary dependencies for building kernel modules.
|
First, install the necessary dependencies for building kernel modules.
|
||||||
|
|
||||||
On Ubuntu, this is acomplished by running `sudo apt install linux-headers-generic build-essential gcc git`
|
On Ubuntu, this is accomplished by running `sudo apt install linux-headers-generic build-essential gcc git`
|
||||||
|
|
||||||
Clone this repository by running `git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git`
|
Clone this repository by running `git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git`
|
||||||
|
|
||||||
|
|||||||
+14
-4
@@ -57,7 +57,7 @@
|
|||||||
#define KO_DESC "Netdevice driver for Intrepid CAN/Ethernet devices"
|
#define KO_DESC "Netdevice driver for Intrepid CAN/Ethernet devices"
|
||||||
#define KO_MAJOR 2
|
#define KO_MAJOR 2
|
||||||
#define KO_MINOR 0
|
#define KO_MINOR 0
|
||||||
#define KO_PATCH 2
|
#define KO_PATCH 5
|
||||||
#define KO_VERSION str(KO_MAJOR) "." str(KO_MINOR) "." str(KO_PATCH)
|
#define KO_VERSION str(KO_MAJOR) "." str(KO_MINOR) "." str(KO_PATCH)
|
||||||
#define KO_VERSION_INT (KO_MAJOR << 16) | (KO_MINOR << 8) | KO_PATCH
|
#define KO_VERSION_INT (KO_MAJOR << 16) | (KO_MINOR << 8) | KO_PATCH
|
||||||
|
|
||||||
@@ -92,6 +92,11 @@ MODULE_VERSION(KO_VERSION);
|
|||||||
#define KERNEL_CHECKS_MTU_RANGE (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
|
#define KERNEL_CHECKS_MTU_RANGE (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
|
||||||
#define KERNEL_FAULT_TAKES_VMA (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0))
|
#define KERNEL_FAULT_TAKES_VMA (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0))
|
||||||
#define KERNEL_SUPPORTS_ALIASES (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0))
|
#define KERNEL_SUPPORTS_ALIASES (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0))
|
||||||
|
#define KERNEL_DEFINES_VM_FAULT_T (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0))
|
||||||
|
|
||||||
|
#if KERNEL_DEFINES_VM_FAULT_T == 0
|
||||||
|
typedef int vm_fault_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct intrepid_pending_tx_info {
|
struct intrepid_pending_tx_info {
|
||||||
int tx_box_index;
|
int tx_box_index;
|
||||||
@@ -268,6 +273,7 @@ static int intrepid_netdevice_stop(struct net_device *dev)
|
|||||||
|
|
||||||
spin_lock_bh(&ics->lock);
|
spin_lock_bh(&ics->lock);
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
netif_carrier_off(dev);
|
||||||
spin_unlock_bh(&ics->lock);
|
spin_unlock_bh(&ics->lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -276,6 +282,7 @@ static int intrepid_netdevice_stop(struct net_device *dev)
|
|||||||
static int intrepid_netdevice_open(struct net_device *dev)
|
static int intrepid_netdevice_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
netif_start_queue(dev);
|
netif_start_queue(dev);
|
||||||
|
netif_carrier_on(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,7 +471,10 @@ static int intrepid_fill_can_frame_from_neomessage(
|
|||||||
if (msg->status.remoteFrame)
|
if (msg->status.remoteFrame)
|
||||||
cf->can_id |= CAN_RTR_FLAG;
|
cf->can_id |= CAN_RTR_FLAG;
|
||||||
|
|
||||||
cf->can_dlc = get_can_dlc(msg->length);
|
if (unlikely(msg->length > 8))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
cf->can_dlc = msg->length;
|
||||||
memcpy(cf->data, data, cf->can_dlc);
|
memcpy(cf->data, data, cf->can_dlc);
|
||||||
|
|
||||||
stats->rx_bytes += cf->can_dlc;
|
stats->rx_bytes += cf->can_dlc;
|
||||||
@@ -651,7 +661,7 @@ static long intrepid_dev_ioctl(struct file *fp, unsigned int cmd, unsigned long
|
|||||||
*
|
*
|
||||||
* Starting in kernel version 4.11, (struct vm_operations_struct *)->fault() no
|
* Starting in kernel version 4.11, (struct vm_operations_struct *)->fault() no
|
||||||
* longer takes the vma parameter (since it resides in vmf) */
|
* longer takes the vma parameter (since it resides in vmf) */
|
||||||
static int intrepid_vm_fault(
|
static vm_fault_t intrepid_vm_fault(
|
||||||
#if KERNEL_FAULT_TAKES_VMA
|
#if KERNEL_FAULT_TAKES_VMA
|
||||||
struct vm_area_struct *vma,
|
struct vm_area_struct *vma,
|
||||||
#endif
|
#endif
|
||||||
@@ -828,7 +838,7 @@ exit:
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
free_net_devices:
|
free_net_devices:
|
||||||
kzfree(net_devices);
|
kfree(net_devices);
|
||||||
free_shared_mem:
|
free_shared_mem:
|
||||||
vfree(shared_mem);
|
vfree(shared_mem);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user