Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Outline
Concept Kernel Module Char Device Driver Interrupt Handling I/O Management Allocating Memory Block Device Driver Network Device Driver
Concept
The role of device driver
To allow interaction with hardware devices. Providing mechanism, not policy.
What capabilities are to be provided? Mechanism How those capabilities can be used? Policy
Important concepts
User space vs. kernel space
Concept (Cont.)
Execution paths: From user to kernel
APPLICATION (mpg123) Decoder HTTP Network Initialization I/O MATH LIBRARY sin pow log tan
_isnan fprintf valloc socket malloc _sbrk vfprintf write read scanf qsort rand wait STANDARD C LIBRARY
Networking
Memory Management
Filesystems
Device Control
Process Management
b OPERATING SYSTEM
Network Subsystem
Memory Manager
Character Devices
Disk
Network Interfaces
Memory
CPU
Concept (Cont.)
Classes of devices
Characters devices
Can be accessed as a stream of bytes. Such a driver usually implements at least the open, close, read, and write system calls. Example: RTC driver.
Block devices
A device (e.g., a disk) that can host a filesystem. Example: Ramdisk driver.
Network interfaces
In charge of sending and receiving data packets, driven by the network subsystem of the kernel. Example: Network card driver.
Concept (Cont.)
A device driver is a kernel module. A kernel module is a device driver? Not necessarily so.
Example: ext3 file system module
Outline
Concept Kernel Module Character Device Driver Interrupt Handling I/O Management Allocating Memory Block Device Driver Network Device Driver
Kernel Module
The first kernel module Hello, world
#include <linux/init.h> #include <linux/module.h> static int hello_init(void) { printk(KERN_ALERT Hello, world\n); return 0; } static void hello_exit(void) { printk(KERN_ALERT Goodbye, cruel world\n); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(GPL);
Kernel Module
Run in kernel space. Register itself in order to serve future requests. Linked only to the kernel, and the only functions it can call are the ones exported by the kernel.
module_init adds a special section to the modules object code stating where the modules initialization function is to be found.
In cleanup function, youre supposed to unregister interfaces and return all resources to the system. If your module is built directly into kernel or the kernel is configured to disallow the unloading of modules, functions marked __exit are simply discarded.
KERN_EMERG: Emergency message KERN_ALERT: Alert message KERN_CRIT: Critical situation KERN_ERR: Error report KERN_WARNING: Warning message KERN_NOTICE: Noticeable message KERN_INFO: Information KERN_DEBUG: Debug message
Outline
Concept Kernel Module Char Device Driver Interrupt Handling I/O Management Allocating Memory Block Device Driver Network Device Driver
Device type
Major number
Minor number
The kernel compares the name to the registered name for the major number, if they differ, -EINVAL is returned.
filp is the file pointer and count is the size of the requested data transfer. The buff points to the user buffer holding the data to be written or the empty buffer where the newly read data should be placed. offp is a pointer to a "long offset type" object that indicates the file position the user is accessing.
Where,
to the address that copy data to from the address that copy data from count data count
Note that,
Read method is used to transfer data from kernel to user copy_to_user(). Write method is used to transfer data from user to kernel copy_from_user().
close(fd); return 0;
}
Release method