150 likes | 292 Views
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
E N D
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 Application level Kernel level Process mgment Memory mgment File systems Device Control Networking Kernel parts Multi-tasking Files & Dirs Connectivity V Memory TTYS & devs features Fs types Networks software Memory Mang. Achture code Character Devices Block Dvc If drivers hardware Hardware level Disks & CDs Console S Ports Network Interfaces CPU RAM
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 root 10, 134 Jun7 1996 apm_bios • brw-rw---- 1 rootfloppy 2, 0 May 14 1996 fd0 File Name Device type Minor number Major number
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 eth0 is queried through the ifconfig command • Weirdly, network devices can support block features for example network mounted file systems
Character devices 1 Memory 4 Terminal 6 Parallel interfaces 7 Vitual consoles 9 SCSI tapes 10 Bus mice 12 QIC02 Tape 13 PC speaker driver Block devices 1 RAM disk 2 Floppy disk 3 IDE disk 8 SCSI disk 11 SCSI CD-ROM 13XT 8-bit hard disk Character & Block Device number assignment
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.
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 Module programs
Use of init & exit macros Use of __init and __initdata Using macros
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