Understanding of Linux device driver development

0 Shares 0 Flares ×


Device drivers cover a significant segment of the modern software market. These are peculiar programs used to connect hardware with user applications, so they are crucial for all embedded systems and IoT solutions. 

Interest in writing drivers for Linux is steadily growing as the popularity of this operating system also increases. Linux is a cross-platform operating system, which code is mostly hardware-agnostic, and most users (fortunately) may not know anything about its hardware features. For the most part, the features of each hardware platform are hidden in the implementation of the drivers that make it possible for the OS to work on this platform. 

The role of device drivers 

To define a Linux device driver, one can say that this is a kernel module written in the C language and transferring data from hardware to an OS and vice versa. Drivers are loaded at boot time or by request.   

Embedded software providers offer a separate service — Linux driver development. Why is it needed? The essence is that any embedded solution is combined of hardware and software.  

Hardware elements include a microprocessor (this is the core part on which the user software runs), and third-party devices (e.g., cameras or scanners). To make these devices function as intended by interacting with the user software, you need drivers. These small pieces of software are like bridges that make hardware and software understand each other. For instance, a video card driver is needed for a computer display to render images so that users could see video and graphics in the screen. 

Device drivers play a special role in the Linux kernel. They process a certain part of the requests to the hardware of the Linux kernel through a well-organized internal interface. Features of the operation of each specific device are completely hidden in the driver code.  

User requests are sent through a standard set of system calls, which is independent of a particular driver. These requests are mapped to functions specific for each hardware that control real devices. The programming interface is implemented in such a way that drivers can be built separately from the kernel, and built into the running kernel as needed. This feature of Linux drivers is called modularity and greatly simplifies the process of driver coding and managing. 

Thus, Linux drivers can be created as modules that are installed into the kernel as needed, or they can be built into the kernel immediately. Customers should discuss the most appropriate option with an embedded software company.  

Device and module classes 

In Unix (a family of operating systems from which Linux is originated), devices are grouped into three classes: 

  • Character devices. They can be represented as a stream of bytes (like a file). Such drivers implement at least the open(), close(), read(), and write() system calls. The text console (/dev/console) and serial ports (/dev/ttyS0 and similar) are examples of character devices, as they are perfectly represented through the thread abstraction. They are accessed through special files called device interfaces, which are usually located in the /dev directory. The difference between a character device and a file is that when you open a regular file, you can move forward or backward through it, while a character device is a serial data channel.  
  • Block devices. They typically host file systems. You can access block devices through special interface files. On most Unix systems, they can only be represented as a set of blocks. The block size is a multiple of a power of two and is often equal to one kilobyte of data. Linux allows applications to read and write to block devices as well as character ones.  
  • Network interfaces. To transmit information over a network, you need a network device that interacts with another device. Traditionally, the network interface is implemented on the hardware basis, however an entire software implementation is also possible.  

Each module supports for one of these classes, and is thus subdivided into character, block, and network device modules. It should be noted that this classification is flexible, meaning that software developers can create a large module comprising various drivers in one piece of code. However, a more correct programming style implies the creation of different modules for each new functionality they add, as fragmentation is a key element of scalability and extensibility. 

On Linux, you can create other classes of modules as well. Every module class provides an interface for demonstrating a specific type of device. So, there can be modules of the USB CAN-bus, serial port, etc. 

Why use Linux? 

Open source 

Linux is an open-source operating system. This is convenient, especially for people who write code or need to make changes in their system operation. Linux is also free to install and use, unlike Windows or Mac, so it can be a great alternative for those who are on a budget but need a system that can adapt to their needs. 


One of the best things about Linux is that it is extremely secure. Since it’s an open-source OS, there are developers around the world who keep an eye on viruses and potential threats. This way, when the code needs to be updated or changed, it can be done in no time. Another reason is that since there are relatively fewer Linux users than Windows users, it is not cost-effective to create viruses for this system. Therefore, infection of the system with malware is minimized. 


Since Linux does not require antivirus software to be installed, a lot of computer resources are not used, making the system faster. On top of that, Linux is faster than Windows due to its comparatively simpler user interface. 


All the Linux insides are completely visible: system components and their interaction are not only available for study, but also thoroughly and fully documented. This means that not only a ready-made Linux specialist can understand the causes of any problem that has arisen, but anyone who carefully reads the documentation and analyzes the situation. Therefore, answers to 99% of Linux questions, including those about driver development, are immediately found on the Internet. The rest of the questions can be asked directly to the developers — and they will be happy to answer. 

0 Shares Twitter 0 Facebook 0 Google+ 0 LinkedIn 0 Email -- 0 Flares ×
The following two tabs change content below.
B2BNN Newsdesk
We marry disciplined research methodology and extensive field experience with a publishing network that spans globally in order to create a totally new type of publishing environment designed specifically for B2B sales people, marketers, technologists and entrepreneurs.