SlideShare une entreprise Scribd logo
1  sur  29
© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Introduction to Linux Drivers
2© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What to Expect?
After this session, you would know
W's of Linux Drivers
Ecosystem of Linux Drivers
Types of Linux Drivers
Vertical & Horizontal Driver Layering
Various Terminologies in vogue
Linux Driver related Commands & Configs
Using a Linux Driver
Our First Linux Driver
3© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of Linux Drivers
What is a Driver?
What is a Linux Driver?
Is Linux Device Driver = Linux Driver?
Why we need a Driver?
What are the roles of Linux Driver?
4© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Functions of an OS
Process / Time / Processor Management
Memory Management
Device I/O Management
Storage Management
Network Management
5© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Linux as an OS
So, Linux also has the same structure
Visually, can be shown as
6© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Linux Driver Ecosystem
bash gvim X Server gcc firefox
`
Process
Management
ssh
Memory
Management
File Systems
Device
Control
Networking
Architecture
Dependent
Code
Character
Drivers
&
Friends
Memory
Manager
Filesystem
Layer
Block Layer
& Drivers
Network
Subsystem
Interface
Drivers
Concurrency
MultiTasking
Virtual
Memory
Files & Dirs:
The VFS
Ttys &
Device Access
Connectivity
CPU Memory
Disks &
CDs
Consoles,
etc
Network
Interfaces
Hardware Protocol Layers like PCI, USB, I2C, RS232, ...
7© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Kernel Source Organization
/usr/src/linux/
net
drivers
block
fs
mm
init
arch/<arch>
char mtd/ide net pci ...usbserial
include
asm-<arch>linux
kernel ipc lib scripts toolsscripts
crypto firmware security sound ...
8© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of a Module?
Hot plug-n-play Driver
Dynamically Loadable & Unloadable
Linux – the first OS to have such a feature
Later many followed suit
Enables fast development cycle
File: <module>.ko (Kernel Object)
<module>.o wrapped with kernel signature
Std Modules Path
/lib/modules/<kernel version>/kernel/...
Module Configuration: /etc/modprobe.conf
9© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Module Commands
Typically needs root permission
Resides in /sbin
Operates over the kernel-module i/f
Foundation of Driver Development
Need to understand thoroughly
10© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Listing Modules
Command: lsmod
Fields: Module, Size, Used By
Kernel Window: /proc/modules
Are these listed modules static or dynamic?
11© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Loading Modules
Command: insmod <module_file>
Go to modules directory and into fs/vfat
Try: insmod vfat.ko
12© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Unloading Modules
Command: rmmod <module_name>
Try: rmmod fat
13© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Auto Loading Modules
Command: modprobe <module_name>
Try: modprobe vfat
14© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Kernel Windows
Through virtual filesystems
/proc
/sys
Command: cat <window_file>
System Logs: /var/log/messages
Command:
tail /var/log/messages
dmesg | tail
15© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Other Useful Commands
Disassemble: objdump -d <object_file>
List symbols: nm <object_file>
16© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Command Summary
lsmod
insmod
modprobe
rmmod
dmesg
objdump
nm
17© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The First Linux Driver
18© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Kernel's C
Normal C but without access to
Standard Headers (/usr/include)
Standard Libraries (/usr/lib)
Then, what?
Kernel Headers @ <kernel src>/include
Kernel Function Collection @
<kernel src>/kernel
<kernel src>/ipc
<kernel src>/lib
gcc need to be tuned to compile “Kernel C”
Kernel C is a beautiful example of implementing object
oriented code using pure C
19© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Module Constructor
static int __init mfd_init(void)
{
...
return 0;
}
module_init(mfd_init);
20© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Module Destructor
static void __exit mfd_exit(void)
{
...
}
module_exit(mfd_exit);
21© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
printk – Kernel's printf
Header: <linux/kernel.h>
Arguments: Same as printf
Format Specifiers: All as in printf, except float & double related
Additionally, a initial 3 character sequence for Log Level
KERN_EMERG "<0>" /* system is unusable */
KERN_ALERT "<1>" /* action must be taken immediately */
KERN_CRIT "<2>" /* critical conditions */
KERN_ERR "<3>" /* error conditions */
KERN_WARNING "<4>" /* warning conditions */
KERN_NOTICE "<5>" /* normal but significant condition */
KERN_INFO "<6>" /* informational */
KERN_DEBUG "<7>" /* debug-level messages */
22© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Module Constructor (revisited)
static int __init mfd_init(void)
{
printk(KERN_INFO "mfd registered");
...
return 0;
}
module_init(mfd_init);
23© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Module Destructor (revisited)
static void __exit mfd_exit(void)
{
printk(KERN_INFO "mfd deregistered");
...
}
module_exit(mfd_exit);
24© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Other Basics & Ornaments
Basic Headers
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Anil Kumar Pugalia");
MODULE_DESCRIPTION("First Device Driver");
25© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Building the Module
For building our driver, it needs
The Kernel Headers for Prototypes
The Kernel Functions for Functionality
The Kernel Build System & the Makefile for Building
Two options to Achieve
1. Building under Kernel Source Tree
Put our driver appropriately under drivers folder
Edit corresponding Kconfig(s) & Makefile to include our
driver
2. Create our own Makefile to do the right invocation
26© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Our Makefile
ifeq (${KERNELRELEASE},)
KERNEL_SOURCE := <kernel source directory path>
PWD := $(shell pwd)
default:
$(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) clean
else
obj-m += <module>.o
endif
27© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Try out your First Linux Driver
28© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What all have we learnt?
W's of Linux Drivers
Ecosystem of Linux Drivers
Types of Linux Drivers
Vertical & Horizontal Driver Layering
Various Terminologies in vogue
Linux Driver related Commands & Configs
Using a Linux Driver
Our First Linux Driver
29© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Any Queries?

Contenu connexe

Tendances

Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
Houcheng Lin
 
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
Varun Mahajan
 

Tendances (20)

Character Drivers
Character DriversCharacter Drivers
Character Drivers
 
Linux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewLinux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver Overview
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
I2c drivers
I2c driversI2c drivers
I2c drivers
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New Hardware
 
An introduction to the linux kernel and device drivers (NTU CSIE 2016.03)
An introduction to the linux kernel and device drivers (NTU CSIE 2016.03)An introduction to the linux kernel and device drivers (NTU CSIE 2016.03)
An introduction to the linux kernel and device drivers (NTU CSIE 2016.03)
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
Linux dma engine
Linux dma engineLinux dma engine
Linux dma engine
 
Process scheduling linux
Process scheduling linuxProcess scheduling linux
Process scheduling linux
 
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
 
Part 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module ProgrammingPart 02 Linux Kernel Module Programming
Part 02 Linux Kernel Module Programming
 
Linux Internals - Interview essentials - 1.0
Linux Internals - Interview essentials - 1.0Linux Internals - Interview essentials - 1.0
Linux Internals - Interview essentials - 1.0
 
linux device driver
linux device driverlinux device driver
linux device driver
 
Bootloaders
BootloadersBootloaders
Bootloaders
 
Memory management in Linux kernel
Memory management in Linux kernelMemory management in Linux kernel
Memory management in Linux kernel
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
 
Kdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysisKdump and the kernel crash dump analysis
Kdump and the kernel crash dump analysis
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 

En vedette (17)

File System Modules
File System ModulesFile System Modules
File System Modules
 
Block Drivers
Block DriversBlock Drivers
Block Drivers
 
References
ReferencesReferences
References
 
Interrupts
InterruptsInterrupts
Interrupts
 
SPI Drivers
SPI DriversSPI Drivers
SPI Drivers
 
Serial Drivers
Serial DriversSerial Drivers
Serial Drivers
 
USB Drivers
USB DriversUSB Drivers
USB Drivers
 
Embedded C
Embedded CEmbedded C
Embedded C
 
gcc and friends
gcc and friendsgcc and friends
gcc and friends
 
Platform Drivers
Platform DriversPlatform Drivers
Platform Drivers
 
Audio Drivers
Audio DriversAudio Drivers
Audio Drivers
 
Video Drivers
Video DriversVideo Drivers
Video Drivers
 
Kernel Programming
Kernel ProgrammingKernel Programming
Kernel Programming
 
Low-level Accesses
Low-level AccessesLow-level Accesses
Low-level Accesses
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
BeagleBoard-xM Bootloaders
BeagleBoard-xM BootloadersBeagleBoard-xM Bootloaders
BeagleBoard-xM Bootloaders
 
File Systems
File SystemsFile Systems
File Systems
 

Similaire à Introduction to Linux Drivers

Cooking security sans@night
Cooking security sans@nightCooking security sans@night
Cooking security sans@night
jtimberman
 
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux DriversMobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
Anil Kumar Pugalia
 
Introduction to Embedded Systems
Introduction to Embedded SystemsIntroduction to Embedded Systems
Introduction to Embedded Systems
Anil Kumar Pugalia
 
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
LynellBull52
 

Similaire à Introduction to Linux Drivers (20)

BeagleBoard-xM Booting Process
BeagleBoard-xM Booting ProcessBeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
 
Processes
ProcessesProcesses
Processes
 
Quick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIOQuick and Easy Device Drivers for Embedded Linux Using UIO
Quick and Easy Device Drivers for Embedded Linux Using UIO
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
Symm.63
Symm.63Symm.63
Symm.63
 
Cooking security sans@night
Cooking security sans@nightCooking security sans@night
Cooking security sans@night
 
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux DriversMobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
 
Reducing the boot time of Linux devices
Reducing the boot time of Linux devicesReducing the boot time of Linux devices
Reducing the boot time of Linux devices
 
IBM Lotusphere 2012 Show301: Leveraging the Sametime Proxy to support Mobile ...
IBM Lotusphere 2012 Show301: Leveraging the Sametime Proxy to support Mobile ...IBM Lotusphere 2012 Show301: Leveraging the Sametime Proxy to support Mobile ...
IBM Lotusphere 2012 Show301: Leveraging the Sametime Proxy to support Mobile ...
 
Chapter17 Using SMPE.ppt
Chapter17 Using SMPE.pptChapter17 Using SMPE.ppt
Chapter17 Using SMPE.ppt
 
Embedded Applications
Embedded ApplicationsEmbedded Applications
Embedded Applications
 
Damn Simics
Damn SimicsDamn Simics
Damn Simics
 
SR-IOV Introduce
SR-IOV IntroduceSR-IOV Introduce
SR-IOV Introduce
 
Introduction to Embedded Systems
Introduction to Embedded SystemsIntroduction to Embedded Systems
Introduction to Embedded Systems
 
TWS 8.6 new features (from the 2013 European Tour)
TWS 8.6 new features (from the 2013 European Tour)TWS 8.6 new features (from the 2013 European Tour)
TWS 8.6 new features (from the 2013 European Tour)
 
리눅스 드라이버 #2
리눅스 드라이버 #2리눅스 드라이버 #2
리눅스 드라이버 #2
 
Release notes 3_d_v61
Release notes 3_d_v61Release notes 3_d_v61
Release notes 3_d_v61
 
Linux scheduler
Linux schedulerLinux scheduler
Linux scheduler
 
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
© 2007 Cisco Systems, Inc. All rights reserved. Cisco Public 1.docx
 
SHARE.ORG Orlando 2015
SHARE.ORG Orlando 2015SHARE.ORG Orlando 2015
SHARE.ORG Orlando 2015
 

Plus de Anil Kumar Pugalia (20)

File System Modules
File System ModulesFile System Modules
File System Modules
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
System Calls
System CallsSystem Calls
System Calls
 
Embedded Software Design
Embedded Software DesignEmbedded Software Design
Embedded Software Design
 
Playing with R L C Circuits
Playing with R L C CircuitsPlaying with R L C Circuits
Playing with R L C Circuits
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Functional Programming with LISP
Functional Programming with LISPFunctional Programming with LISP
Functional Programming with LISP
 
Power of vi
Power of viPower of vi
Power of vi
 
"make" system
"make" system"make" system
"make" system
 
Hardware Design for Software Hackers
Hardware Design for Software HackersHardware Design for Software Hackers
Hardware Design for Software Hackers
 
RPM Building
RPM BuildingRPM Building
RPM Building
 
Linux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
 
Linux Network Management
Linux Network ManagementLinux Network Management
Linux Network Management
 
System Calls
System CallsSystem Calls
System Calls
 
Timers
TimersTimers
Timers
 
Threads
ThreadsThreads
Threads
 
Synchronization
SynchronizationSynchronization
Synchronization
 
Processes
ProcessesProcesses
Processes
 
Signals
SignalsSignals
Signals
 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

Introduction to Linux Drivers

  • 1. © 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Introduction to Linux Drivers
  • 2. 2© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? After this session, you would know W's of Linux Drivers Ecosystem of Linux Drivers Types of Linux Drivers Vertical & Horizontal Driver Layering Various Terminologies in vogue Linux Driver related Commands & Configs Using a Linux Driver Our First Linux Driver
  • 3. 3© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of Linux Drivers What is a Driver? What is a Linux Driver? Is Linux Device Driver = Linux Driver? Why we need a Driver? What are the roles of Linux Driver?
  • 4. 4© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Functions of an OS Process / Time / Processor Management Memory Management Device I/O Management Storage Management Network Management
  • 5. 5© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Linux as an OS So, Linux also has the same structure Visually, can be shown as
  • 6. 6© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Linux Driver Ecosystem bash gvim X Server gcc firefox ` Process Management ssh Memory Management File Systems Device Control Networking Architecture Dependent Code Character Drivers & Friends Memory Manager Filesystem Layer Block Layer & Drivers Network Subsystem Interface Drivers Concurrency MultiTasking Virtual Memory Files & Dirs: The VFS Ttys & Device Access Connectivity CPU Memory Disks & CDs Consoles, etc Network Interfaces Hardware Protocol Layers like PCI, USB, I2C, RS232, ...
  • 7. 7© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Kernel Source Organization /usr/src/linux/ net drivers block fs mm init arch/<arch> char mtd/ide net pci ...usbserial include asm-<arch>linux kernel ipc lib scripts toolsscripts crypto firmware security sound ...
  • 8. 8© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of a Module? Hot plug-n-play Driver Dynamically Loadable & Unloadable Linux – the first OS to have such a feature Later many followed suit Enables fast development cycle File: <module>.ko (Kernel Object) <module>.o wrapped with kernel signature Std Modules Path /lib/modules/<kernel version>/kernel/... Module Configuration: /etc/modprobe.conf
  • 9. 9© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Module Commands Typically needs root permission Resides in /sbin Operates over the kernel-module i/f Foundation of Driver Development Need to understand thoroughly
  • 10. 10© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Listing Modules Command: lsmod Fields: Module, Size, Used By Kernel Window: /proc/modules Are these listed modules static or dynamic?
  • 11. 11© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Loading Modules Command: insmod <module_file> Go to modules directory and into fs/vfat Try: insmod vfat.ko
  • 12. 12© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Unloading Modules Command: rmmod <module_name> Try: rmmod fat
  • 13. 13© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Auto Loading Modules Command: modprobe <module_name> Try: modprobe vfat
  • 14. 14© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Kernel Windows Through virtual filesystems /proc /sys Command: cat <window_file> System Logs: /var/log/messages Command: tail /var/log/messages dmesg | tail
  • 15. 15© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Other Useful Commands Disassemble: objdump -d <object_file> List symbols: nm <object_file>
  • 16. 16© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Command Summary lsmod insmod modprobe rmmod dmesg objdump nm
  • 17. 17© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The First Linux Driver
  • 18. 18© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Kernel's C Normal C but without access to Standard Headers (/usr/include) Standard Libraries (/usr/lib) Then, what? Kernel Headers @ <kernel src>/include Kernel Function Collection @ <kernel src>/kernel <kernel src>/ipc <kernel src>/lib gcc need to be tuned to compile “Kernel C” Kernel C is a beautiful example of implementing object oriented code using pure C
  • 19. 19© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Module Constructor static int __init mfd_init(void) { ... return 0; } module_init(mfd_init);
  • 20. 20© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Module Destructor static void __exit mfd_exit(void) { ... } module_exit(mfd_exit);
  • 21. 21© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. printk – Kernel's printf Header: <linux/kernel.h> Arguments: Same as printf Format Specifiers: All as in printf, except float & double related Additionally, a initial 3 character sequence for Log Level KERN_EMERG "<0>" /* system is unusable */ KERN_ALERT "<1>" /* action must be taken immediately */ KERN_CRIT "<2>" /* critical conditions */ KERN_ERR "<3>" /* error conditions */ KERN_WARNING "<4>" /* warning conditions */ KERN_NOTICE "<5>" /* normal but significant condition */ KERN_INFO "<6>" /* informational */ KERN_DEBUG "<7>" /* debug-level messages */
  • 22. 22© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Module Constructor (revisited) static int __init mfd_init(void) { printk(KERN_INFO "mfd registered"); ... return 0; } module_init(mfd_init);
  • 23. 23© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Module Destructor (revisited) static void __exit mfd_exit(void) { printk(KERN_INFO "mfd deregistered"); ... } module_exit(mfd_exit);
  • 24. 24© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Other Basics & Ornaments Basic Headers #include <linux/module.h> #include <linux/version.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Anil Kumar Pugalia"); MODULE_DESCRIPTION("First Device Driver");
  • 25. 25© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Building the Module For building our driver, it needs The Kernel Headers for Prototypes The Kernel Functions for Functionality The Kernel Build System & the Makefile for Building Two options to Achieve 1. Building under Kernel Source Tree Put our driver appropriately under drivers folder Edit corresponding Kconfig(s) & Makefile to include our driver 2. Create our own Makefile to do the right invocation
  • 26. 26© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Our Makefile ifeq (${KERNELRELEASE},) KERNEL_SOURCE := <kernel source directory path> PWD := $(shell pwd) default: $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) modules clean: $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) clean else obj-m += <module>.o endif
  • 27. 27© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Try out your First Linux Driver
  • 28. 28© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? W's of Linux Drivers Ecosystem of Linux Drivers Types of Linux Drivers Vertical & Horizontal Driver Layering Various Terminologies in vogue Linux Driver related Commands & Configs Using a Linux Driver Our First Linux Driver
  • 29. 29© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?