mccethernet is loading on Ubuntu 15.10.:
ifconfig
eth0 Link encap:Ethernet HWaddr 00:21:70:5a:c0:7d
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:722 errors:0 dropped:0 overruns:0 frame:0
TX packets:722 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:88472 (88.4 KB) TX bytes:88472 (88.4 KB)
mcc0 Link encap:Ethernet HWaddr 00:00:00:00:00:01
UP BROADCAST RUNNING MULTICAST MTU:1024 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 00:c0:a8:c3:56:15
inet addr:192.168.9.6 Bcast:192.168.9.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:a8ff:fec3:5615/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8630 errors:0 dropped:0 overruns:0 frame:0
TX packets:7939 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4416731 (4.4 MB) TX bytes:1681525 (1.6 MB)
Background on driver development for mccethernet, mccmulti, and mcctty:
I start by creating a basic driver that can be loaded by my desktop PC, which is running 15.10 Ubuntu. This way I can load/debug/ etc faster then recompiling the kernel or loading the Udoo Neo. Also, the Ubuntu is using 4.x and neo is using a 3.4.x and there are some API differences that have to be accounted for in the mccethernet.c
For example: in 3.4.x alloc_netdev only needs 3 arguments where alloc_netdev in 4.x needs 4 arguments.
Linux kernel has some macros to help you out:
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
mccethernet_dev = alloc_netdev(sizeof(struct mcc_ethernet_device), "mcc0", mcc_setup);
#else
mccethernet_dev = alloc_netdev(sizeof(struct mcc_ethernet_device), "mcc0", NET_NAME_UNKNOWN, mcc_setup);
#endif
mccmulti driver was a little harder to since it is using MCC api calls; the first pass was to stub MCC calls.
For the mccethernet it is using basic file operations on m4mcc1 on the mccmulti user interface. Code can be found here.