ASE++ : Linux Kernel Programming
|
|
- Lee May
- 5 years ago
- Views:
Transcription
1 ASE++ : Linux Kernel Programming Giuseppe Lipari (giuseppe.lipari@univ-lille.fr) April 8, 2018 Contents 1 Introduction 1 2 Setting up the environment 2 3 Writing a kernel module 5 4 Other useful information 11 5 The project 11 1 Introduction The objective of this short course is to understand the internals of the Linux Kernel. More specically we will see: ˆ How to set up a development environment for programming Linux kernel code on a PC. Since the course is short, we will only see programming on a PC (for embedded programming the tools to be used are slightly dierent). ˆ What is a kernel module, and how to write a simple one ˆ How does scheduling works in Linux ˆ How to debug and trace kernel code. The course is not exhaustive; we will just touch the surface of some topic. However, it is a good starting point for people that would like to pursue the topic of kernel programming. It is also useful for the students interested in other topics because it gives an overview of the internal workings of the kernel, and of the many diculties that you can nd in developing system code. 1
2 2 Setting up the environment 2.1 Setting a VM In this course we will use kvm as vitalisation solution. For more information about running a VM with kvm you can look at the man page of qemu: man qemu In fact, kvm is a simple wrapper to the qemu-kvm which runs a virtual machine natively on Linux. To run kvm you must enable the vitalisation in the BIOS (Intel vt-x or AMD amd-v). If it is not possible to enable virtualisation, you can still run qemu in emulation mode (but it will be much slower). To simplify the task of running VM with qemu and setting all the right options, I prepared a Debian image for the course, and a script that you can use to run your virtual machine with Linux. The Debian image and the script are available at /local/debian32.img. A copy of this image le is available here. Here are two scripts for launching the virtual machine: ˆ kvm-std.sh runs the machine with his own kernel (version ): #!/bin/bash SMP=$2-2 kvm -smp $SMP -m boot c \ -hda debian32.img \ -net nic -net user,hostfwd=tcp::10022-:22 \ -serial stdio ˆ The second script, kvm-term.sh uses a kernel compiled by yourself: #!/bin/bash KERNEL=$1-/home/lipari/devel/linux-3.19/build/kvm-32/arch/x86/boot/bzImage SMP=$2-2 kvm -smp $SMP -m boot c \ -hda debian32.img \ -net nic -net user,hostfwd=tcp::10022-:22 \ -serial stdio \ -kernel $KERNEL -append "root=/dev/sda1 console=ttys0 rw" \ -display none The only thing you need to modify is the value of the KERNEL variable: it must point to the location on your hard disk of the compiled kernel you wish to use. Notice that TCP port 22 (used by ssh) has been "forwarded" on port 4022 of the same machine. Therefore, when you try to connect to :4022 on the local machine, you are actually forwarded to the virtual machine. Now, to run the VM you need to ˆ copy the script in your home dir, so you can modify it at will; ˆ launch it from your home. 2
3 The VM that I prepared has two users: ˆ user root with password ase++ and ˆ user ase with password ase++. To ssh to a running guest do: ssh ase@ p Other useful links (not necessary for this short course): ˆ Debian installation disks (ISO) ˆ How to setup a VM with a debian installation on it Compiling the kernel sources As shown in the previous section, you need to compile the kernel by yourself. The rst thing you need to do is to download a kernel from I suggest version Once you have the kernel sources on your le system, you need to compile the kernel. Since it is not so easy to congure the kernel properly for use with the VM, I provide a cong le already congured for you. You can take this as a starting point for your congurations. kvm32.config Save this le in your Linux directory. To compile the kernel, you can specify the output directory where you want to put your compiled objects for a certain architecture. For example, you could think of a directory structure as follows: Go inside the Linux directory (linux ) and type make O=../build/kvm32 menuconfig to start the conguration. Select <Load>, and type the name of the cong le (kvm32.config). After the conguration has been loaded correctly, select the options that you would like to enable. For the time being you do not need to change anything. Then, select <Save> and change its name as.config. This 3
4 is the default name for a conguration le in Linux. Finally, select <Exit>, this will create a Makele in the build directory, and it will copy the.cong le in the right place. Finally, to compile the kernel, type make O=`../build/kvm32` -j8 bzimage from within the linux directory. If everything goes well, you will nd le bzimage in directory build/kvm32/arch/x86/boot/. Test the kernel by lanching the virtual machine using the kvm-term.sh command in which you have updated the KERNEL variable with the correct path Bleeding edge You can also try to download the latest bleeding edge development version from git repository, and switch to the development branch for the real-time subsystem: git clone git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git checkout -b tip-sched-core origin/sched/core Conguration and compilation are the same. 2.3 Transferring les to the virtual machine To transfer les to the virtual machine, there are two methods, a) using SSH to a running virtual machine, or b) mount the virtual machine image using a loop back device SSH access (This is the suggested method) For copying les, you can use command scp as follows: scp -P 4022 <files_to_copy> ase@ :<destination_path> Loop back device To mount loop back, rst nd the sector oset fdisk -u -l /path/to/debian.img Then you can compute: offset = sector size * start offset Normally that would be or Then you need to mount the loop back device: mount -o loop,offset= /path/to/debian.img /path/to/mountpoint At this point, you can access the debian disk as it were a local device mounted in /path/to/mountpoint. 4
5 3 Writing a kernel module A loadable kernel module is a software module that can be dynamically loaded into the kernel space and interact with the kernel. It is, from all points of view, kernel code which runs in kernel space with kernel privileges, and that can access to all kernel symbols. The only dierence is that, instead of being statically linked in the kernel image at compilation + linking time, it can be compiled separately and later loaded and linked with the rest of the kernel code. Usually, kernel modules provide access to device drivers and extra functionality that it is not central to the kernel. They also provide a possibility for programmers to easily customise the kernel features. 3.1 Books and other material A very good introduction to the art of writing kernel modules and device drivers is found in the following book: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman "Linux Device Drivers". The book is freely available for download, and I strongly recommend it to anybody willing to be introduced to kernel programming. See in particular Chapter 2 for an introduction to module programming. Here I am going to provide a short tutorial, taken in part from the book and in part from various web sites. Another interesting resource is the "Crash course on kernel programming", by Robert P.J. Day: ˆ I also recommend the book "Linux Kernel Development", by Robert Love, for a good explanation of the internals of the Linux kernel. ˆ Finally, a very useful reference for searching and exploring the Linux kernel code is the following: ˆ The makele First of all, it is important to understand how to compile a module. Please refer to the following makele. # If KERNELRELEASE is defined, we've been invoked from the # kernel build system and can use its language. ifneq ($(KERNELRELEASE),) obj-m := hello.o # Otherwise we were called directly from the command # line; invoke the kernel build system. else KERNELDIR?= <kernel source dir> BUILDDIR?= <kernel build dir> PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) O=$(BUILDDIR) M=$(PWD) modules endif You can download the Makele from here. 5
6 Of course, you need to adjust the KERNELDIR and BUILDDIR variables to point to the root of your kernel sources, and to your build directory, respectively. From the LDD book: This makele is read twice on a typical build. When the makele is invoked from the command line, it notices that the KERNELRELEASE variable has not been set. It locates the kernel source directory by taking advantage of the fact that the symbolic link build in the installed modules directory points back at the kernel build tree. If you are not actually running the kernel that you are building for, you can supply a KERNELDIR option on the command line, set the KERNELDIR environment variable, or rewrite the line that sets KERNELDIR in the makele. Once the kernel source tree has been found, the makele invokes the default target, which runs a second make command (parameterized in the makele as $(MAKE)) to invoke the kernel build system as described previously. On the second reading, the makele sets obj-m, and the kernel makeles take care of actually building the module. This mechanism for building modules may strike you as a bit unwieldy and obscure. Once you get used to it, however, you will likely appreciate the capabilities that have been programmed into the kernel build system. Do note that the above is not a complete makele; a real makele includes the usual sort of targets for cleaning up unneeded les, installing modules, etc. 3.3 Our rst module Now the rst module example, which simply prints hello worlds in the log le. # 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, cruel world\n"); module_init(hello_init); module_exit(hello_exit); The printk function prints a string on various output, depending on the rst macro which is the message priority. There are 8 possible priorities, they can be found in kernel.h along with their explanation. If the priority is less than variable console_loglevel the message is also printed on the current terminal. Otherwise it goes in the kernel logs, which can be visualised with command: dmesg 6
7 By compiling this le you obtain a hello.ko le, which is an object le ready to be loaded into the kernel. To load the module, type: insmod hello.ko Loading a module requires superuser privileges, so you may want to run it with sudo, or just as root. To remove the module, you type: rmmod hello again as superuser. A few things to notice: ˆ You are inside the kernel. Therefore, you cannot use the glibc: no printf() (but you can use printk), no scanf, no fopen, no malloc (but you can use kmalloc) etc. You need to use equivalent functions available in the kernel. ˆ module_init(hello_init) tells the kernel which function to call upon loading the module. This function contains initialisation code for the module environment. ˆ module_exit(hello_exit) tells the kernel which function to call upon removal of the module. ˆ Notice that there is no main(). In fact, modules do not run as normal user processes. Typically, the module contain functions that are called by the kernel upon occurrence of certain events. Therefore, if we want to write something meaningful, rst of all we need to understand what kind of events happen in the kernel, then, understand which events are useful for us nally, we need to write and install some function to be called when a certain even happens. This module has no special function except the ones for initialisation and cleanup. 3.4 Symbols Which symbols you can access from your module? Here is a quick explanation: ˆ To list all kernel symbols: cat /proc/kallsyms On each line, the symbol name is preceded by ˆ the address in memory ˆ a character [DdSsTt], with the following meaning: D or d The symbol is in the initialised data section. S or s The symbol is in an uninitialised data section for small objects. T or t The symbol is in the text (code) section. Uppercase symbols are global/exported; lowercase are local unexported symbols. 7
8 3.5 Interacting with the module The module runs in kernel space, that is in a dierent memory space than normal user programs. Also, it cannot use normal glibc functions (such as fprintf() and fscanf()) and other user space libraries. Also, there is no main() function, so module functions are executed only in response to events. So, how we can communicate with the module? There are several possibilities (syscalls, for example). Here we will study the possibility to interact through a "le" in the /proc le system. What follows is an example of module which prints the kernel jies (i.e. a counter that is incremented every kernel tick). To activate the feature, you rst have to write '1' on the le /proc/crash-jiffies, and you can disable the module by writing '0' on it. This module has been adapted from a similar one in the Crash Course web-site by R. P.J. Day. # include <linux/module.h> # include <linux/kernel.h> # include <linux/proc_fs.h> # include <linux/init.h> # include <linux/seq_file.h> # include <linux/jiffies.h> # include <linux/string.h> # include <asm/uaccess.h> # define JIFFIES_BUFFER_LEN 4 static char jiffies_buffer[jiffies_buffer_len]; static int jiffies_flag = 0; static int jiffies_proc_show(struct seq_file *m, void *v) if (jiffies_flag) seq_printf(m, "%llu\n", (unsigned long long) get_jiffies_64()); return 0; 8
9 static int jiffies_proc_open(struct inode *inode, struct file *file) return single_open(file, jiffies_proc_show, NULL); static ssize_t jiffies_proc_write(struct file *filp, const char user *buff, size_t len, loff_t *data) long res; printk(kern_info "JIFFIES: Write has been called"); if (len > (JIFFIES_BUFFER_LEN - 1)) printk(kern_info "JIFFIES: error, input too long"); return -EINVAL; else if (copy_from_user(jiffies_buffer, buff, len)) return -2; jiffies_buffer[len] = 0; kstrtol(jiffies_buffer, 0, &res); jiffies_flag = res; return len; static const struct file_operations jiffies_proc_fops =.owner = THIS_MODULE,.open = jiffies_proc_open,.read = seq_read,.write = jiffies_proc_write,.llseek = seq_lseek,.release = single_release, ; 9
10 static int init jiffies_proc_init(void) proc_create("crash_jiffies", 0666, NULL, &jiffies_proc_fops); return 0; static void exit jiffies_proc_exit(void) remove_proc_entry("crash_jiffies", NULL); module_init(jiffies_proc_init); module_exit(jiffies_proc_exit); MODULE_AUTHOR("Modified by Giuseppe Lipari from Robert P. J. Day, MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("A jiffies /proc file."); A few comments: ˆ The init function jiffies_proc_init just creates an entry in the /proc directory, with name crash_jiffies. This will be seen as a le from the user ˆ When creating the entry, we specify a =le_operations) data structure, which contains a set of pointers to function. Each function is a callback that is going to be called when the user performs some operation on the proc le. For example is the use tries to open the le, the jiffies_proc_open function is called. Notice in particular the seq_read and seq_lsee (which are functions that already exist in the Linux kernel) and the jiffies_proc_write (which is a function provided by the module). You do not need to specify all possible function pointers in the data structure. ˆ The jiffies_proc_open calls another function that opens a "sequence le structure" and installs another function called jiffies_proc_show which nally provides the content of the le when needed. ˆ The jiffies_proc_show just prints on the sequence structure with a seq_printf() the current number of jies (a 64 bit integer). ˆ For more information on sequence les and why they are useful, please refer to this web page. ˆ When the user writes to the proc le, function jiffies_proc_write is called, which copies the data from user space to the internal buer jiffies_buffer by using the copy_from_user function. WARNING: pay attention to the length of the data to be copied. It is absolutely necessary to not exceed the buer length, otherwise the kernel will crash unpredictably! ˆ Then the buer content is terminated with 0, and transformed into a long with kstrtol. ˆ Notice that the jiffies_proc_show prints on the le only if the ag is set to 1. 10
11 ˆ After compiling and installing the module, you can test it with cat /proc/crash_jiffies echo '1' > /proc/crash_jiffies cat /proc/crash_jiffies echo '0' > /proc/crash_jiffies cat /proc/crash_jiffies You should see nothing on the rst cat, the jies on the second one, and none again on the last one. 4 Other useful information ˆ Debugging with printk. An useful tutorial is available here: 865/linux-tracing-tutorial ˆ Tracing kernel events with LTTng 5 The project The goal of this project is to write a kernel module which monitors the execution time of a task. Here are the requirements: 1. The module initially installs le /proc/ase_cmd in the proc le system, and a directory /proc/ase/ which will contain the output of the module. 2. Then it waits for the user to write a valid process ID (PID) on the le (for example with echo). From then on, it starts to track the process execution time on an internal data structure. It also creates a le with name equal to the process ID in the directory /proc/ase/. If the process ID is not valid, the module does nothing. 3. When the user reads from this le, it outputs there the total execution time of the process until now, and the index of the CPU on which the task is currently running. 4. When the process terminates, the module must understand this and close the corresponding le in the /proc/ase directory. 5. Add a command in /proc/ase_cmd to stop tracking a certain process. For example, by writing a negative number as follows: echo "-123" > /proc/ase_cmd the module will stop tracking process 123. In this case, even if the process has not yet terminated, the corresponding data structures are destroyed, and the corresponding memory is freed. 6. Finally, the module must permit to suspend/wake_up a task. TO BE CONTINUED In the following I give some hint on how to realize the project. 11
12 5.1 Task descriptor A task (a process or a thread) in Linux is described by a data structure, the struct task_struct. This structure contains all information about a specic task, and it is also called Task Descriptor. The task_struct is a relatively large data structure, at around 1.7 kilobytes on a 32-bit machine. It contains many dierent elds, for example (from include/linux/sched.h): struct task_struct...; volatile long state; const struct sched_class *sched_class; int exit_state; int exit_code; int exit_signal;...; pid_t pid;...; Inside the kernel, tasks are typically referenced directly by a pointer to their task_struct structure. In fact, most kernel code that deals with processes works directly with struct task_struct. Consequently, it is very useful to be able to quickly look up the process descriptor of the currently executing task, which is done via the current macro. You can lookup a task struct by its pid by using the following: extern struct task_struct *find_task_by_vpid(pid_t nr); However, this function may not be available in a module (the symbol is not exported). Therefore, you have to nd the task by using the following: struct task_struct *mytask = NULL; struct pid *pid_struct = NULL; pid_struct = find_get_pid((int) pid); my_task = pid_task(pid_struct, PIDTYPE_PID); (remember to add error control!) 5.2 Data structures You have to declare a structure where the module will store all the information related to a project that the module is tracking. In a rst step you could declare a static array of such structures to contain a limited amount of processes (for example, up to 4). This means that the module will be able to track only up to 4 processes. However, this will also simplify the development, because you can avoid to allocate/deadllocate dynamic memory. Once everything works ne, you will add dynamic allocation to remove the limitation on the number of processes. To dynamic allocate and free memory in the kernel, you can use kmalloc() and kfree(), similar to the malloc and free of the c standard library. The nal project must deal with dynamic allocated data structures. 12
13 5.3 Task termination Since we cannot use KProbes, there is no way to inform the module when a task terminates. This means that, when one of the task that the module is tracking may have terminated in the meanwhile. Therefore, before doing any operation on a task_struct the module must check if the task is still alive or not. If not, the module has to free the data structure. This happens when we are asked to list the content of the directory /proc/ase/ and when we read the content of one of the les in /proc/ase/. In the latter case, the module has to return an error of "le does not exist". For example, suppose we are tracking process with pid=1234: echo "1234" > /proc/ase_cmd Then, after process 1234 terminates, we try to do : $ cat /proc/ase/1234 cat: /proc/ase/1234: Aucun fichier ou dossier de ce type 5.4 TODO Stopping a task Section to be completed. 13
Virtual File System (VFS) Implementation in Linux. Tushar B. Kute,
Virtual File System (VFS) Implementation in Linux Tushar B. Kute, http://tusharkute.com Virtual File System The Linux kernel implements the concept of Virtual File System (VFS, originally Virtual Filesystem
More informationKernel Modules. Kartik Gopalan
Kernel Modules Kartik Gopalan Kernel Modules Allow code to be added to the kernel, dynamically Only those modules that are needed are loaded. Unload when no longer required - frees up memory and other
More informationCS 423 Operating System Design: Introduction to Linux Kernel Programming (MP1 Q&A)
CS 423 Operating System Design: Introduction to Linux Kernel Programming (MP1 Q&A) Professor Adam Bates Fall 2018 Learning Objectives: Talk about the relevant skills required in MP1 Announcements: MP1
More informationLinux Kernel Module Programming. Tushar B. Kute,
Linux Kernel Module Programming Tushar B. Kute, http://tusharkute.com Kernel Modules Kernel modules are piece of code, that can be loaded and unloaded from kernel on demand. Kernel modules offers an easy
More informationLinux Kernel Modules & Device Drivers April 9, 2012
Linux Kernel Modules & Device Drivers April 9, 2012 Pacific University 1 Resources Linux Device Drivers,3rd Edition, Corbet, Rubini, Kroah- Hartman; O'Reilly kernel 2.6.10 we will use 3.1.9 The current
More informationCS5460/6460: Operating Systems. Lecture 24: Device drivers. Anton Burtsev April, 2014
CS5460/6460: Operating Systems Lecture 24: Device drivers Anton Burtsev April, 2014 Device drivers Conceptually Implement interface to hardware Expose some high-level interface to the kernel or applications
More informationECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University
ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University Prof. Peng Li TA: Andrew Targhetta (Lab exercise created by A Targhetta and P Gratz) Laboratory
More informationAbstraction via the OS. Device Drivers. Software Layers. Device Drivers. Types of Devices. Mechanism vs. Policy. Jonathan Misurda
Abstraction via the OS Device Drivers Jonathan Misurda jmisurda@cs.pitt.edu Software Layers level I/O software & libraries Device independent OS software Device drivers Interrupt handlers Hardware Operating
More informationSoftware Layers. Device Drivers 4/15/2013. User
Software Layers Device Drivers User-level I/O software & libraries Device-independent OS software Device drivers Interrupt handlers Hardware User Operating system (kernel) Abstraction via the OS Device
More information/dev/hello_world: A Simple Introduction to Device Drivers under Linux
Published on Linux DevCenter (http://www.linuxdevcenter.com/) See this if you're having trouble printing code examples /dev/hello_world: A Simple Introduction to Device Drivers under Linux by Valerie Henson
More informationOperating Systems (234123) Spring 2017 (Homework Wet 1) Homework 1 Wet
Homework 1 Wet Due Date: 30/4/2017 23:00 Teaching assistant in charge: Yehonatan Buchnik Important: the Q&A for the exercise will take place at a public forum Piazza only. Critical updates about the HW
More informationDevice Drivers. CS449 Fall 2017
Device Drivers CS449 Fall 2017 Software Layers User-level I/O so7ware & libraries Device-independent OS so7ware Device drivers Interrupt handlers User OperaEng system (kernel) Hardware Device Drivers User
More informationLinux drivers - Exercise
Embedded Realtime Software Linux drivers - Exercise Scope Keywords Prerequisites Contact Learn how to implement a device driver for the Linux OS. Linux, driver Linux basic knowledges Roberto Bucher, roberto.bucher@supsi.ch
More informationScrivere device driver su Linux. Better Embedded 2012 Andrea Righi
Scrivere device driver su Linux Agenda Overview Kernel-space vs user-space programming Hello, world! kernel module Writing a character device driver Example(s) Q/A Overview What's a kernel? The kernel
More informationLoadable Kernel Module
Instituto Superior de Engenharia do Porto Mestrado em Engenharia Eletrotécnica e de Computadores Arquitetura de Computadores Loadable Kernel Module The objective of this lesson is to analyze, compile and
More informationThe device driver (DD) implements these user functions, which translate system calls into device-specific operations that act on real hardware
Introduction (Linux Device Drivers, 3rd Edition (www.makelinux.net/ldd3)) Device Drivers -> DD They are a well defined programming interface between the applications and the actual hardware They hide completely
More informationQEMU and the Linux Kernel
CSC 256/456: Operating Systems QEMU and the Linux Kernel John Criswell! University of Rochester 1 Outline Useful tools! Compiling the Linux Kernel! QEMU! Linux Kernel Details 2 Useful Tools 3 screen Virtual
More informationPart A: Setup your kernel development environment
Part A: Setup your kernel development environment For compatibility please compile all your code on nml-cloud-205.cs.sfu.ca. (aka kernel-builder). You can ssh into this machine using your SFU auth. QEMU
More informationFinish up OS topics Group plans
Finish up OS topics Group plans Today Finish up and review Linux device driver stuff Walk example again See how it all goes together Discuss talking to MMIO RTOS (on board) Deferred interrupts Discussion
More informationLinux Kernel Development (LKD)
Linux Kernel Development (LKD) Session 2 CISTER Framework: Laboratory 2 Paulo Baltarejo Sousa pbs@isep.ipp.pt 2017 1 Introduction The goal of the CISTER framework is to create a set of tools that help
More informationLinux Device Drivers
Linux Device Drivers Modules A piece of code that can be added to the kernel at runtime is called a module A device driver is one kind of module Each module is made up of object code that can be dynamically
More information7.4 Simple example of Linux drivers
407 7.4 Simple example of Linux drivers In the previous section, we introduce a simple Hello module driver, it is just some information from the serial port output, the board did not correspond to the
More informationLinux kernel. Tutorials to discover how to do some stuff on linux kernel. If you have any suggestions or if you find any problem, please report it!
Tutorials to discover how to do some stuff on linux kernel. If you have any suggestions or if you find any problem, please report it! Important These tutorials are based on linux kernel 4.x. It is very
More informationFormatting 1. Commands starting with $ are Linux console commands on the host PC:
Custom Kernel Guide by Arrvindh Shriraman Last update: April 1, 2016 This document guides the user through: 1. Downloading and compiling the Linux kernel's source code. 2. Running a custom kernel inside
More informationOperating Systems 16 - CS 323 Assignment #2
Operating Systems 16 - CS 323 Assignment #2 Scheduler March 18, 2016 1 Objectives 1. Learn about scheduling in the Linux kernel 2. Understand the tradeoffs involved in scheduling 3. Work on the codebase
More informationCS 453: Operating Systems Programming Project 5 (100 points) Linux Device Driver
CS 453: Operating Systems Programming Project 5 (100 points) Linux Device Driver 1 Setup In this assignment, we will write a simple character driver called booga. Please do a git pull --rebase in your
More informationUnix (Linux) Device Drivers
Unix (Linux) Device Drivers Kernel module that handles the interaction with an specific hardware device, hiding its operational details behind a common interface Three basic categories Character Block
More informationIntroduction to Linux
Introduction to Linux The command-line interface A command-line interface (CLI) is a type of interface, that is, a way to interact with a computer. Window systems, punched cards or a bunch of dials, buttons
More informationREVISION HISTORY NUMBER DATE DESCRIPTION NAME
i ii REVISION HISTORY NUMBER DATE DESCRIPTION NAME iii Contents 1 The structure of a Linux kernel module 1 1.1 Install XV6...................................................... 1 1.2 Compile and load a
More informationKthreads, Mutexes, and Debugging. Sarah Diesburg CS 3430 Operating Systems
Kthreads, Mutexes, and Debugging Sarah Diesburg CS 3430 Operating Systems 1 Story of Kernel Development Some context 2 In the old days There were no modules or virtual machines The kernel is a program
More informationLinux Kernel Development (LKD)
Linux Kernel Development (LKD) Session 2 Kernel Build System and Process Management Paulo Baltarejo Sousa pbs@isep.ipp.pt 2017 PBS LKD: S2 1 / 41 Disclaimer Material and Slides Some of the material/slides
More informationOperating Systems II BS degree in Computer Engineering Sapienza University of Rome Lecturer: Francesco Quaglia. Topics: 1.
Operating Systems II BS degree in Computer Engineering Sapienza University of Rome Lecturer: Francesco Quaglia Topics: 1. LINUX modules Modules basics A LINUX module is a software component which can be
More informationUniversity of Colorado at Colorado Springs CS4500/ Fall 2018 Operating Systems Project 1 - System Calls and Processes
University of Colorado at Colorado Springs CS4500/5500 - Fall 2018 Operating Systems Project 1 - System Calls and Processes Instructor: Yanyan Zhuang Total Points: 100 Out: 8/29/2018 Due: 11:59 pm, Friday,
More informationCSE 333 SECTION 3. POSIX I/O Functions
CSE 333 SECTION 3 POSIX I/O Functions Administrivia Questions (?) HW1 Due Tonight Exercise 7 due Monday (out later today) POSIX Portable Operating System Interface Family of standards specified by the
More informationSuSE Labs / Novell.
Write a real Linux driver Greg Kroah-Hartman SuSE Labs / Novell http://www.kroah.com/usb.tar.gz gregkh@suse.de greg@kroah.com Agenda Intro to kernel modules sysfs basics USB basics Driver to device binding
More informationSection 3: File I/O, JSON, Generics. Meghan Cowan
Section 3: File I/O, JSON, Generics Meghan Cowan POSIX Family of standards specified by the IEEE Maintains compatibility across variants of Unix-like OS Defines API and standards for basic I/O: file, terminal
More informationLinux Kernel Development (LKD)
Linux Kernel Development (LKD) Session 1 Loadable Kernel Modules (LKM) Paulo Baltarejo Sousa pbs@isep.ipp.pt 2017 PBS LKD: S1 1 / 66 Disclaimer Material and Slides Some of the material/slides are adapted
More informationCMPT 102 Introduction to Scientific Computer Programming. Input and Output. Your first program
CMPT 102 Introduction to Scientific Computer Programming Input and Output Janice Regan, CMPT 102, Sept. 2006 0 Your first program /* My first C program */ /* make the computer print the string Hello world
More informationOperating Systems ID2206 English version :00-12:00
Operating Systems ID2206 English version 2017-01-14 0800-1200 Name Instruction You are, besides writing material, only allowed to bring one self hand written A4 of notes. Mobiles etc, should be left to
More informationProject 1. Fast correction
Project 1 Fast correction Project #1 waitpid vs wait WEXITSTATUS Memory leaks! fflush after the >, before the fork Why? Because the children and the parent can run in any order When piping a list of commands
More informationCharacter Device Drivers One Module - Multiple Devices
Review from previous classes Three Types: Block, Character, and Network Interface Device Drivers MAJOR & MINOR numbers assigned register_chrdev_region(), alloc_chrdev_region(), unregister_chrdev_region()
More informationLinux Systems Administration Shell Scripting Basics. Mike Jager Network Startup Resource Center
Linux Systems Administration Shell Scripting Basics Mike Jager Network Startup Resource Center mike.jager@synack.co.nz These materials are licensed under the Creative Commons Attribution-NonCommercial
More informationOperating Systems, Assignment 2 Threads and Synchronization
Operating Systems, Assignment 2 Threads and Synchronization Responsible TA's: Zohar and Matan Assignment overview The assignment consists of the following parts: 1) Kernel-level threads package 2) Synchronization
More informationThe Unix Shell & Shell Scripts
The Unix Shell & Shell Scripts You should do steps 1 to 7 before going to the lab. Use the Linux system you installed in the previous lab. In the lab do step 8, the TA may give you additional exercises
More informationC Review. MaxMSP Developers Workshop Summer 2009 CNMAT
C Review MaxMSP Developers Workshop Summer 2009 CNMAT C Syntax Program control (loops, branches): Function calls Math: +, -, *, /, ++, -- Variables, types, structures, assignment Pointers and memory (***
More informationMake Your Own Linux Module CS 444/544
Make Your Own Linux Module CS 444/544 Lab Preparation: Running VM! Download the image using - wget http://cslabs.clarkson.edu/oslab/syscall_lab.vdi! Applications -> Accessories-> VirtualBox! In Virtual
More informationKernel. Kernel = computer program that connects the user applications to the system hardware Handles:
Kernel programming Kernel Kernel = computer program that connects the user applications to the system hardware Handles: Memory management CPU scheduling (Process and task management) Disk management User
More informationIntroduction to the Linux Kernel. Hao-Ran Liu
Introduction to the Linux Kernel Hao-Ran Liu The history Initially developed by Linus Torvalds in 1991 Source code is released under GNU Public License (GPL) If you modify and release a program protected
More informationUniversity of Texas at Arlington. CSE Spring 2018 Operating Systems Project 4a - The /Proc File Systems and mmap. Instructor: Jia Rao
University of Texas at Arlington CSE 3320 - Spring 2018 Operating Systems Project 4a - The /Proc File Systems and mmap Instructor: Jia Rao Introduction Points Possible: 100 Handed out: Apr. 20, 2018 Due
More informationPRINCIPLES OF OPERATING SYSTEMS
PRINCIPLES OF OPERATING SYSTEMS Tutorial-1&2: C Review CPSC 457, Spring 2015 May 20-21, 2015 Department of Computer Science, University of Calgary Connecting to your VM Open a terminal (in your linux machine)
More informationDeveloping Real-Time Applications
Developing Real-Time Applications Real Time Operating Systems and Middleware Luca Abeni luca.abeni@unitn.it Characterised by temporal constraints deadlines Concurrent (application: set of real-time tasks)
More informationCSC369 Lecture 2. Larry Zhang
CSC369 Lecture 2 Larry Zhang 1 Announcements Lecture slides Midterm timing issue Assignment 1 will be out soon! Start early, and ask questions. We will have bonus for groups that finish early. 2 Assignment
More informationCSC369 Lecture 2. Larry Zhang, September 21, 2015
CSC369 Lecture 2 Larry Zhang, September 21, 2015 1 Volunteer note-taker needed by accessibility service see announcement on Piazza for details 2 Change to office hour to resolve conflict with CSC373 lecture
More informationFall 2017 :: CSE 306. File Systems Basics. Nima Honarmand
File Systems Basics Nima Honarmand File and inode File: user-level abstraction of storage (and other) devices Sequence of bytes inode: internal OS data structure representing a file inode stands for index
More informationCS 0449 Project 4: /dev/rps Due: Friday, December 8, 2017, at 11:59pm
CS 0449 Project 4: /dev/rps Due: Friday, December 8, 2017, at 11:59pm Project Description Standard UNIX and Linux systems come with a few special files like /dev/zero, which returns nothing but zeros when
More informationCENG 334 Computer Networks. Laboratory I Linux Tutorial
CENG 334 Computer Networks Laboratory I Linux Tutorial Contents 1. Logging In and Starting Session 2. Using Commands 1. Basic Commands 2. Working With Files and Directories 3. Permission Bits 3. Introduction
More informationECE 550D Fundamentals of Computer Systems and Engineering. Fall 2017
ECE 550D Fundamentals of Computer Systems and Engineering Fall 2017 The Operating System (OS) Prof. John Board Duke University Slides are derived from work by Profs. Tyler Bletsch and Andrew Hilton (Duke)
More informationTecniche di debugging nel kernel Linux. Andrea Righi -
Tecniche di debugging nel kernel Linux Agenda Overview (kernel programming) Kernel crash classification Debugging techniques Example(s) Q/A What's a kernel? The kernel provides an abstraction layer for
More informationOperating System Labs. Yuanbin Wu
Operating System Labs Yuanbin Wu cs@ecnu Operating System Labs Introduction to Unix (*nix) Course Overview Operating System Labs Introduction to Unix (*nix) Course Overview Unix / *nix What A family of
More informationCache Lab Implementation and Blocking
Cache Lab Implementation and Blocking Lou Clark February 24 th, 2014 1 Welcome to the World of Pointers! 2 Class Schedule Cache Lab Due Thursday. Start soon if you haven t yet! Exam Soon! Start doing practice
More information15-122: Principles of Imperative Computation
15-122: Principles of Imperative Computation Lab 0 Navigating your account in Linux Tom Cortina, Rob Simmons Unlike typical graphical interfaces for operating systems, here you are entering commands directly
More informationA process. the stack
A process Processes Johan Montelius What is a process?... a computation KTH 2017 a program i.e. a sequence of operations a set of data structures a set of registers means to interact with other processes
More informationSystem Calls (Φροντιστήριο για την 3η σειρά) Dimitris Deyannis
System Calls (Φροντιστήριο για την 3η σειρά) Dimitris Deyannis deyannis@csd.uoc.gr Kernel Core of the operating system Mediates access to computer resources Memory Management Device Management System Calls
More informationIntroduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras
Introduction to Operating Systems Prof. Chester Rebeiro Department of Computer Science and Engineering Indian Institute of Technology, Madras Week 03 Lecture 12 Create, Execute, and Exit from a Process
More informationLectures 5-6: Introduction to C
Lectures 5-6: Introduction to C Motivation: C is both a high and a low-level language Very useful for systems programming Faster than Java This intro assumes knowledge of Java Focus is on differences Most
More informationOPERATING SYSTEMS ASSIGNMENT 4 FILE SYSTEMS
OPERATING SYSTEMS ASSIGNMENT 4 FILE SYSTEMS The xv6 file system provides Unix-like files, directories, and pathnames, and stores its data on an IDE disk for persistence. The file-system addresses several
More informationItron Riva Kernel Module Building
Itron Riva Kernel Module Building Table of Contents Introduction... 2 Creating the Project Directory... 2 Creating the Makefile... 3 Creating main.c... 5 Building The Kernel Module... 6 1 Introduction
More informationHow to Use This Lab Manual
3 Contents How to Use This Lab Manual........................................ 5 Lab 1: Setting Up the Student System.................................. 7 Lab 2: Installing Fedora............................................
More informationTDDB68 Lesson 2 Pintos Assignments 3 & 4. Mattias Eriksson 2010 (or
TDDB68 Lesson 2 Pintos Assignments 3 & 4 Mattias Eriksson 2010 mater@ida.liu.se (or mattias.eriksson@liu.se) some slides by Viacheslav Izosimov 2007-2008 Instead of Motivation Plan for something like this:
More informationMPATE-GE 2618: C Programming for Music Technology. Syllabus
MPATE-GE 2618: C Programming for Music Technology Instructor Dr. Schuyler Quackenbush schuyler.quackenbush@nyu.edu Lab Teaching Assistant TBD Description Syllabus MPATE-GE 2618: C Programming for Music
More informationHint #1. Define a syscall
PC 5 System call Exercice Clone the git repository git clone http://gitlab.montefiore.ulg.ac.be/info0940/kernel-4.4.50.git Make a "PC4" branch Add a sys_forkexec system call It is the equivalent of calling
More informationExercise 1: Basic Tools
Exercise 1: Basic Tools This exercise is created so everybody can learn the basic tools we will use during this course. It is really more like a tutorial than an exercise and, you are not required to submit
More informationIntroduction to OS Processes in Unix, Linux, and Windows MOS 2.1 Mahmoud El-Gayyar
Introduction to OS Processes in Unix, Linux, and Windows MOS 2.1 Mahmoud El-Gayyar elgayyar@ci.suez.edu.eg Mahmoud El-Gayyar / Introduction to OS 1 Processes in Unix, Linux, and Windows Unix pre-empted
More informationProcesses. Johan Montelius KTH
Processes Johan Montelius KTH 2017 1 / 47 A process What is a process?... a computation a program i.e. a sequence of operations a set of data structures a set of registers means to interact with other
More informationLINUX KVM FRANCISCO JAVIER VARGAS GARCIA-DONAS CLOUD COMPUTING 2017
LINUX KVM FRANCISCO JAVIER VARGAS GARCIA-DONAS CLOUD COMPUTING 2017 LINUX KERNEL-BASED VIRTUAL MACHINE KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware
More informationLaboratory Assignment #3. Extending scull, a char pseudo-device
Laboratory Assignment #3 Extending scull, a char pseudo-device Value: (See the Grading section of the Syllabus.) Due Date and Time: (See the Course Calendar.) Summary: This is your first exercise that
More informationTDDB68 Lesson 3. Simon Ståhlberg
TDDB68 Lesson 3 Simon Ståhlberg Contents Overview of lab 3 A: Exec, wait, exit B: Program arguments C: Termination of ill-behaving user processes Testing your implementation Overview of lab 4 File system
More informationPathFinder-XD for MIPS Powered Devices. Simulator
v.1.0.6, 15 th January 2013 PathFinder-XD for MIPS Powered Devices Simulator Contents 1. Introduction 2 2. Installation 2 2.1 Windows Installation 2 2.2 Linux Installation 2 3. Using PathFinder-XD with
More informationProject No. 2: Process Scheduling in Linux Submission due: April 12, 2013, 11:59pm
Project No. 2: Process Scheduling in Linux Submission due: April 12, 2013, 11:59pm PURPOSE Getting familiar with the Linux kernel source code. Understanding process scheduling and how different parameters
More informationCPSC Tutorial 17
CPSC 457 - Tutorial 17 Loadable Kernel Modules Department of Computer Science University of Calgary March 27, 2012 1 / 10 Reminder Homework 4 is due to March 31, 2012 at 11:59pm (Saturday) Thursday, March
More informationIntroduction. This project will focus primarily on processes.
Project 2 Processes Introduction This project will focus primarily on processes. In this project, you will become familiar with: 1. Locks for kernel-level data structures; concurrency. 2. Implementing
More informationLinux Device Drivers. 3. Char Drivers. 1. Introduction 2. Kernel Modules 3. Char Drivers 4. Advanced Char Drivers 5. Interrupts
Linux Device Drivers Dr. Wolfgang Koch Friedrich Schiller University Jena Department of Mathematics and Computer Science Jena, Germany wolfgang.koch@uni-jena.de Linux Device Drivers 1. Introduction 2.
More informationKurt Schmidt. October 30, 2018
to Structs Dept. of Computer Science, Drexel University October 30, 2018 Array Objectives to Structs Intended audience: Student who has working knowledge of Python To gain some experience with a statically-typed
More informationLinux Device Driver in Action (LDDiA)
Linux Device Driver in Action (LDDiA) Duy-Ky Nguyen 2015-04-30 1. On Memory Any unit under user control must have a controller board (CB) with a controller unit (CU) and several devices (Dev.x) doing what
More informationDistribution Kernel Security Hardening with ftrace
Distribution Kernel Security Hardening with ftrace Because sometimes your OS vendor just doesn't have the security features that you want. Written by: Corey Henderson Exploit Attack Surface Hardening system
More informationProject 1: Syscalls for synchronization 1
Project 1: Syscalls for synchronization 1 Submit a gzipped tarball of your code to CourseWeb. Due: Monday, February 4, 2019 @11:59pm Late: Wednesday, February 6, 2019 @11:59pm with 10% reduction per late
More informationCPSC 8220 FINAL EXAM, SPRING 2016
CPSC 8220 FINAL EXAM, SPRING 2016 NAME: Questions are short answer and multiple choice. For each of the multiple choice questions, put a CIRCLE around the letter of the ONE correct answer. Make sure that
More informationConfiguring and Building Palacios/Linux
Configuring and Building Palacios/Linux 1/3/2011 1. Check out the Palacios repository The central Palacios repository is directly accessible from newskysaw.cs.northwestern.edu and newbehemoth.cs.northwestern.edu.
More informationELEC 377 Operating Systems. Week 4 Lab 2 Tutorial
ELEC 377 Operating Systems Week 4 Tutorial Modules Provide extensions to the kernel Device Drivers File Systems Extra Functionality int init_module() {.. do initialization stuff.... tell the kernel what
More informationCSE 333 SECTION 3. POSIX I/O Functions
CSE 333 SECTION 3 POSIX I/O Functions Administrivia Questions (?) HW1 Due Tonight HW2 Due Thursday, July 19 th Midterm on Monday, July 23 th 10:50-11:50 in TBD (And regular exercises in between) POSIX
More informationA Crash Course in C. Steven Reeves
A Crash Course in C Steven Reeves This class will rely heavily on C and C++. As a result this section will help students who are not familiar with C or who need a refresher. By the end of this section
More informationWelcome to Linux Foundation E-Learning Training
Welcome to Linux Foundation E-Learning Training by The Linux Foundation 12/17/2017 Version 6.32. All rights reserved. Specic instructions for your course will be addressed in the Appendix. After reading
More informationProject #1: Tracing, System Calls, and Processes
Project #1: Tracing, System Calls, and Processes Objectives In this project, you will learn about system calls, process control and several different techniques for tracing and instrumenting process behaviors.
More informationSimple char driver. for Linux. my_first.c: headers. my_first.c: file structure. Calcolatori Elettronici e Sistemi Operativi.
Calcolatori Elettronici e Sistemi Operativi Simple char driver Simple char driver for Linux Code organization my_first.c driver code: Headers Macro definitions Device structure definition Globals and module
More informationProject 2: Shell with History1
Project 2: Shell with History1 See course webpage for due date. Submit deliverables to CourSys: https://courses.cs.sfu.ca/ Late penalty is 10% per calendar day (each 0 to 24 hour period past due). Maximum
More informationexample: name1=jan name2=mike export name1 In this example, name1 is an environmental variable while name2 is a local variable.
Bourne Shell Programming Variables - creating and assigning variables Bourne shell use the set and unset to create and assign values to variables or typing the variable name, an equal sign and the value
More informationLecture 3. Introduction to Unix Systems Programming: Unix File I/O System Calls
Lecture 3 Introduction to Unix Systems Programming: Unix File I/O System Calls 1 Unix File I/O 2 Unix System Calls System calls are low level functions the operating system makes available to applications
More informationRTAI 3.8 ON Ubuntu(9.10)-Linux-kernel :
RTAI 3.8 ON Ubuntu(9.10)-Linux-kernel : 2.6.31.8 1: Installing Rtai 3.8 Manuel Arturo Deza The following Tech Report / Guide is a compendium of instructions necessary for installing RTAI 3.8 on Ubuntu
More information1. Overview This project will help you understand address spaces and virtual memory management.
Project 2--Memory Worth: 12 points Assigned: Due: 1. Overview This project will help you understand address spaces and virtual memory management. In this project, you will implement an external pager,
More information7.3 Simplest module for embedded Linux drivers
401 7.3 Simplest module for embedded Linux drivers Section 7.1 introduce a simple Linux program Hello World, which is run in user mode applications, we now introduce a run in kernel mode Hello World program,
More information