Linux Kernel Programming

  • Uploaded by: Neependra Khare
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Linux Kernel Programming as PDF for free.

More details

  • Words: 819
  • Pages: 20
Linux kernel programming Vandana Salve, LSI, Pune

Contents     

Introduction to Linux systems Kernel modules Writing kernel modules Devices in Linux Writing sample character driver

A Linux system is…      

Hardware Boot Loader Linux Kernel Linux kernel modules Root file systems User-mode programs



Boot Loader 

X86 Example  



GRUB – Grand Unified boot loader Configuration file /boot/grub/grub.conf

Kernel Binary image 

/boot/vmlinuz-VERSION



Kernel Modules  



Are dynamically loaded as needed by the kernel Once loaded, becomes part of kernel and has full access to all kernel functions /lib/modules/VERSION 

The search path for kernel modules



Root file system 

The root “/” is a global hierarchical namespace that contains several types of files     

Regular files Directories Symbolic links Character/Block special files Named Pipes (FIFOs)

Kernel modules 







Linux has the ability to extend at runtime the set of features offered by the kernel Each piece of code that can be added at runtime is called a “module”. Each module is made up of object code that can be dynamically linked to the running kernel by “insmod” and can be unlinked by “rmmod” program. Once loaded, becomes part of kernel and has full access to all kernel functions.

Utilities 

Lsmod  



Display list of currently loaded modules /proc/modules

Modinfo   

Display module information /sbin/modinfo Filename,description,author,license etc



Insmod 



Rmmod 



Insert a module Remove a module

Modprobe  



Loads modules plus any module dependencies Uses info provided in /lib/modules/Version/modules.dep Updated by depmod command

Writing a simple kernel module /* hello-1.c - The simplest kernel module. */ #include /* Needed by all modules */ #include /* Needed for KERN_INFO */ int init_module(void) { printk(KERN_INFO "Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_INFO "Goodbye world 1.\n"); } MODULE_LICENSE(“GPL”); MODULE_AUTHOR(DRIVER_AUTHOR);//author MODULE_DESCRIPTION(“HELLO WORLD Module”);//what this module does

Makefile for a basic kernel module (2.6kernel) obj-m += hello-1.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean    

Refer Documentation/kbuild/modules.txt : how to build modules Use modinfo, #modinfo hello-1.ko Use lsmod to list the module inserted Check /var/log/messages



Passing command line arguments to the module 

Example

Device drivers 

Option 1 

Build device drivers into the kernel  



Adv : driver available at boot time Dis-adv: need to load drivers that are rarely used,increase kernel size

Option 2 

Build device driver as a kernel module  

Adv : Load and unloaded as needed/not needed Dis-adv: potential attempts to load “bad” module into kernel

….continued 

At the highest level of abstraction, all Linux device drivers fit into 1 of 3 categories 

Character device 



Block device 



Can be accessed as stream of bytes;transfer byte at a time to/from user/kernel space Block device is something that can host a file system such as a disk; transfer block at a time to/from kernel filesystem

Network device

….continued 

 

On Unix/Linux each piece of HW is represented by a file located in /dev/, named device file which provides the means to communicate with the hardware Major and Minor numbers # ls –l /dev/hda*

brw-rw---- 1 root disk 3, 1 Jul 5 2000 /dev/hda1 brw-rw---- 1 root disk 3, 2 Jul 5 2000 /dev/hda2 brw-rw---- 1 root disk 3, 3 Jul 5 2000 /dev/hda3 

Major number  



Minor number 



Is used by driver to distinguish between the various hardware it controls

Mknod command 



Tells you which driver is used to access the hardware All device files with same major number are controlled by same driver

Used to create the device file

See Documentation/devices.txt to see assigned major numbers

Character device drivers 

File_operations structure 





Every character driver needs to define functions perform by the device ‘File_operations’ structure holds the address of the modules functions that perform those operations File_operations defined in Linux/fs.h

….continued 

Registering a device 

 

Adding a driver to your system means registering it with the kernel “Register_chrdev” defined in Linux/fs.h int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);   

Major – major number Name – name of device, as it appears in /proc/devices Fops – file operation table

….continued 

Unregistering a device 



Whenever the module is unloaded, the major number should be released int unregister_chrdev(unsigned int major, const char *name);  



Major – major number Name – name of device

Usage counter functions, defined in linux/module.h 



try_module_get(THIS_MODULE);// Increment the use count module_put(THIS_MODULE);// Decrement the use count

Writing a simple character driver 

Examples

Useful References for kernel programming 

http://tldp.org/LDP/lkmpg/2.6/html/index.html 



Kernel module programming,

http://lwn.net/Kernel/LDD3/ 

Device drivers programming

Related Documents


More Documents from ""

Effective Use Of Gdb
November 2019 19
Linux-mm
November 2019 15
Kvm-way
November 2019 20
Geep Gdb Basics 24thfeb08
November 2019 17
Linux Kernel Programming
November 2019 26
Linux Threads
November 2019 12