Writing Linux Device Drivers In Assembly Language (+sample device driver software)
Date: 06 May 2011, 19:44
|
Note: you can free download this material from http://webster.cs.ucr.edu/Page_Linux/index.html. This document will attempt to describe how to write Linux device drivers (modules) in assembly language. This document is not self-contained; that is, you cannot learn everything you need to know about Linux device drivers (assembly or otherwise) from this document. Instead, this document is based on the text "Linux Device Drivers, Second Edition" by Rubini & Corbet (published by O'Reilly & Associates, ISBN 0-596-00008-1) - you can download it from our site - http://www.freebookspot.com/Books-Linux%20Device%20Drivers,%202nd%20Edition.htm That text explains how to write device drivers using C, this document parallels that text, converting the examples to assembly language. However, to keep this document relatively short, this document does not copy the information that is language-independent from the text. Therefore, you'll need a copy of that text to read along with this document so the whole thing makes sense. Rubini & Corbet have graciously chosen to make their text freely available under the GNU Free Documentation License 1.1. Therefore, this text inherits that license. You can learn more about the GNU Free Documentation License from http://www.oreilly.com/catalog/linuxdrive2/chapter/licenseinfo.html The programming examples in this text are generally translations of the C code appearing in "Linux Device Drivers" so they also inherit Rubini & Corbet's licensing terms. Please see the section on licensing in "Linux Device Drivers, Second Edition," orthe text file LICENSE with the distributed software for more details on the licensing terms. If you're not reading this copy of "Webster" you'll probably want to check out the Webster website at http://webster.cs.ucr.edu where you'll find the latest copy of this text and its accompanying software. Contents 0 Preface and Introduction 0.1 Randy's Introduction 0.2 Why Assembly Language? 0.3 Assembly Language Isn't That Bad 1 An Introduction to Device Drivers 2 Building and Running Modules 2.1 The "Hello World" Driver Module 2.2 Compiling and Linking Drivers 2.3 Version Dependency 2.4 Kernel Modules vs. Applications 2.5 Kernel Stack Space and The Current Process 2.6 Compiling and Loading 2.6.1 A Make File for SKULL 2.7 Version Dependency and Installation Issues 2.8 Platform Dependency 2.9 The Kernel Symbol Table 2.10 Initialization and Shutdown 2.11 Error Handling in init_module 2.12 The Usage Count 2.13 Resource Allocation (I/O Ports and Memory) 2.14 Automatic and Manual Configuration 2.15 The SKULL Module 2.16 Kernel Versions and HLA Header Files 2.16.1 Converting C Header Files to HLA and Updating Header Files 2.16.2 Converting C Structs to HLA Records 2.16.3 C Calling Sequences and Wrapper Functions/Macros 2.16.4 Kernel Types vs. User Types 2.17 Some Simple Debug Tools 3 Character Drivers 3.1 The Design of scullc 3.2 Major and Minor Numbers 3.3 Dynamic Allocation of Major Numbers 3.4 Removing a Driver From the System 3.5 dev_t and kdev_t 3.6 File Operations 3.6.1 The llseek Function 3.6.2 The read Function 3.7 The write Function 3.8 The readdir Function 3.8.1 The poll Function 3.8.2 The _ioctl Function 3.8.3 The mmap Function 3.8.4 The open Function 3.8.5 The flush Function 3.8.6 The release Function 3.8.7 The fsync Function 3.8.8 The fasync Function 3.8.9 The lock Function 3.8.10 The readv and writev Functions 3.8.11 The owner Field 3.9 The file Record 3.9.1 file.f_mode : linux.mode_t 3.9.2 file.f_pos : linux.loff_t 3.9.3 file.f_flags : dword 3.9.4 file.f_op : linux.file_operations 3.9.5 file.private_data : dword 3.9.6 file.f_dentry : linux.dentry 3.10 Open and Release 3.10.1 The Open Procedure 3.10.2 The release Procedure 3.10.3 Kernel Memory Management (kmalloc and kfree) 3.10.4 The scull_device Data Type 3.10.5 A (Very) Brief Introduction to Race Conditions 3.10.6 The read and write Procedures 3.11 The scullc Driver 3.11.1 The scullc.hhf Header File 3.12 The scullc.hla Source File 3.13 Debugging Techniques 3.13.1 Code Reviews 3.13.2 Debugging By Printing 3.13.2.1 linux.printk 3.13.2.2 Turning Debug Messages On and Off 3.13.2.3 Debug Zones 3.13.3 Debugging by Querying PassWord: www.freebookspot.com
|
DISCLAIMER:
This site does not store Writing Linux Device Drivers In Assembly Language (+sample device driver software) on its server. We only index and link to Writing Linux Device Drivers In Assembly Language (+sample device driver software) provided by other sites. Please contact the content providers to delete Writing Linux Device Drivers In Assembly Language (+sample device driver software) if any and email us, we'll remove relevant links or contents immediately.