Linux Driver教程PPT

国内外有很多大学的教学PPT都是公开,这一点十分有利于大家学习。

下面的链接,是来自 旧金山大学(University of San Francisco)的计算机科学系(department of computer science)的教程,讲述Linux Driver,

http://cs.usfca.edu/~cruse/cs635/


Course Textbooks:

  • Daniel P. Bovet and Marco Cesati, 
Understanding the Linux Kernel (Third Edition)
(O'Reilly Media, Incorporated (2006) ISBN 0-596-00565-2

Corbet, Rubini and Kroah-Hartman,  Linux Device Drivers (3rd Edition) 
(O'Reilly Media, Incorporated, 2005) ISBN 0-596-00590-3
Learning Outcomes:
  • You will be able to read and write code-modules for an operating system
  • You will be able to implement customized extensions to the Linux kernel
  • You will be able to craft your own tools that let users control their PC
  • You will be able to identify system features that impact performance

Resources

  • The classic C language tutorial textbook and reference guide by Kernighan and Ritchie
  • The Linux Kernel Archives (where you can download the latest official kernel release)
  • Here you can read the GNU General Purpose License (GPL) online
  • Homepage for the Linux Cross-Reference Project for browsing kernel source files
  • Official Data Sheet for the Dallas Semiconductor DS12887 Real-Time Clock and CMOS Memory
  • A typical CMOS RAM Memory-map for PC/AT compatible machines (at www.bioscentral.com)
  • Documentation for the Linux Executable and Linkable Format (ELF) files: elf.pdf
  • Online summary of UNIX Standard Error Codes (for use in our device drivers)
  • Official IA-32 Programmer Reference Manuals, Intel Corporation
  • Official industry standard: Intel Multiprocessor Specification (version 1.4) (.pdf)
  • Reference Manual for the I/O Controller Hub 6 (ICH6) Family Datasheet (.pdf), Intel Corporation
  • Official datasheet for the 16550 Serial UART (.pdf format), National Semiconductor, Inc
  • Online in-depth tutorial: The Serial UART by Lammert Bies
  • Online article: API changes in the 2.6 kernel series posted by Jonathan Corbet
  • Articles by Jonathan Corbet and David Howells specifically about the 'workqueue' API changes
  • Intel PCI-express Gigabit Ethernet controllers Open Source Software Developer's Manual (.pdf format)
  • Online guide to ANSI terminal escape-sequences

Readings

  • For Tue, Aug 28: Linux Device Drivers: Chapter 1 "An Introduction to Device Drivers" and Chapter 2: "Building and Running Modules"
  • For Thu, Aug 30: Understanding the Linux Kernel: Preface and Chapter 1 "Introduction"
  • For Tue, Sep 04: Linux Device Drivers: Chapter 3 "Char Drivers"
  • For Thu, Sep 06: Understanding the Linux Kernel: Chapter 2 "Memory Addressing"
  • For Tue, Sep 11: Linux Device Drivers: Chapter 4 "Debugging Techniques"
  • For Thu, Sep 13: Understanding the Linux Kernel: Chapter 3 "Processes"
  • For Tue, Sep 18: Linux Device Drivers: Chapter 5 "Concurency and Race Conditions"
  • For Thu, Sep 20: Understanding the Linux Kernel: Chapter 5 "Kernel Synchronization"
  • For Tue, Sep 25: No new reading assignment: submit completed programming project #1.
  • For Thu, Sep 27: Understanding the Linux Kernel: Chapter 4 "Interrupts and Exceptions"
  • For Tue, Oct 02: No new reading assignment: review for Midterm Exam I.
  • For Thu, Oct 04: Understanding the Linux Kernel: Chapter 8 "Memory Management"
  • For Tue, Oct 09: Linux Device Drivers: Chapter 8 "Allocating Memory"
  • For Thu, Oct 11: Read three sections in PC16550D Serial UART: "General Description", "Features", and "Registers" 
    and browse The Serial UART online tutorial by Lammert Bies
  • For Tue, Oct 16: Linux Device Drivers: Chapter 6 "Advanced Char Driver Operations"
  • For Thu, Oct 18: Linux Device Drivers: Chapter 7 "Time, Delays, and Deferred Work"
  • For Tue, Oct 23: No new reading assignment: submit completed programming project #2.
  • For Thu, Oct 25: Understanding the Linux Kernel: Chapter 6 "Timing Measurements"
  • For Tue, Oct 30: Linux Device Drivers: Chapter 9 "Communicating with Hardware"
  • For Thu, Nov 01: Linux Device Drivers: Chapter 12 "PCI Drivers"
  • For Tue, Nov 06: Understanding the Linux Kernel: Chapter 7 "Process Scheduling"
  • For Thu, Nov 08: PCIe GbE Controllers Open Source Software Developer's Manual (.pdf format): 
    Read Chapter 1: "Introduction" and Chapter 14: "General Initialization and Reset Operation"
  • For Tue, Nov 13: PCIe GbE Controllers Open Source Software Developer's Manual (.pdf format): 
    Read Chapter 3: "Receive and Transmit Descriptors"
  • For Thu, Nov 15: No new reading assignment: review for Midterm Exam II.
  • For Tue, Nov 20: Understanding the Linux Kernel: Chapter 9 "Process Address Space"
  • For Thu, Nov 22: No new reading assignment: University holiday (Thanksgiving recess)
  • For Tue, Nov 27: Understanding the Linux Kernel: Chapter 10 "System Calls"
  • For Thu, Nov 29: Understanding the Linux Kernel: Chapter 10 "Interrupt Handling"
  • For Tue, Dec 04: No new reading assignment: review for Final Examination.

Systems Software

  • Utility program: mmake.cpp (a tool you can use for compiling Linux 2.6 kernel modules)
  • Development tool: newmod.cpp builds skeleton C code for a new Linux Kernel Module
  • Development tool: newinfo.cpp builds the skeleton for an LKM that creates a '/proc' file -- obsoleted by kernel 2.6.26
  • Development tool: newproc.cpp replacement for the obsolete 'newinfo.cpp' utility above -- posted on 07/17/2008
  • Device-driver: dram.c needed to allow reading from your workstation's physical memory -- revised on 02/06/2008
  • Utility program: fileview.cpp (a navigation tool for viewing the contents of binary files)
  • Utility program: setconsole.cpp (a tool for redirecting your 'printk()' console messages)
  • Utility program: dump.cpp (a tool that displays the contents of any file in hex and ascii)
  • Utility program: ljpages.cpp (a tool that submits your program source to a laser printer)
  • Utility program: iopl3.cpp (a tool by Alex Fedosov that lets user-programs do direct I/O) -- revised on 10/13/2007
  • Utility program: liveview.cpp (enhancement of 'fileview' for viewing volatile device-files)

Handouts

  • Quick course-preview: intro635.ppt (PowerPoint Slides)
  • 0203-635-01: Course syllabus(.PDF)
  • lesson1.ppt (PowerPoint Slides)
  • Demo program: hello.c illustrates a minimal application-program, written in the C language
  • Kernel module: kello.c modifies the 'hello.c' program, so it becomes a Linux kernel module
  • lesson2.ppt (PowerPoint Slides)
  • Demo program: mycat.c shows how you could implement your own emulation for the 'cat' command
  • Kernel module: cmos.c shows how to create a pseudo-file that will display some device information -- revised on 11/30/2007
  • Kernel module: moreinfo.c shows how '/proc' files can be designed to display a lot more information
  • lesson3.ppt (PowerPoint Slides)
  • Kernel module: tempcdev.c shows how a kernel module can create a temporary device special file -- revised on 9/03/2007
  • Kernel module: seesetfs.c to clarify the effect of the misleadingly-named 'set_fs()' macro-statement
  • Demo program: devtfix.cpp it clarifies what 'dev_t' parameter-value to use in a 'mknod()' system-call
  • lesson4.ppt (PowerPoint Slides)
  • Demo program: elfcheck.cpp illustrating use of standard file-I/O library functions by a user program
  • Kernel module: cmosram.c showing the implementation for a simple character-mode device-driver
  • lesson5.ppt (PowerPoint Slides)
  • Kernel module: tasklist.c creates a pseudo-file that will show a list of all the system's active tasks
  • lesson6.ppt (PowerPoint Slides)
  • Demo module: stash.c illustrates the use of 'sleeping' and 'waking' in a character device-driver
  • lesson7.ppt (PowerPoint Slides)
  • Demo program: concur1.cpp showing why thread-synchronization is needed in multiprogramming
  • Demo program: concur2.cpp revises 'concur1.cpp' so it incorporate the use of 'mutual exclusion'
  • Demo program: yielding.cpp demonstrates the 'nanosleep' system-call in Linux multiprogramming
  • Demo program: concur3.cpp revises 'concur2.cpp' so it uses 'nanosleep' to reduce 'busy-waiting'
  • Demo module: newstash.c uses kernel semaphores to remove 'race conditions' observed in 'stash.c'
  • lesson8.ppt (PowerPoint Slides) -- corrected 'cmpxchg' (slide 20) on 9/19/2007
  • Demo program: showgdt.cpp shows the CPU's Global Descriptor Table (if our 'dram.ko' is installed)
  • Code-fragment: cmosread.asm a commented disassembly of the kernel's 'rtc_cmos_read()' function
  • Student-contributed tool: findFunction.sh (automates the dissassembly of a specified kernel-function)
  • lesson9.ppt (PowerPoint Slides)
  • Exercise solution: cmpxchg.cpp (to illustrate the effect of the 'cmpxchg' instruction upon the ZF-flag)
  • lesson10.ppt (PowerPoint Slides)
  • Demo program: showidt.cpp shows the CPU's Interrupt Descriptor Table (if our 'dram.ko' is installed)
  • Demo module: smpinfo.c shows the MP Configuration Table and Base Configuration Table's entries
  • Demo module: ioapic.c lets users view the current register-values in the memory-mapped I/O APIC -- revised on 9/26/2007
  • lesson11.ppt (PowerPoint Slides)
  • Demo module: ioremap.c for illustrating effects of the kernel's 'ioremap()' and 'iounmap()' functions
  • Exercise solution: delaysix.cpp showing one possible way to perform the desired six-second delay
  • lesson12.ppt (PowerPoint Slides)
  • Demo module: pgdir.c for providing a visualization of the current task's 'mapped' memory regions
  • Demo module: cr3.c creates a pseudo-file showing current values held in registers CR3 and CR4
  • Demo module: mm.c creates a pseudo-file showing information from a task's 'mm_struct' object
  • Demo module: vma.c creates a pseudo-file that shows a task's list of 'vm_area_struct' objects
  • Demo program: domalloc.cpp examines the effect of 'malloc()' on a task's kernel data-structures
  • Demo program: dofork.cpp examines the effect of 'fork()' on the list of 'vm_area_struct' objects
  • lesson13.ppt (PowerPoint Slides)
  • Demo program: testuart.cpp uses 'loopback' mode to illustrate programming of the serial UART
  • Demo program: loopback.cpp showing how a UART could support interprocess communication
  • Demo programs: uartecho.cpp and trycable.cpp for checking that your null-modem cable works
  • lesson14.ppt (PowerPoint Slides)
  • Demo module: uartintr.c provides an example of an interrupt-handler written for the serial-UART
  • lesson15.ppt (PowerPoint Slides)
  • Demo module: vram.c this device-driver provides user-mode access to the video display memory
  • Demo program: rotation.cpp uses 'vram.c' to perform rotation of (red,green,blue) color-components
  • Demo program: inherit.cpp demonstrates inheritance of a parent's memory-map by a child-process
  • lesson16.ppt (PowerPoint Slides)
  • Demo module: baudrate.c shows the implementation of an 'ioctl()' method in a Linux device-driver
  • Demo program: setbaud.cpp allows users to query or modify the serial-UART's current baud-rate -- revised on 10/21/2007
  • lesson17.ppt (PowerPoint Slides)
  • Demo module: tasklet.c illustrates use of a Linux 'tasklet' for doing bottom-half interrupt handling
  • Working example: myserial.c shows a possible solution to the assigned programming project #2
  • lesson18.ppt (PowerPoint Slides)
  • Demo module: foo.c a very simple device-driver that lets application programs read 'jiffies_64'
  • Demo program: watchfoo.cpp a program that continually displays the current 'jiffies_64' value
  • Demo module: timedfoo.c this driver uses a kernel timer to curtail the frequency of 'read()' calls
  • Demo module: trytimer.c illustrating how a kernel module might utilize a dynamic kernel timer
  • Demo module: trymacro.c illustrating use of 'sizeof' and 'offsetof', plus the 'container_of()' macro
  • Demo module: tryworkq.c illustrating the use of a 'workqueue' for scheduling some future action
  • Demo module: announce.c shows how a kernel module can display its messages in a window
  • Demo module: defermsg.c uses a workqueue to delay a message's appearance for ten seconds
  • lesson19.ppt (PowerPoint Slides)
  • Demo program: pciprobe.cpp shows how software can enumerate a system's PCI device-functions
  • Demo module: utsname.c shows how a module can find out the name of the node it is running on
  • Demo module: tigon3.c shows our network interface's MAC-address and PCI configuration space
  • Exercise solution: anchor.c modifies 'tigon3.c' so it performs the same function on Intel 82573L nic
  • lesson20.ppt (PowerPoint Slides)
  • Demo program: noncanon.cpp shows how applications can enable 'noncanonical' keyboard input
  • Demo program: mapwatch.cpp gives a dynamic visualization of current 'permanent' kernel-maps
  • Demo module: pkmaps.c creates the two pseudo-files required by our 'mapwatch' program above
  • Demo program: smpwatch.cpp shows a real-time display of dual-CPU interrupt-activity under Linux
  • Kernel module: smpwatch.c this driver is required when running our Linux 'smpwatch.cpp' application
  • lesson21.ppt (PowerPoint Slides)
  • Demo module: gbstatus.c it allows users to see the Intel 82573L controller's Device Status register
  • Developer tool: igbe.c to aid with debugging of a device-driver for Intel's GigaBit Ethernet controller
  • lesson22.ppt (PowerPoint Slides)
  • Demo module: tryreset.c performs an experiment with the 'reset' capabilities of the 82573L controller
  • lesson23.ppt (PowerPoint Slides)
  • Demo module: seereset.c shows the sequence of register state-changes during 'reset' of the 82573L
  • Kernel module: setupnic.c performs a system administration chore needed by a 82573L device-driver
  • Shell script: setupnic it will accelerate our attempts at loading the foregoing 'setupnic.ko' kernel-object
  • Database template: ethers for translating from Ethernet-address to Hostname on our 'anchor' cluster
  • Kernel module: audio.c showing one possible way of answering Question V on our Midterm Exam II
  • lesson24.ppt (PowerPoint Slides)
  • Kernel module: xmit1000.c supports writing a message to our '/dev/nic' device-file via Intel's 82573L -- revised on 11/24/2007
  • lesson25.ppt (PowerPoint Slides)
  • Kernel module: recv1000.c receives packets sent by our 'xmit1000.c' driver via Intel's 82573L nic
  • lesson26.ppt (PowerPoint Slides)
  • Kernel module: nic.c combines 'write()' and 'read()' from previous 82573L drivers, and adds 'ioctl()'
  • Demo program: sendto.cpp uses 'ethers' lookup and 'ioct()' call to send packets to a specific node
  • lesson27.ppt (PowerPoint Slides)
  • Demo program: syswrite.cpp shows how applications can issue a system-call directly to the kernel
  • Demo module: myexport.c this module can 'export' the address of the kernel's 'sys_call_table[]' array
  • Shell script: myscript automates the address-lookup and module-installation steps for 'myexport.ko'
  • Demo module: newcall.c replaces the code for an obsolete system-call with our own kernel function
  • Demo program: try17.cpp this program can be used for testing our new system-call implementation
  • Exercise solution: unused.c creates a pseudo-file that lists all the obsolete system-call ID-numbers

你可能感兴趣的:(linux,driver)