In this article, I want to discuss some basics of the Linux PCI/PCIe drivers development. I think this issue is not properly covered, and some existing information is might be outdated. I will show basic concepts and important structures, and this is might be a good beginner guide for the newbie driver developers.
Tag: kernel
Linux block device driver
My article about character devices is quite popular so I decided to write something about another big class of the devices in Linux – block devices. This type of device is used to access various types of storage hardware – hard disks, SSD, and so on. Here I want to describe blk-mq based devices in modern (>= 5.0) Linux kernels…
C++ in Linux kernel
Linux kernel is written in C (and in Assembly in platform-specific portions) language. C language is only one allowed language to write kernel modules. And there is no problem, in most of the cases. But sometimes some stranger things may be required. Let’s see how to use C++ for the Linux kernel modules.
Printing sk_buff data
Sometimes when working with network packets inside the Linux kernel it might be very useful to print packet contents to see what actually going on. Here I’m describing how to print packet from sk_buff structure and analyze this data with Wireshark. In this short note I will not describe capturing of the packets inside the kernel but only show how…
Getting Linux routing table using netlink
In the previous article, we discussed the monitoring of the network interfaces using Netlink. Now it’s time to do something more complex and interesting. Let’s discover how to get and print system routing table like “ip route” command does.
Simple Linux character device driver
A character device is one of the simplest ways to communicate with a module in the Linux kernel. These devices are presented as special files in a /dev directory and support direct reading and writing of any data, byte by byte, like a stream. Actually most of the pseudo-devices in /dev are a character device: serial ports, modems, sound, and…