<<

Project 2

Wrap Up

Provided Elevator Source Code

●elevator/ –Makefile – include/ Everything not listed was dynamically created ●syscalls.h –src/

●syscalls. ●module.c ●sys_start_elevator.c ●sys_issue_request.c ●sys_stop_elevator.c

Makefile

● MODULE_NAME = elevator Name of your ● := $(shell pwd) Module

● #KDIR := /lib/modules/$(shell -)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $() -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator Point to ● PWD := $(shell pwd) Module code

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build Kernel Libraries ● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build ● ccflags-y += -I$(src)/include Compile Flags

● obj-y := src/sys_start_elevator.o Header Files

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o Built-in code ● obj-y += src/sys_issue_request.o ● obj-y += src/sys_stop_elevator.o Do not modifiy! ●

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o Module code ● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o Add your source files here

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o Module object ●

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules Compile

● clean:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean Makefile

● MODULE_NAME = elevator

● PWD := $(shell pwd)

● #KDIR := /lib/modules/$(shell uname -r)/build

● KDIR := /lib/modules/4.2.0/build

● ccflags-y += -I$(src)/include

● obj-y := src/sys_start_elevator.o

● obj-y += src/sys_issue_request.o

● obj-y += src/sys_stop_elevator.o

● $(MODULE_NAME)-objs += src/syscalls.o

● $(MODULE_NAME)-objs += src/module.o

● obj-m := $(MODULE_NAME).o

● default:

● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

● clean: Clean ● $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean syscalls.h ● #ifndef __ELEVATOR_SYSCALLS_H

● #define __ELEVATOR_SYSCALLS_H

● void elevator_syscalls_create(void);

● void elevator_syscalls_remove(void);

● #endif /*__ELEVATOR_SYSCALLS_H*/

References for module to call

Passes creation/removal to syscalls.c

syscalls.c

● #include

● #include

● extern long (*STUB_start_elevator)(void); – long start_elevator(void) { – printk("Starting elevator\n"); – return 0; ● } Stubs from built in files ● extern long (*STUB_issue_request)(int,int,int); – long issue_request(int passenger_type, int start_floor, int destination_floor) { – printk("New request: %d, %d => %d\n", passenger_type, start_floor, destination_floor); Add implementation here – return 0; ● }

● extern long (*STUB_stop_elevator)(void); – long stop_elevator(void) { – printk("Stopping elevator\n"); – return 0; ● }

● void elevator_syscalls_create(void) { – STUB_start_elevator =& (start_elevator); – STUB_stop_elevator =& (stop_elevator); ● }

● void elevator_syscalls_remove(void) { – STUB_start_elevator = NULL; – STUB_stop_elevator = NULL; ● } syscalls.c

● #include

● #include

● extern long (*STUB_start_elevator)(void); – long start_elevator(void) { – printk("Starting elevator\n"); – return 0; ● }

● extern long (*STUB_issue_request)(int,int,int); – long issue_request(int passenger_type, int start_floor, int destination_floor) { – printk("New request: %d, %d => %d\n", passenger_type, start_floor, destination_floor); – return 0; ● }

● extern long (*STUB_stop_elevator)(void); – long stop_elevator(void) { – printk("Stopping elevator\n"); – return 0; ● }

● void elevator_syscalls_create(void) { – STUB_start_elevator =& (start_elevator); Handles setting up the stubs – STUB_stop_elevator =& (stop_elevator); ● } under module insertion/removal

● void elevator_syscalls_remove(void) { – STUB_start_elevator = NULL; – STUB_stop_elevator = NULL; ● } module.c

● #include

● #include

● #include

● MODULE_LICENSE("GPL");

● MODULE_AUTHOR("Britton");

● MODULE_DESCRIPTION("Simple module designed to illustrate scheduling");

● static int hello_init(void) { – printk("Inserting Elevator\n"); – elevator_syscalls_create(); Inserts system calls – return 0; ● }

● static void hello_exit(void) { – printk("Removing elevator\n"); – elevator_syscalls_remove(); ● }

● module_init(hello_init);

● module_exit(hello_exit); module.c

● #include

● #include

● #include

● MODULE_LICENSE("GPL");

● MODULE_AUTHOR("Britton");

● MODULE_DESCRIPTION("Simple module designed to illustrate scheduling");

● static int hello_init(void) { – printk("Inserting Elevator\n"); – elevator_syscalls_create(); – return 0; ● }

● static void hello_exit(void) { – printk("Removing elevator\n"); Removes system calls – elevator_syscalls_remove(); ● }

● module_init(hello_init);

● module_exit(hello_exit); sys_start_elevator.c

● #include Installs system call stub into kernel

● #include Don't change unless you wish to reinstall kernel ● #include

● long (*STUB_start_elevator)(void) = NULL;

● EXPORT_SYMBOL(STUB_start_elevator);

● asmlinkage long sys_start_elevator(void) { – if (STUB_start_elevator)

● return STUB_start_elevator(); – else

● return -ENOSYS;

● } sys_issue_request.c

● #include Installs system call stub into kernel ● #include Don't change unless you ● #include wish to reinstall kernel

● long (*STUB_issue_request)(int,int,int) = NULL;

● EXPORT_SYMBOL(STUB_issue_request);

● asmlinkage long sys_issue_request(int passenger_type, int start_floor, int destination_floor) { – if (STUB_issue_request)

● return STUB_issue_request(passenger_type, start_floor, destination_floor); – else

● return -ENOSYS; ● } sys_stop_elevator.c

● #include Installs system call stub into kernel

● #include Don't change unless you wish to reinstall kernel ● #include

● long (*STUB_stop_elevator)(void) = NULL;

● EXPORT_SYMBOL(STUB_stop_elevator);

● asmlinkage long sys_stop_elevator(void) { – if (STUB_stop_elevator)

● return STUB_stop_elevator(); – else

● return -ENOSYS;

● } Submission

● You'll need to submit your code to black board by the due date (November 2nd) – e.g. p2_dennis_rahman.tar – Only contains your documentation and the code you wrote, not any of the additional files you had to modify – This is to checkpoint your progress, I'll require you to use this code in the demo – This is also how I'll grade your documentation ● You'll need to sign up for a demonstration date

Demonstration

● You will have 20 minutes

● I'll tell you to download my drivers, issue commands, and run your code / my drivers

● You will be tested on – Code correctness – Answering questions

● Design ● Implementation

Doodle

● Here is a to sign up for the demo – http://doodle.com/poll/t3qm5v9m7zuis2zp ● Your may be canceled the last minute due to not knowing when the lab is in use – I've been slowly narrowing down the meeting times for the other classes to prevent this from happening – We can reschedule for another time the following week ● When signing up, use your machine number as well as the first name of each member of your group – It makes it easier for me to track – Helps me detect typos and other problems

Drivers

● I'll provide some drivers for you to your code today – consumer.c – producer.c ● The drivers for the demo will be different – Designed around the specification – Designed to stress test your implementation – Designed to time your scheduler

consumer.c

● Starts elevator

● Stops elevator

producer.c

● Creates a person – Random – Random starting floor – Random destination floor ● Chance of being an invalid entry