Embedded System Programming Introduction to Device Drivers
What are device drivers? • Software interfaces to hardware resources in the kernel – Mirrors variety of hardware resources – Can change constantly – Will require reconfiguration – Different interfaces into the same devices – Require kernel resident programs – Uses module interface
Split level kernel User programs and applications Process mgment Memory mgment Multi-tasking V Memory Achture code Memory CPU Mang. RAM File systems Device Control Files & Dirs TTYS & devs Fs types Block Dvc Character Devices Disks & CDs Console S Ports Application level Connectivity Kernel level Kernel parts features Networks software If drivers hardware Networking Network Interfaces Hardware level
Types of device driver • There are some general types or characteristics of device drivers – Character devices • Serial data stream – Block devices • Accessed via blocked data stream – Network interfaces • Although serial, has no mapping into file system
Recognising device drivers • Apart from network devices most drivers appear like file in the Unix system • ls –l /dev – crw-r--r-- 1 root 10, 134 Jun 7 1996 apm_bios – brw-rw---- 1 root floppy 2, 0 May 14 1996 fd 0 Device type Major Minor number File Name
Character Device Drivers • Data is a serial stream • No random access • Even a block devices can be a character one! – Printers
Block Devices • • Data is read in blocks Block size depends upon the device Random access is supported Files systems can only be mounted block devices • Block devices can have character interfaces – fsck works on character “raw” interface to file system
Network Interfaces • Network interfaces act in some ways like a serial character orientated device, however they don’t exist in the file system • For example eth 0 is queried through the ifconfig command • Weirdly, network devices can support block features for example network mounted file systems
Character & Block Device number assignment • Character devices – 1 Memory – 4 Terminal – 6 Parallel interfaces – 7 Vitual consoles • Block devices – 1 RAM disk – 2 Floppy disk – 3 IDE disk – 8 SCSI disk – 9 SCSI tapes – 10 Bus mice – 11 SCSI CD-ROM – 12 QIC 02 Tape – 13 PC speaker driver – 13 XT 8 -bit hard disk
Loadable modules • Historically there has been a split between monolithic kernels – All code is contained in the kernel, fixed at build or boot time • This means that kernel can be fast and efficient • And Micro kernels – Small lightweight kernel that load features in at run time, when required • The kernel is smaller, easier to port, the feaure list of more flexible • Linux loadable modules gives a compromise position – Mainly monolithic kernel but can load modules in when needed – The use of modules for devices is clearly important
Kernel Modules • The provision of kernel modules allows code to be introduced into a running kernel. • This requires the kernel to be built with this capability, it also requires the commands – Insmod and rmmod (plus lsmod, depmod and modprobe) • Modules can be loaded on demand automatically.
Module programming • The 2. 6 kernel has changed the way module programming is handled. – We will look at this later on – for the moment we will deal with 2. 4 • Modules under 2. 4 are just ordinary unlinked object files (cc –o) – Although they must link with the kernel and can bring it down, so they are rather special.
Module programs • Requires header files – These will include others • Needs an init_module and cleanup_module function • The return value is important – Only return 0. • Use of printk
Using macros • Use of init & exit macros • Use of __init and __initdata
Features of kernel programming • Don’t use libraries – only kernel code – Printk not printf • Set use of headers – /usr/include/asm & /usr/include/linux • Beware of namespace pollution – Code shares names with the kernel – Use static