Top Banner
1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University
61

1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Dec 24, 2015

Download

Documents

Elaine Kelly
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

1

Week 6Intro to Kernel

Modules, Project 2

Sarah Diesburg

Florida State University

Page 2: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Logistics

Where should I put the kernel source? /usr/src/ Creates /usr/src/linux-2.6.32/

Where do I issue kernel building commands (e.g. ‘make oldconfig’, ‘make menuconfig’, ‘make’, …)? Inside /usr/src/linux-2.6.32/

2

Page 3: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Logistics

Where is the kernel image installed? Inside /boot/ Starts with vmlinuz…

Where does the initramfs image go? Inside /boot/

Where is the grub file? /boot/grub/menu.lst

3

Page 4: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Logistics

Where should I develop my new kernel modules? Inside /usr/src/linux-2.6.32/<module_name>/

4

Page 5: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Modules

Or “drivers”, if you prefer…

5

Page 6: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Module

A kernel module is a portion of kernel functionality that can be dynamically loaded into the operating system at run-time

Example USB drivers File system drivers Disk drivers Cryptographic libraries

6

Page 7: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Why not just compile everything into the kernel? Each machine only needs a certain number

of drivers For example, should not have to load every single

motherboard driver Load only the modules you need

Smaller system footprint Dynamically load modules for new devices

Camera, new printer, etc.

7

Page 8: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Creating a Kernel Module

Hello world example

8

Page 9: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void){ printk(KERN_ALERT “Hello, world!\n”); return 0;}

static void hello_exit(void){ printk(KERN_ALERT “Goodbye, sleepy world.\n”);}

module_init(hello_init);module_exit(hello_exit);

9

Page 10: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void){ printk(KERN_ALERT “Hello, world!\n”); return 0;}

static void hello_exit(void){ printk(KERN_ALERT “Goodbye, sleepy world.\n”);}

module_init(hello_init);module_exit(hello_exit);

10

Module headers

Page 11: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void){ printk(KERN_ALERT “Hello, world!\n”); return 0;}

static void hello_exit(void){ printk(KERN_ALERT “Goodbye, sleepy world.\n”);}

module_init(hello_init);module_exit(hello_exit);

11

License declaration

Page 12: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void){ printk(KERN_ALERT “Hello, world!\n”); return 0;}

static void hello_exit(void){ printk(KERN_ALERT “Goodbye, sleepy world.\n”);}

module_init(hello_init);module_exit(hello_exit);

12

Initialization function, runs when module

loaded

Tells kernel which function to

run on load

Page 13: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“Dual BSD/GPL”);

static int hello_init(void){ printk(KERN_ALERT “Hello, world!\n”); return 0;}

static void hello_exit(void){ printk(KERN_ALERT “Goodbye, sleepy world.\n”);}

module_init(hello_init);module_exit(hello_exit);

13

Exit function, runs when module exits

Tells kernel which function to

run on exit

Page 14: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Sample Kernel Module: Makefileifneq ($(KERNELRELEASE),) obj-m := hello.o

else KERNELDIR ?= \ /lib/modules/`uname -r`/build/ PWD := `pwd`default: $(MAKE) -C $(KERNELDIR) \ M=$(PWD) modulesendif

clean: rm -f *.ko *.o Module* *mod*

14

Page 15: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

/usr/src/hello$> make

Creates hello.ko – This is the finished kernel module!

Compile the Kernel Module

15

Page 16: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Inserting and Removing the Module insmod – insert a module

/usr/src/hello$> sudo insmod hello.ko

rmmod – remove a module

/usr/src/hello$> sudo rmmod hello.ko

16

Page 17: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Listing Modules

lsmod – lists all running modules

/usr/src/hello$>lsmod

17

Page 18: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Where is it printing?

Look inside /var/log/syslog Hint – to watch syslog in realtime, issue the

following command in a second terminal:

$> sudo tail –f /var/log/syslog

Demo…

18

Page 19: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Module vs User Application All kernel modules are event-driven

Register functions Wait for requests and service them Server/client model

No standard C library Why not?

No floating point support Segmentation fault could freeze/crash your

system Kernel ‘oops’!

19

Page 20: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Functions

printk() instead of printf() kmalloc() instead of malloc() kfree() instead of free()

Where can I find definitions of these kernel functions?

20

Page 21: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel manpages

Section 9 of manpages Must install manually for our development

kernel

$> wget http://ftp.us.debian.org/debian/pool/main/l/linux-2.6/linux-manual-2.6.32_2.6.32-22_all.deb

$> sudo dpkg –i linux-manual-2.6.32_2.6.32-22_all.deb

21

Page 22: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Headers

#include <linux/init.h> /* module stuff */ #include <linux/module.h> /* module stuff */ #include <asm/semaphore.h> /* locks */ #include <linux/list.h> /* linked lists */ #include <linux/string.h> /* string functions! */

Look inside linux-2.6.32/include/ for more… Google is also your friend

22

Page 23: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

How can I explore the kernel? Use lxr (“Linux Cross Referencer”):

http://lxr.linux.no/ Select your kernel version and enter search terms

Use grep on your kernel source

$> grep –Rn xtime /usr/src/linux-2.6.32 R = recursive, n = display line number

23

Page 24: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Project 2: /Proc Kernel Module and Elevator

24

Page 25: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

procfs Kernel Module

procfs “hello world” example Creates a read-only procfs entry

Steps Create entry in module_init function Register reading function with procfs_read Delete entry in module_cleanup function

Reference Linux Kernel Module Programming Guide: Proc F

S

25

Page 26: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Procfs: Headers and Global Data#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/proc_fs.h>

MODULE_LICENSE(“GPL”);

#define ENTRY_NAME “helloworld”

#define PERMS 0644

#define PARENT NULL

struct proc_dir_entry *proc_entry;

int procfile_read(char *buf, char **buf_location, off_t offset, int buffer_length, int *eof, void *data);

26

Page 27: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Procfs: Creation

int hello_proc_init(void){ proc_entry = create_proc_entry(ENTRY_NAME, PERMS,PARENT); /* check proc_entry != NULL */ proc_entry->read_proc = procfile_read; proc_entry->mode = S_IFREG | S_IRUGO; proc_entry->uid = 0; proc_entry->gid = 0; proc_entry->size = 11;

printk(“/proc/%s created\n”, ENTRY_NAME); return 0;}

27

Page 28: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Procfs: Reading

int procfile_read(char *buf, char **buf_location, off_t offset, int buffer_length, int *eof, void *data)

{ int ret; printk(“/proc/%s read called.\n”, ENTRY_NAME);

/* Setting eof. We exhaust all data in one shot */

*eof = 1; ret = sprintf(buf, “Hello World!\n”);

return ret;}

28

Page 29: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Procfs: Deletion

void hello_proc_exit(void)

{

remove_proc_entry(ENTRY_NAME, NULL);

printk(“Removing /proc/%s.\n”, ENTRY_NAME);

}

29

Page 30: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Procfs: Registration

module_init(hello_proc_init);

module_exit(hello_proc_exit);

30

Page 31: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Testing Procfs

$> sudo insmod hello_proc.ko

$> sudo tail /var/log/syslog

$> cat /proc/helloworld

$> sudo rmmod hello_proc

31

Page 32: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Part 2: Kernel Time

Implement a procfs entry to display the value of xtime Hint: You may not be able to directly read xtime

from your module, but maybe something else can…

32

Page 33: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Part 3: Elevator Scheduling

33

Page 34: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Part 3: Elevator Scheduling Implement a kernel module that simulates an

elevator system Implement system calls to interact with your

elevator Implement a procfs entry to display

debugging information Test using a set of user-space programs to

exercise your system

34

Page 35: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Why Elevator Scheduling?

Classic producer/consumer analogy Similar to disk elevators

File system produces read/write requests Disk consumes requests, optimized for disk head

position, rotational delays, etc.

35

Page 36: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Your Elevator

One elevator Five floors Four types of people

Adults Children Delivery people Maintenance people

The elevator cannot exceed its maximum weight load

36

Page 37: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Your Elevator

People will line up at each floor in a first-in, first-out (FIFO) order

Each person has a starting floor and a destination floor

The elevator must pause for a period of time to collect people and move between floors

Once the elevator reaches a passenger’s destination floor, that passenger gets out and ceases to exist

37

Page 38: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Passengers will line up (FIFO)

38

Page 39: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Each passenger has a destination floor in mind…

39

I want to go to

floor 3

Page 40: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

The elevator must be started to service passengers…

40

Start!

Page 41: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

The elevator must be started to service passengers…

41

Elevator starts on the

first floor

Page 42: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Passengers enter in FIFO order

42

Make sure passengers don’t

exceed weight limit!

Page 43: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Passengers enter in FIFO order

43

More passengers can be queuing

up!

Page 44: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

44

Going to floor 3!

Red and black has destination floor 3, blue has

destination floor 2

Page 45: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

45

Must take certain amount of time

between floors…

Page 46: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

46

Must take certain amount of time

between floors…

Page 47: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

47

Must take certain amount of time

between floors…

Page 48: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

48

Must take certain amount of time

between floors…

Page 49: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator can move to any floor

49

Must take certain amount of time

between floors…

Page 50: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Passengers disappear when they exit…

50

Page 51: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator stop in progress…

51

Must finish delivering

passengers before stopping…

Stop in Progress

Page 52: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator stop in progress…

52

Must finish delivering

passengers before stopping…

Stop in Progress

Page 53: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator stop in progress…

53

Must finish delivering

passengers before stopping…

Stop in Progress

Page 54: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator stop

54

Full stop

Page 55: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Controlling the Elevator

Implement the following system calls

int start_elevator(void)

int issue_request(int passenger_type, int start_floor, int destination_floor)

int stop_elevator(void)

55

Page 56: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator Scheduling Algorithms A scheduling algorithm considers the state of

the consumers and all requests and tries to optimize some metric Throughput: Maximize total requests, minimize

processing total time. Priorities: Requests now have deadlines.

Maximize number of requests meeting deadlines. Burst throughput: Maximize peak requests that

can be handled. Energy: Minimize consumer action

56

Page 57: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Elevator Test Applications

consumer.c Runs in infinite loop Issues K passenger requests once per second

producer.c Takes an argument telling the elevator to start or

stop

57

Page 58: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Kernel Time Constraints

#include <linux/delay.h>

void ssleep(unsigned int seconds);

A call to ssleep will have the program cease to the task scheduler for seconds number of seconds

58

Page 59: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Additional Design Considerations How to move elevator? How to protect the floor FIFO queues? What scheduling algorithm to use?

59

Page 60: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

Next Time

Kernel debugging techniques How to insert system calls Some elevator scheduling algorithms

60

Page 61: 1 Week 6 Intro to Kernel Modules, Project 2 Sarah Diesburg Florida State University.

What you should do?

Finish part 1 (5 system calls) Finish part 2 (/proc module) Try sample kernel module and proc module Make skeleton part 3 module Make elevator and floor queue data

structures

61