Project 2 Wrap Up
Total Page:16
File Type:pdf, Size:1020Kb
Project 2 Wrap Up Provided Elevator Source Code ●elevator/ –Makefile – include/ Everything not listed was dynamically created ●syscalls.h –src/ ●syscalls.c ●module.c ●sys_start_elevator.c ●sys_issue_request.c ●sys_stop_elevator.c Makefile ● MODULE_NAME = elevator Name of your ● PWD := $(shell pwd) Module ● ● #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 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 <syscalls.h> ● #include <linux/printk.h> ● ● 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 <syscalls.h> ● #include <linux/printk.h> ● ● 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 <linux/init.h> ● #include <linux/module.h> ● #include <syscalls.h> ● ● 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 <linux/init.h> ● #include <linux/module.h> ● #include <syscalls.h> ● ● 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 <linux/linkage.h> Installs system call stub into kernel ● #include <linux/kernel.h> Don't change unless you wish to reinstall kernel ● #include <linux/module.h> ● ● 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 <linux/linkage.h> Installs system call stub into kernel ● #include <linux/kernel.h> Don't change unless you ● #include <linux/module.h> 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 <linux/linkage.h> Installs system call stub into kernel ● #include <linux/kernel.h> Don't change unless you wish to reinstall kernel ● #include <linux/module.h> ● ● 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