The document discusses developing network device drivers for embedded Linux. It covers key topics like socket buffers, network devices, communicating with network protocols and PHYs, buffer management, and differences between Ethernet and WiFi drivers. The outline lists these topics and others like throughput and considerations. Prerequisites include C skills, Linux knowledge, and an understanding of networking and embedded driver development.
This course gets you started with writing device drivers in Linux by providing real time hardware exposure. Equip you with real-time tools, debugging techniques and industry usage in a hands-on manner. Dedicated hardware by Emertxe's device driver learning kit. Special focus on character and USB device drivers.
This presentation introduces Data Plane Development Kit overview and basics. It is a part of a Network Programming Series.
First, the presentation focuses on the network performance challenges on the modern systems by comparing modern CPUs with modern 10 Gbps ethernet links. Then it touches memory hierarchy and kernel bottlenecks.
The following part explains the main DPDK techniques, like polling, bursts, hugepages and multicore processing.
DPDK overview explains how is the DPDK application is being initialized and run, touches lockless queues (rte_ring), memory pools (rte_mempool), memory buffers (rte_mbuf), hashes (rte_hash), cuckoo hashing, longest prefix match library (rte_lpm), poll mode drivers (PMDs) and kernel NIC interface (KNI).
At the end, there are few DPDK performance tips.
Tags: access time, burst, cache, dpdk, driver, ethernet, hub, hugepage, ip, kernel, lcore, linux, memory, pmd, polling, rss, softswitch, switch, userspace, xeon
This course gets you started with writing device drivers in Linux by providing real time hardware exposure. Equip you with real-time tools, debugging techniques and industry usage in a hands-on manner. Dedicated hardware by Emertxe's device driver learning kit. Special focus on character and USB device drivers.
This presentation introduces Data Plane Development Kit overview and basics. It is a part of a Network Programming Series.
First, the presentation focuses on the network performance challenges on the modern systems by comparing modern CPUs with modern 10 Gbps ethernet links. Then it touches memory hierarchy and kernel bottlenecks.
The following part explains the main DPDK techniques, like polling, bursts, hugepages and multicore processing.
DPDK overview explains how is the DPDK application is being initialized and run, touches lockless queues (rte_ring), memory pools (rte_mempool), memory buffers (rte_mbuf), hashes (rte_hash), cuckoo hashing, longest prefix match library (rte_lpm), poll mode drivers (PMDs) and kernel NIC interface (KNI).
At the end, there are few DPDK performance tips.
Tags: access time, burst, cache, dpdk, driver, ethernet, hub, hugepage, ip, kernel, lcore, linux, memory, pmd, polling, rss, softswitch, switch, userspace, xeon
Virtual File System in Linux Kernel
Note: When you view the the slide deck via web browser, the screenshots may be blurred. You can download and view them offline (Screenshots are clear).
Covers the basics of Direct Memory Access (DMA). Further to this, the generic Linux DMA engine is covered along with steps to initiate the DMA transfer
Embitude's Linux SPI Drivers Training Slides. Contains the details of AM335X specific low level programming, SPI components such as SPI Master Driver, SPI Client Driver, Device Tree for SPI
Yocto - Embedded Linux Distribution MakerSherif Mousa
Yocto is an Embedded Linux distribution maker.
This presentation is a quick start guide for Yocto buildsystem to get familiar with the tool and how to start building your own custom Linux system for a specific hardware target.
Android Audio HAL – Audio Architecture – Audio HAL interface – Audio Policy – Audio HAL compilation & verification – Overview of Tinyalsa
Android Video HAL – Camera Architecture – Overview of camera HAL interface – Overview of V4L2 – Enabling V4l2 in kernel – Camera HAL compilation and verification
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
In the networking world there are a number of ways to increase performance over naive use of basic Berkeley sockets. These techniques have ranged from polling blocking sockets, non-blocking sockets controlled by Epoll, all the way through completely bypassing the Linux kernel for maximum network performance where you talk directly to the network interface card by using something like DPDK or Netmap. All these tools have their place, and generally occupy a space from convenience to performance. But in recent years, that landscape has changed massively.. The tools available to the average Linux systems developer have improved from the creation of io_uring, to the expansion of bpf from a simple filtering language to a full-on programming environment embedded directly in the kernel. Along with that came something called XDP (express datapath). This was Linux kernel's answer to kernel-bypass networking. AF_XDP is the new socket type created by this feature, and generally works very similarly to something like DPDK. History lessons out of the way, this talk will look into, and discuss the merits of this technology, it's place in the broader ecosystem and how it can be used to attain the highest level of performance possible. This talk will dive into crucial details, such as how AF_XDP works, how it can be integrated into a larger system and finally more advanced topics such as request sharding/load balancing. There will be detailed look at the design of AF_XDP, the eBpf code used, as well as the userspace code required to drive it all. It will also include performance numbers from this setup compared to regular kernel networking. And most importantly how to put all this together to handle as much data as possible on a single modern multi-core system.
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPThomas Graf
This talk will start with a deep dive and hands on examples of BPF, possibly the most promising low level technology to address challenges in application and network security, tracing, and visibility. We will discuss how BPF evolved from a simple bytecode language to filter raw sockets for tcpdump to the a JITable virtual machine capable of universally extending and instrumenting both the Linux kernel and user space applications. The introduction is followed by a concrete example of how the Cilium open source project applies BPF to solve networking, security, and load balancing for highly distributed applications. We will discuss and demonstrate how Cilium with the help of BPF can be combined with distributed system orchestration such as Docker to simplify security, operations, and troubleshooting of distributed applications.
Buildroot is a set of Makefiles and patches that makes it
easy to generate a complete embedded Linux system. It generates root file system images ready to be used. Complete build system based on the Linux Kernel configuration system and supports a wide range of target architectures. Here is a presentation that gives a practical quick start to build-root.
HKG15-107: ACPI Power Management on ARM64 Servers (v2)Linaro
HKG15-107: ACPI Power Management on ARM64 Servers
---------------------------------------------------
Speaker: Ashwin Chaugule
Date: February 9, 2015
---------------------------------------------------
★ Session Summary ★
Status of CPPC with runtime PM and discussion on idle PM with ACPI
--------------------------------------------------
★ Resources ★
Pathable: https://hkg15.pathable.com/meetings/250767
Video: https://www.youtube.com/watch?v=eDDgYIkUHLI
Etherpad: http://pad.linaro.org/p/hkg15-107
---------------------------------------------------
★ Event Details ★
Linaro Connect Hong Kong 2015 - #HKG15
February 9-13th, 2015
Regal Airport Hotel Hong Kong Airport
---------------------------------------------------
http://www.linaro.org
http://connect.linaro.org
OpenStack Tokyo 2015: Connecting the Dots with NeutronPhil Estes
Mohammad Banikazemi and Phil Estes from IBM discuss unifying the virtualized networking layers between containers and VMs using Neutron and Docker's libnetwork pluggable API, filling the gap with recently announced Project Kuryr
Microservices and containers networking: Contiv, an industry leading open sou...Codemotion
Contiv provides a higher level of networking abstraction for microservices: it provides built-in service discovery and service routing for scale out services, working with schedulers like Docker Swarm, Kubernetes, Mesos and Nomad. We will see some code examples, basic use cases and an easy tutorial on the web.
Virtual File System in Linux Kernel
Note: When you view the the slide deck via web browser, the screenshots may be blurred. You can download and view them offline (Screenshots are clear).
Covers the basics of Direct Memory Access (DMA). Further to this, the generic Linux DMA engine is covered along with steps to initiate the DMA transfer
Embitude's Linux SPI Drivers Training Slides. Contains the details of AM335X specific low level programming, SPI components such as SPI Master Driver, SPI Client Driver, Device Tree for SPI
Yocto - Embedded Linux Distribution MakerSherif Mousa
Yocto is an Embedded Linux distribution maker.
This presentation is a quick start guide for Yocto buildsystem to get familiar with the tool and how to start building your own custom Linux system for a specific hardware target.
Android Audio HAL – Audio Architecture – Audio HAL interface – Audio Policy – Audio HAL compilation & verification – Overview of Tinyalsa
Android Video HAL – Camera Architecture – Overview of camera HAL interface – Overview of V4L2 – Enabling V4l2 in kernel – Camera HAL compilation and verification
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
In the networking world there are a number of ways to increase performance over naive use of basic Berkeley sockets. These techniques have ranged from polling blocking sockets, non-blocking sockets controlled by Epoll, all the way through completely bypassing the Linux kernel for maximum network performance where you talk directly to the network interface card by using something like DPDK or Netmap. All these tools have their place, and generally occupy a space from convenience to performance. But in recent years, that landscape has changed massively.. The tools available to the average Linux systems developer have improved from the creation of io_uring, to the expansion of bpf from a simple filtering language to a full-on programming environment embedded directly in the kernel. Along with that came something called XDP (express datapath). This was Linux kernel's answer to kernel-bypass networking. AF_XDP is the new socket type created by this feature, and generally works very similarly to something like DPDK. History lessons out of the way, this talk will look into, and discuss the merits of this technology, it's place in the broader ecosystem and how it can be used to attain the highest level of performance possible. This talk will dive into crucial details, such as how AF_XDP works, how it can be integrated into a larger system and finally more advanced topics such as request sharding/load balancing. There will be detailed look at the design of AF_XDP, the eBpf code used, as well as the userspace code required to drive it all. It will also include performance numbers from this setup compared to regular kernel networking. And most importantly how to put all this together to handle as much data as possible on a single modern multi-core system.
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPThomas Graf
This talk will start with a deep dive and hands on examples of BPF, possibly the most promising low level technology to address challenges in application and network security, tracing, and visibility. We will discuss how BPF evolved from a simple bytecode language to filter raw sockets for tcpdump to the a JITable virtual machine capable of universally extending and instrumenting both the Linux kernel and user space applications. The introduction is followed by a concrete example of how the Cilium open source project applies BPF to solve networking, security, and load balancing for highly distributed applications. We will discuss and demonstrate how Cilium with the help of BPF can be combined with distributed system orchestration such as Docker to simplify security, operations, and troubleshooting of distributed applications.
Buildroot is a set of Makefiles and patches that makes it
easy to generate a complete embedded Linux system. It generates root file system images ready to be used. Complete build system based on the Linux Kernel configuration system and supports a wide range of target architectures. Here is a presentation that gives a practical quick start to build-root.
HKG15-107: ACPI Power Management on ARM64 Servers (v2)Linaro
HKG15-107: ACPI Power Management on ARM64 Servers
---------------------------------------------------
Speaker: Ashwin Chaugule
Date: February 9, 2015
---------------------------------------------------
★ Session Summary ★
Status of CPPC with runtime PM and discussion on idle PM with ACPI
--------------------------------------------------
★ Resources ★
Pathable: https://hkg15.pathable.com/meetings/250767
Video: https://www.youtube.com/watch?v=eDDgYIkUHLI
Etherpad: http://pad.linaro.org/p/hkg15-107
---------------------------------------------------
★ Event Details ★
Linaro Connect Hong Kong 2015 - #HKG15
February 9-13th, 2015
Regal Airport Hotel Hong Kong Airport
---------------------------------------------------
http://www.linaro.org
http://connect.linaro.org
OpenStack Tokyo 2015: Connecting the Dots with NeutronPhil Estes
Mohammad Banikazemi and Phil Estes from IBM discuss unifying the virtualized networking layers between containers and VMs using Neutron and Docker's libnetwork pluggable API, filling the gap with recently announced Project Kuryr
Microservices and containers networking: Contiv, an industry leading open sou...Codemotion
Contiv provides a higher level of networking abstraction for microservices: it provides built-in service discovery and service routing for scale out services, working with schedulers like Docker Swarm, Kubernetes, Mesos and Nomad. We will see some code examples, basic use cases and an easy tutorial on the web.
An Introduce of OPNFV (Open Platform for NFV)Mario Cho
OPNFV is Open Platform for Network Function Virtualization.
It lecture are talk on Open Software Conference 2015.
The Lecture of OPNFV explain OPNFV sub-software technology like The Linux Kernel, Virtualization, Software Defined Network, OpenStack, OpenDaylight, and Network Function Virtualization.
Project implements a complex intra-networking system of various devices and modules working on IPv4 and IPv6 protocols providing various services like DNS, DHCP, HTTP, FTP, and SMTP. Information is routed among various client on the network with the use of protocols RIP, IMAP and OSPF. Project comprises of sub-netting, LAN switching and VLAN techniques to manage the number of hosts present in the network communicating with least network collision and congestion.
Similar to Embedded linux network device driver development (20)
Hello,
Swift Act Services will be providing its first embedded summer boot camp. The total cost is EGP 3500 for all courses. Individual course costs are:
1- C Programming = EGP 1000
2- Device Drivers = EGP 1000
3- SW Design = EGP 2000
4- SW Testing = EGP 2000
5- Project = EGP 1000
You are free to attend individual courses or the other packages.
Course are planned starting Jun 29 every week Thursday, Friday and Saturday from 10 am till we finish the day content. It is serious training. Be ready.
For courses registeration, please use this form before End of May.
https://goo.gl/forms/a8205QCMVuXSkkzI2
This is a free module introducing embedded systems. It covers C programming, microcontrollers and software design in 40 ours. Its free for use in universities and institutes on condition of prior notification. Please, do not use it for commercial purposes. If you need full set If you need accompanying labs and software tool feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
This is a free module from my course ISTQB CTAL Test Manager revised to 2012 syllabus. If you need full training feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
This is my complete introductory course for Software Test Automation.If you need full training that includes different automation tools (Selenium, J-Meter, Burp, SOAP UI etc), feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
This is a free module from my course ISTQB CTFL Agile Tester revised to 2014 syllabus. If you need full training feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
This is a free module from my course ISTQB CTAL Technical Test Analyst revised to 2012 syllabus. If you need full training feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
This is a free module from my course ISTQB CTAL Technical Test Analyst revised to 2012 syllabus. If you need full training feel free to contact me by email (amraldo@hotmail.com) or by mobile (+201223600207).
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
2. Rights to Copy
License: Creative Commons Attribution - Share Alike 3.0
You are free:
to copy, distribute, display, and perform the work
to make derivative works
to make commercial use of the work
Under the following conditions:
Attribution – Derived from original work of Free Electrons
Share Alike
For any reuse or distribution, you must make clear to others the license terms
of this work.
September 7, 2017
Embedded Linux Network Device Driver
Development
2
4. Objectives
Understanding the structure of ethernet and WIFI device drivers
Developing Linux network device drivers
Embedded Linux Network Device Driver
Development
4 September 7, 2017
5. Prerequisites
Solid C programming
Knowledge of Linux commands is a plus
Knowledge of networking
Embedded Linux Kernel and Driver Development training or equivalent
Embedded Linux Network Device Driver
Development
5 September 7, 2017
6. Notes
Ask any time.
Turn your cell silent.
Embedded Linux Network Device Driver
Development
6 September 7, 2017
7. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
7
8. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
8
9. OSI Model and Linux Kernel
September 7, 2017
Embedded Linux Network Device Driver
Development
9
User Space
Kernel Network
Stack
Device Driver
11. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
11
12. Socket Buffer (sk_buff)
struct sk_buff (include/linux/sk_buff.h) represents a network packet
Support data encapsulation/decapsulation through protocol layers
In addition to data, sk_buff maintains:
head, the start of the packet
data, the start of the packet payload
tail, the end of the packet payload
end, the end of the packet
len, the amount of data of the packet
These fields are updated when the packet goes through the protocol
layers
September 7, 2017
Embedded Linux Network Device Driver
Development
12
13. SKB Operations
Allocation
By dev_alloc_skb() function
Can be done in ISR
On Ethernet, allocated size = packet
length + 2
To word align IP header
IP header = 14 bytes
Reservation
By skb_reserve() function
Skipping NET_IP_ALIGN padding
bytes
September 7, 2017
Embedded Linux Network Device Driver
Development
13
14. SKB Operations cont’d
Data Copying
From DMA buffer to SKB during
reception for example
OR SKB to DMA buffer during
transmission (may be)
Pointers Update
After copying payload
September 7, 2017
Embedded Linux Network Device Driver
Development
14
15. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
15
16. Network Device
struct net_device (include/linux/netdevice.h) represents a network
interface
Allocation takes place with alloc_netdev() function
Size of private data is passed as argument
Pointer to these private data can be read in net_device->priv
Use alloc_etherdev() for ethernet interfaces
Use alloc_ieee80211() for WIFI interfaces
September 7, 2017
Embedded Linux Network Device Driver
Development
16
17. Network Device cont’d
Registration with register_netdev() function
Unregistration with unregister_netdev() function
Liberation with free_netdev() function
September 7, 2017
Embedded Linux Network Device Driver
Development
17
18. Network Device Operations
Defined by struct net_device_ops (include/linux/netdevice.h)
Set the netdev_ops field in the struct net_device structure to point to the
struct net_device_ops structure
September 7, 2017
Embedded Linux Network Device Driver
Development
18
Operation Description
ndo_open() Called when network interface uped
ndo_close() Called when network interface downed
ndo_start_xmit() Start packet transmission
ndo_get_stats() Get statistics
ndo_do_ioctl() Implement device specific operations
ndo_set_rx_mode() Select promiscuous, multicast, etc
ndo_set_mac_address() Set MAC address
ndo_set_multicast_list() Set multicast filters
19. Network Device Operations cont’d
Sample operations are:
September 7, 2017
Embedded Linux Network Device Driver
Development
19
Operation Description
ndo_open() Called when network interface uped
ndo_close() Called when network interface downed
ndo_start_xmit() Start packet transmission
ndo_get_stats() Get statistics
ndo_do_ioctl() Implement device specific operations
ndo_set_rx_mode() Select promiscuous, multicast, etc
ndo_set_mac_address() Set MAC address
ndo_set_multicast_list() Set multicast filters
ndo_tx_timeout() Reset unresponsive network interface
20. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
20
21. Flow Control Utility Functions
include/linux/netdevice.h
September 7, 2017
Embedded Linux Network Device Driver
Development
21
Operation Description
netif_start_queue() Tells kernel that driver is ready to send packets
netif_stop_queue() Tells kernel to stop sending packets (@cleanup or congestion)
netif_queue_stopped() Tells whether queue is stopped or not
netif_wake_queue() Wakes up a queue after a netif_stop_queue()
netif_rx() Gives SKB to kernel
22. Transmission
Kernel calls ndo_start_xmit() with SKB as argument
ndo_start_xmit():
1. Sets up DMA buffers and other HW mechanisms
2. Starts transmission
3. Can stop queueing if no more free DMA buffers available using
netif_stop_queue()
4. Returns NETDEV_TX_OK or NETDEV_TX_BUSY
When N packets have been sent, an interrupt is raised and the driver
should:
1. Acknowledging interrupt
2. Freeing used DMA buffers
3. Freeing SKB with dev_kfree_skb_irq()
4. If the queue was stopped, start it again
September 7, 2017
Embedded Linux Network Device Driver
Development
22
23. Reception: Non-NAPI
Reception is via an interrupt that should:
1. Allocate an SKB
2. Reserve NET_IP_ALIGN padding bytes
3. Copy packet from DMA buffers to SKB
4. Update SKB pointers
5. Update the skb->protocol field with eth_type_trans(skb, netdevice)
6. Give SKB to kernel by netif_rx()
netif_rx() use NET_RX_SOFTIRQ to offload the work of posting received data
packets to protocol layers
Nice and simple
@high traffic, interrupt rate is high
Solution: switch to polled mode when interrupt rate is too high (NAPI)
September 7, 2017
Embedded Linux Network Device Driver
Development
23
24. Reception: NAPI
In network interface private structure, add a struct napi_struct
(include/linux/netdevice.h)
@ driver initialization, register the NAPI poll operation
dev: network interface
&lp->napi: struct napi_struct
r6040_poll: NAPI poll operation
64: weight that represents the importance of network interface
September 7, 2017
Embedded Linux Network Device Driver
Development
24
25. Reception: NAPI cont’d
Rx ISR
Disables Rx interrupt and switch to
polled mode
if (napi_schedule_prep(&lp->napi)) {
/* Disable reception interrupts */
__napi_schedule(&lp->napi);
}
Kernel calls our poll() operation
regularly
Poll Function
static int r6040_poll(struct
napi_struct *napi, int budget)
Receives at most budget packets and
pushes them to the network stack
using netif_receive_skb()
If less than budget packets have been
received, switch back to interrupt
mode using napi_complete(&lp-
>napi) and reenable interrupts
Must return the number of packets
received
September 7, 2017
Embedded Linux Network Device Driver
Development
25
26. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
26
27. Connection with PHY
MAC and PHY are connected using a MII or RMII interface
This interface contains two wires used for the MDIO bus
Driver needs to communicate with the PHY to get link information (up,
down, speed, full or half duplex) and configure the MAC accordingly
September 7, 2017
Embedded Linux Network Device Driver
Development
27
28. PHY in Kernel
Kernel has a framework (drivers/net/phy/) that
Exposes an API to communicate with PHY
Allows to implement PHY drivers
Implements a basic generic PHY driver that works with all PHY
See Documentation/networking/phy.txt
September 7, 2017
Embedded Linux Network Device Driver
Development
28
29. MDIO Bus Initialization
Driver creates a MDIO bus struct mii_bus (include/linux/mii.h) to tells PHY
infrastructure how to communicate with the PHY
mdio_read() and mdio_write are HW specific and must be implemented
by the driver
September 7, 2017
Embedded Linux Network Device Driver
Development
29
30. MDIO Bus Initialization cont’d
The ->irq[] array must be allocated and initialized
To use polling, set the values to PHY_POLL
Lp->mii_if->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
for (i = 0; i < PHY_MAX_ADDR; i++)
lp->mii_if>irq[i] = PHY_POLL;
Finally, register the MDIO bus
This will scan the bus for PHYs and fill the mii_if->phy_map[] array with the
result
mdiobus_register(bp->mii_if);
September 7, 2017
Embedded Linux Network Device Driver
Development
30
31. Connecting with PHY
mdiobus_register() function filled the mii_if->phy_map[] array with struct
phy_device * pointers
Appropriate PHY (usually, only one is detected) must be selected
Connecting to the PHY allows to register a callback that will be called
when the link changes :
interface is usually PHY_INTERFACE_MODE_MII or
PHY_INTERFACE_MODE_RMII
September 7, 2017
Embedded Linux Network Device Driver
Development
31
32. Updating MAC Capabilities
MAC and PHY might have different capabilities
PHY handling Gigabit speed, but not MAC
Driver is responsible for updating phydev->advertise and phydev-
>supported to remove any PHY capability that the MAC doesn't support
September 7, 2017
Embedded Linux Network Device Driver
Development
32
33. Handling Link Changes
The callback that handle link changes should have the following prototype:
void foo_handle_link_change(struct net_device *dev)
It must check the duplex, speed and link fields of the struct phy_device
structure, and update Ethernet controller configuration accordingly
duplex is either DUPLEX_HALF or DUPLEX_FULL
speed is either SPEED_10, SPEED_100, SPEED_1000, SPEED_2500 or
SPEED_10000
link is a Boolean
September 7, 2017
Embedded Linux Network Device Driver
Development
33
34. Starting and stopping the PHY
After set up, to make the PHY driver poll regularly the PHY hardware, one
must start it with phy_start() functions
And stop it using phy_stop(), when no longer needed
September 7, 2017
Embedded Linux Network Device Driver
Development
34
35. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
35
36. Buffers Management
During open(), driver pre-allocates needed DMA descriptos needed for
transmission and reception
When totally utilized, the driver tells the kernel to stop sending packets to
the driver
SKB are allocated and freed as per need
September 7, 2017
Embedded Linux Network Device Driver
Development
36
37. Concurrency
Access protection needed in the face of multiple execution threads:
Transmit thread
Receive thread
Transmit-complete interrupt
Receive interrupt
NAPI polling
September 7, 2017
Embedded Linux Network Device Driver
Development
37
38. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
38
39. Network Benchmarking
Netperf (free from www.netperf.org ) can set up complex TCP/UDP
connection scenarios to control C/C’s such as protocol parameters,
number of simultaneous sessions, and size of data blocks.
Benchmarking = Comparing resulting throughput with maximum practical
bandwidth
Factors affecting throughput:
Driver implementation
Protocol used
September 7, 2017
Embedded Linux Network Device Driver
Development
39
40. Driver Performance
Execution time
Considering usage of DMA for large packets
Offloading CPU by moving functionalities to hardware (TCP checksum)
Taking into consideration upper layers behavior
September 7, 2017
Embedded Linux Network Device Driver
Development
40
41. Protocol Performance
TCP window size = data that can be transmitted before receiving ACK
Fast network interfaces + small window size = TCP sitting idle waiting for ACK
In UDP, the window size is not relevant as there is no ACK
Packet loss in TCP and UDP
Mapping protocol block sizes to MTU sizes
September 7, 2017
Embedded Linux Network Device Driver
Development
41
42. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
42
43. Ethtool (include/linux/ethtool.h)
ethtool is a user space tool that query low-level information from an
Ethernet interface and to modify its configuration
@ driver, a struct ethtool_ops structure can be declared and connected to
the struct net_device using the ethtool_ops field
List of operations: get_settings(), set_settings(), get_drvinfo(), get_wol(),
set_wol(), get_link(), get_eeprom(), set_eeprom(), get_tso(), set_tso(),
get_flags(), set_flags(), etc.
Some of these operations can be implemented using the PHY interface
(phy_ethtool_gset(), phy_ethtool_sset()) or using generic
operations(ethtool_op_get_link() for example)
September 7, 2017
Embedded Linux Network Device Driver
Development
43
44. Statistics
The driver is responsible for keeping statistics up to date about the
number of packets/bytes received/transmitted, the number of errors, of
collisions, etc.
To expose these information, the driver must implement a get_stats()
operation, with the following prototype struct net_device_stats
*foo_get_stats(struct net_device *dev);
The net_device_stats structure must be filled by the driver
It contains fields such as rx_packets, tx_packets, rx_bytes, tx_bytes, rx_errors,
tx_errors, rx_dropped, tx_dropped, multicast, collisions, etc
September 7, 2017
Embedded Linux Network Device Driver
Development
44
45. Power Management
suspend() function should:
Call netif_device_detach()
Do the hardware dependent operations to suspend the devices (like disable
the clocks)
The resume() function should:
Do the hardware dependent operations (like enable the clocks)
Call netif_device_attach()
September 7, 2017
Embedded Linux Network Device Driver
Development
45
47. Outline
Introduction
Socket Buffers
Network Devices
Communication with Network Protocol
Communication with PHY
Buffer Management and Concurrency Issues
Network Throughput
Other Network Driver Considerations
Ethernet Driver vs WIFI Driver
September 7, 2017
Embedded Linux Network Device Driver
Development
47
48. Ethernet vs. WIFI
Ethernet
CSMA/CD
Frames are not acknowledged
WIFI
CSMA/CA
Frames are acknowledged
Uses WEP for enhanced security
2 modes of operation:
Ad-hoc
Infrastructure
September 7, 2017
Embedded Linux Network Device Driver
Development
48
49. Configuring WIFI Drivers
The Wireless Extensions project defines a generic Linux API to configure
WLAN device drivers in a device independent manner
It also provides a set of common tools to set and access information from
WLAN drivers
Individual drivers must implement support for Wireless Extensions to
connect themselves with the common interface and, hence, with the tools
September 7, 2017
Embedded Linux Network Device Driver
Development
49
50. Talking to WIFI Drivers
Using iwconfig utility
To glue your driver to iwconfig, you need to implement prescribed functions
corresponding to commands that set parameters such as ESSID and WEP keys
Using iwpriv utility
To use iwpriv over your driver, define private ioctls relevant to your hardware
and implement the corresponding handler functions
Using /proc/net/wireless to get driver statistics
For this, implement the get_wireless_stats() function in your driver, in addition
to the get_stats() function
WLAN drivers tie these three pieces of information inside a structure
called iw_handler_def, defined in include/net/iw_handler.h
September 7, 2017
Embedded Linux Network Device Driver
Development
50
51. Ethernet/WIFI Famous Device Drivers
September 7, 2017
Embedded Linux Network Device Driver
Development
51
Device(s) Driver Location in Kernel Tree
Intersil Prism2 WLAN Compact Flash Card /drivers/net/wireless/intersil/orinoco
Intel Pro/Wireless Mini PCI (and PCIe Mini) /drivers/net/wireless/intel/ipw2x00
Atmel WLAN USB /drivers/net/wireless/atmel
Intel PRO/1000 /drivers/net/ethernet/intel/e1000