Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to Linux Drivers

36,445 views

Published on

Published in: Technology

Introduction to Linux Drivers

  1. 1. © 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Introduction to Linux Drivers
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 12© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Unloading Modules Command: rmmod <module_name> Try: rmmod fat
  13. 13. 13© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Auto Loading Modules Command: modprobe <module_name> Try: modprobe vfat
  14. 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. 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. 16© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Command Summary lsmod insmod modprobe rmmod dmesg objdump nm
  17. 17. 17© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The First Linux Driver
  18. 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. 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. 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. 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. 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. 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. 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. 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. 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. 27© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Try out your First Linux Driver
  28. 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. 29© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?

×