41
M. Muztaba Fuad M. Muztaba Fuad Advanced Operating System Advanced Operating System Project Project Device Drivers Device Drivers

M. Muztaba Fuad Advanced Operating System Project Device Drivers

Embed Size (px)

Citation preview

Page 1: M. Muztaba Fuad Advanced Operating System Project Device Drivers

M. Muztaba FuadM. Muztaba Fuad

Advanced Operating System ProjectAdvanced Operating System Project

Device DriversDevice Drivers

Page 2: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 2

OverviewOverview• Basics

– Definitions

– What the OS books say?

• Linux way of doing things (Kernel 2.4)

– Check Linux Source code.

• Windows way of doing things

– Check Windows Source code (just kidding !).

• Write your own driver in Linux

– What you need to know?

– How to write?

– Things to remember

• Changes in Kernel 2.6

Page 3: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 3

Page 4: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 4

I/O Devices

• I/O devices are attached to the computer bus.• Each I/O device consists of a controller

subassembly to control the detailed operation of the physical device itself.

ProcessProcess

Abstract I/O Abstract I/O MachineMachine

BUSBUSBUSBUS

Device Device ControllerController

DeviceDevice

• Program to manage device controller• Supervisor mode software

• Program to manage device controller• Supervisor mode software

Page 5: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 5

Device Controller

BusyBusyBusyBusy DoneDoneDoneDone ErrorErrorErrorError …………..…………..

CommandCommandCommandCommand StatusStatusStatusStatus

DataDataDataData

LogicLogicLogicLogic

Page 6: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 6

Memory Access

Primary Primary MemoryMemoryPrimary Primary MemoryMemory

CPUCPUCPUCPU

ControllerControllerControllerController

DeviceDeviceDeviceDevice

Primary Primary MemoryMemoryPrimary Primary MemoryMemory

CPUCPUCPUCPU

ControllerControllerControllerController

DeviceDeviceDeviceDevice

ConventionalConventional DMADMA

Page 7: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 7

Device Addressing

Primary Primary MemoryMemoryPrimary Primary MemoryMemory

Device 0Device 0Device 0Device 0

Device 1Device 1Device 1Device 1

Device 2Device 2Device 2Device 2

Primary Primary MemoryMemoryPrimary Primary MemoryMemory

Device 0Device 0Device 0Device 0

Device 1Device 1Device 1Device 1

Device 2Device 2Device 2Device 2

Memory Address

Device Address

Memory Address

ConventionalConventional Memory Mapped I/OMemory Mapped I/O

Page 8: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 8

Device Independent I/O Driver

No Standard InterfaceNo Standard Interface Standard InterfaceStandard Interface

Page 9: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 9

Device Manager Abstraction

Device InterfaceDevice InterfaceDevice InterfaceDevice Interface

TerminalTerminalDriverDriver

TerminalTerminalDriverDriver

TerminalTerminalControllerControllerTerminalTerminalControllerController

PrinterPrinterDriverDriverPrinterPrinterDriverDriver

PrinterPrinterControllerController

PrinterPrinterControllerController

DiskDiskDriverDriverDiskDisk

DriverDriver

DiskDiskControllerController

DiskDiskControllerController

…….

read(….);

…….Common Device Common Device

InterfaceInterfaceCommon Device Common Device

InterfaceInterface

Page 10: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 10

Device Management Organization

Device ControllerDevice Controller

CommandCommandCommandCommand StatusStatusStatusStatus DataDataDataData

System Interface

Hardware Interface

Device Manager

Device IndependentDevice IndependentDevice IndependentDevice Independent

Device DependentDevice DependentDevice DependentDevice Dependent

FileFileManagerManager

ApplicationApplicationProcessProcess

Page 11: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 11

I/O Strategies

• Direct I/O with polling– The CPU is responsible for data transfer between

device and primary memory.– Slow data transfer.– Difficult to achieve effective CPU utilization

• Interrupt Driven I/O– The controller don’t needs to be checked for status

constantly.– Controller “interrupts” the device manager to indicate

when it finishes its operation.

Page 12: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 12

Polling I/O Read

read(….);read(….);

DataDataDataData

Device DriverDevice Driver

ReadRead functionfunctionReadRead functionfunction

Write functionWrite functionWrite functionWrite function

Device ControllerDevice Controller

CommandCommandCommandCommand StatusStatusStatusStatus DataDataDataData

Device Interface

Hardware Interface

1

234

Page 13: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 13

Interrupt Processing• When the kernel receives an interrupt from a particular

device, the kernel passes control to its corresponding interrupt handler

• Interrupt handlers do not belong to any single process context– Scheduler cannot place an interrupt handler in a run queue– Thus, interrupt handler cannot sleep, call the scheduler, be

preempted or raise faults or exceptions– As a result, most interrupt handlers are designed to execute

quickly• Interrupts are divided into top and bottom halves

– Top half sets up.– Bottom half performs the operation.

Page 14: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 14

Interrupt Driven I/O

Device DriverDevice Driver

Read functionRead functionRead functionRead function

Write functionWrite functionWrite functionWrite function

Device ControllerDevice Controller

CommandCommandCommandCommand StatusStatusStatusStatus DataDataDataData

Device Interface

HardwareInterface

read(….);read(….);

DataDataDataData

Device Status Table

Device Status Table

DeviceHandlerDeviceHandler

InterruptHandler

InterruptHandler

1

23

4

5

6

7

8

9

Page 15: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 15

Page 16: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 16

Linux Device Driver

Device DriversDevice DriversDevice DriversDevice Drivers

ModulesModulesModulesModules

Inte

rface

Inte

rface

Inte

rface

Inte

rface

KernelKernelKernelKernel

• Initial Unix implementations has the device drivers coded inside the kernel.– Problems ????

• Module is an independent software unit that can be loaded into the kernel dynamically at run time.– Helps to install new device without modifying the kernel.

• Kernel provides common interface for I/O system calls.

Page 17: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 17

Kernel Driver Initialization • Device files are more than half of the size of the kernel source.• fs/devices.c Defines all the device functions• /devices directory Holds all the device driver codes

– /devices/char– /devices/block

• Kernel driver initialization:– start_kernel init/main.c

• setup_arch arch/i386/kernel/setup.c– Sets up system variables, such as video type, root device etc.

• console_init driver/char/tty_io.c• init init/main.c

– do_basic_setup init/main.c» Initialize all bus sub system

– prepare_namespace init/do_mounts.c» Mount root and device file system

– do_initcalls init/main.c» All built in device driver is initialized which are registered with __initcall()

Page 18: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 18

Linux Device Driver• Most have been written by independent developers.• Typically implemented as loadable kernel modules.• Device special files

– Most devices are represented by device special files.

– Entries in the /dev directory that provide access to devices.– List of devices in the system can be obtained by reading the

contents of /proc/devices.

• Devices are grouped into classes– Three classes:

• Character Devices

• Block Devices

• Network Devices

– Members of each device class perform similar functions

Page 19: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 19

• Major and minor identification numbers– Used by device drivers to identify their devices– Devices that are assigned the same major identification

number are controlled by the same driver– Minor identification numbers enable the system to

distinguish between devices of the same class– /usr/src/linux/Documentation/devices.txt

Linux Device Driver

brw-rw----brw-rw---- 1 root disk 3, 1 May 10 2004 hda1 1 root disk 3, 1 May 10 2004 hda1brw-rw----brw-rw---- 1 root disk 3, 2 May 10 2004 hda2 1 root disk 3, 2 May 10 2004 hda2brw-rw----brw-rw---- 1 root disk 3, 3 May 10 2004 hda3 1 root disk 3, 3 May 10 2004 hda3

crw------- 1 root root 4, 0 Jan 30 2003 tty0crw------- 1 root root 4, 0 Jan 30 2003 tty0crw------- 1 root root 4, 1 Oct 31 14:55 tty1crw------- 1 root root 4, 1 Oct 31 14:55 tty1crw-r--r-- 1 root root 10, 135 Jan 30 2003 rtccrw-r--r-- 1 root root 10, 135 Jan 30 2003 rtc

Page 20: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 20

• Device special files are accessed via the virtual file system– System calls pass to the VFS, which in turn issues calls to

device drivers– Most drivers implement common file operations such as

read, write and seek

– To support tasks such as ejecting a CD-ROM tray or retrieving status information from a printer, Linux provides the ioctl system call

Linux Device Driver

Page 21: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 21

I/O Interface Layers

Page 22: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 22

Character Device I/O• Transmits data as a stream of bytes

• Represented by a structure that contains the driver name and a pointer to the driver’s file_operations structure– Maintains the operations supported by the device driver

– All registered drivers are referenced by a vector (major number)

• The file_operations structure – Stores functions called by the VFS when a system call accesses a device

special file

Driver 1Driver 1 Driver 2Driver 2 Driver 3Driver 3 Driver Driver nn…………

FileOperation

s

FileOperation

s

openopen

closeclose

readread

openopen

closeclose

readread

writewrite

seekseek

……....

chardevschardevs

Page 23: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 23

Block Device I/O• Block I/O subsystem

– Complex then character device• Buffering• Caching• Direct I/O and so on….

– Represented by block_device_operations• Different than file_operations• Extra operations for caching, buffering and queue management

• When data from a block device is requested, kernel first searches page cache– If found, data is copied to the process’s address space– Otherwise, typically added to a request queue– Direct I/O

• Enables driver to bypass kernel caches when accessing devices

• Some times, need to provide advanced algorithms for certain devices– Optimizing moving head storage

Page 24: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 24

Network Device I/O

• Network I/O– Accessed via the IPC subsystem’s socket interface.

– Network traffic can arrive at any time.• The read and write operations of a device special file are not

sufficient to access data from network devices

• Kernel uses net_device structures to describe network devices– No file_operations structure

• Packet processing– Complex.

– Depends on different issues.

Page 25: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 25

Unified Device Model• Attempts to simplify device management in the kernel• Relates device classes to system buses

– Helps support hot-swappable devices– Power management

• UDM defines structures to represent devices, device drivers, device classes, buses

BusBusNameName

DevicesDevices

DriversDrivers

List ofList ofDriversDrivers

List ofList ofDevicesDevices

Page 26: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 26

Kernel Module• A new kernel module can be added on the fly

– While the OS is still running.– No need to re-compile the kernel.

• They are not user program.• Some times they are also called “Loadable Kernel

Modules”• Several types of kernel module:

– Device Drivers– Virtual terminals– Interpreters

• Only be controlled by super user.• All installed modules:

– /lib/modules/KERNEL_VERSION

Page 27: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 27

Modules

ModuleModule KernelKernel

init_module()init_module()init_module()init_module() registerregisterregisterregister

unregisterunregisterunregisterunregistercleanup_module()cleanup_module()cleanup_module()cleanup_module()

insmoinsmodd

rmmormmodd

printk(..)printk(..)printk(..)printk(..)

……..……..……..……..

lsmodlsmod

Page 28: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 28

Page 29: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 29

Windows Device Driver

Page 30: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 30

Windows Device Driver

• Organized into device driver stack.

• Device driver with different level of services.

• Device Object– Stores data for device

• Driver Object– Pointers to common driver routines

• Plug and Play (PnP)– Dynamically add new hardware devices

Page 31: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 31

Windows Driver Model

• Windows Driver Model (WDM)– Bus driver

• Interact directly with bus (PCI, SCSI)• Mandatory one bus driver per bus• Provide generic functions for devices on bus

– Filter driver• Optional• Modify device actions: encryption• Add features: security checks

– Function driver• Implements main function of device

Page 32: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 32

Page 33: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 33

Things to do

• Understand the device characteristic and supported commands.

• Map device specific operations to Linux file operation• Select the device name (user interface)

– /dev/virtual_device• Select a major and minor number (a device special file

creation) for VFS interface• Implement interface subroutines• Compile the device driver• Install the device driver module.• Or Rebuild (compile) the kernel

Page 34: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 34

Interface between Kernel & Driver

User ProcessUser Process e.g. open(“/dev/xyz”, “r”)

VFS switchVFS switch

KernelKernel

Driver Driver routine routine

registered registered with with

VFS through VFS through file_operatinfile_operatin

s s structure structure

xyz_open(){xyz_open(){……}}

xyz_close(){xyz_close(){……}}

struct file_operatins fops={struct file_operatins fops={xyz_open();xyz_open();xyz_close();xyz_close();……};};

int init_module(void){int init_module(void){register_device(major_number, &fops);register_device(major_number, &fops);……}}……..

xyz.c

Page 35: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 35

file_operationfile_operation Structure• From the file /usr/src/linux-2.4/include/linux/fs.hstruct file_operations {struct module *owner;loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char *, size_t, loff_t *);ssize_t (*write) (struct file *, const char *, size_t, loff_t *);int (*readdir) (struct file *, void *, filldir_t);unsigned int (*poll) (struct file *, struct poll_table_struct *);int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);int (*mmap) (struct file *, struct vm_area_struct *);int (*open) (struct inode *, struct file *);int (*flush) (struct file *);int (*release) (struct inode *, struct file *);int (*fsync) (struct file *, struct dentry *, int datasync);int (*fasync) (int, struct file *, int);int (*lock) (struct file *, int, struct file_lock *);ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); };

Page 36: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 36

Things to remember

• Careful ! You are programming in kernel mode !– Can’t use any standard functions.– Can only use kernel functions, which are the functions you

can see in /proc/ksyms.– Version.

• Compile– Need to use special gcc options.

• Device special filemknod /dev/device_name device_type major_number minor_number

Page 37: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 37

Lets check our driver code

Page 38: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 38

Kernel 2.6.x

• Creation of Unified Device Model is one of the most important changes in 2.6 kernel.

• Expanded the limitation of the major number from 255 to 4095.

• Now more than one million sub devices per type is allowed.

• PnP support.• Module subsystem is changed:

– kbuild tool.– New file naming concept.

• Modules now has “.ko” extension.

Page 39: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 39

Loooooooong way to go.….

• We can propose a course on device driver as after all that we didn’t touch the following:– I/O Buffering– I/O Caching– Block devices– Network devices.– Module programming– Stacked Modules– Controller interaction– Interrupt processing

Page 40: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 40

References

• OS books:– Operating System Concepts by Silberschatz & Galvin

– Operating System by Garry Nutt.

• Linux Device Driver book– http://www.xml.com/ldd/chapter/book/

• Linux Programmer’s Guide

– http://www.tldp.org/LDP/lpg/index.html

• The Linux Kernel Module Programming Guide – http://www.tldp.org/LDP/lkmpg/2.4/html/index.html

– http://www.tldp.org/LDP/lkmpg/2.6/html/index.html

• Device Driver Development for Microsoft Windows– http://www.chsw.com/ddk/

Page 41: M. Muztaba Fuad Advanced Operating System Project Device Drivers

Slide 41

Thanks