O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Introduction to Linux Drivers

59.576 visualizações

Publicada em

Publicada em: Tecnologia
  • Entre para ver os comentários

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?

×