Introduction To Linux Kernel
Introduction To Linux Kernel
Ali MEZGANI
Introduction
In a Unix system, several concurrent processes attend to
different tasks. Each process asks for system resources, be it
computing power, memory, network connectivity, or some other
resource. The kernel is the big chunk of executable code in charge
of handling all such requests.
Memory management
The computer's memory is a major resource, and the policy used
to deal with it is a critical one for system performance. The
kernel builds up a virtual addressing space for any and all
processes on top of the limited available resources. The different
parts of the kernel interact with the memory-management
subsystem through a set of function calls, ranging from the
simple malloc/free pair to much more exotic functionalities.
Kernel subsystems
Filesystems
Unix is heavily based on the filesystem concept; almost
everything in Unix can be treated as a file. The kernel builds a
structured filesystem on top of unstructured hardware, and the
resulting file abstraction is heavily used throughout the whole
system. In addition, Linux supports multiple filesystem types,
that is, different ways of organizing data on the physical medium.
For example, diskettes may be formatted with either the Linux-
standard ext2 filesystem or with the commonly used FAT
filesystem.
Kernel subsystems
Device control
Almost every system operation eventually maps to a physical
device. With the exception of the processor, memory, and a very
few other entities, any and all device control operations are
performed by code that is specific to the device being addressed.
That code is called a device driver. The kernel must have
embedded in it a device driver for every peripheral present on a
system, from the hard drive to the keyboard and the tape
streamer. This aspect of the kernel's functions is our primary
interest in this book.
Kernel subsystems
Networking
Networking must be managed by the operating system because
most network operations are not specific to a process: incoming
packets are asynchronous events. The packets must be collected,
identified, and dispatched before a process takes care of them. The
system is in charge of delivering data packets across program and
network interfaces, and it must control the execution of programs
according to their network activity. Additionally, all the routing and
address resolution issues are implemented within the kernel.
Kernel features
Individual module:
Character devices
A character (char) device is one that can be accessed as a stream of
bytes (like a file); a char driver is in charge of implementing this
behavior. Such a driver usually implements at least the open, close,
read, and write system calls. The text console (/dev/console) and
the serial ports (/dev/ttyS0 and friends) are examples of char
devices, as they are well represented by the stream abstraction
Devices and Modules
Block devices
Like char devices, block devices are accessed by filesystem nodes
in the /dev directory. A block device is something that can host a
filesystem, such as a disk. In most Unix systems, a block device can
be accessed only as multiples of a block, where a block is usually one
kilobyte of data or another power of 2. Linux allows the application to
read and write a block device like a char device -- it permits the
transfer of any number of bytes at a time. As a result, block and char
devices differ only in the way data is managed internally by the
kernel, and thus in the kernel/driver software interface.
Devices and Modules
Network interfaces
A network interface is in charge of sending and receiving data
packets, driven by the network subsystem of the kernel, without
knowing how individual transactions map to the actual packets
being transmitted.
int init_module(void)
{
printk(KERN_INFO "Hello world.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world.\n");
}
Module “hello world”
#hello.c Makefile
obj-m += hello.o
all:
make -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
make -C /lib/modules/`uname -r`/build M=`pwd` clean
Module “hello world”
$ make && sudo insmod hello
$ grep hello /proc/modules
$ sudo tail –n 1 /var/log/message
http://www.tldp.org/HOWTO/Module-HOWTO/index.html
http://www.xml.com/ldd/chapter/book/