Writing UnixWare 7 Device Drivers is a high level course that is taught with task-oriented lectures and hands-on labs.
721 - Introduction to SCO UnixWare 7 Internals
721 - Introduction to SCO UnixWare 7 Internals
731 - Writing UnixWare 7 Device Drivers
1.0 Introduction 1.1 What this course covers. 1.2 What this course does not cover. 1.3 Typographical conventions. 1.4 Course layout. 1.5 How labs are conducted. 2.0 Overview of Device Drivers 2.1 Overview of the Unix kernel architecture. 2.2 The function of a device driver. 2.3 Driver types: 2.3.1 Character: open/close/read/write/ioctl. 2.3.2 Block: 2.3.2.1 target: open/close/strategy/ioctl. 2.3.2.2 HBAs: overview of concepts, routines covered later. 2.3.3 The merging of character and block in DDI8. 2.3.4 Stream: putqueue/getqueue. 2.4 Review of the /etc/conf directory structure. 3.0 Driver Paradigms and concepts 3.1 Linking - Dynamic and Static 3.1.1 In DDI8 - all drivers written the same 3.1.2 Pre DDI8 - Use of wrappers 3.1.3 OSR5 - all static 3.2 Configuration - Auto or otherwise 3.2.1 In DDI8 - all auto-configuring. 3.2.2 Pre DDI8 - Optional 3.2.3 OSR5 - no auto-tuning 3.3 Intel-Specific Driver Issues 3.3.1 I/O addresses and the in() and out() routines. 3.3.2 Busy/Wait, polling, interrupts, IPLs, and locks. 3.3.3 Memory-Mapped I/O (i.e. dual-ported ram) and its associated routines. 3.3.4 DMA and its associated routines. 3.4 Driver Model 3.4.1 Non-streams: 3.4.1.1 Character - traditional - no different than block in DDI8 3.4.1.2 Block. The UnixWare SDI interface (target/HBA) 3.4.2 Streams: 3.4.2.1 MDI 3.4.2.2 DLPI 3.4.2.3 TTY 4.0 A Simple Driver 4.1 The UnixWare DDI/DKI. 4.2 Creating a simple Driver Software Package (DSP) 4.2.1 The Master file. 4.2.2 The System file. 4.2.3 The Node file. 4.2.4 The Drvmap file. 4.2.5 The Space.c file. 4.2.6 The makefile file. 4.2.7 The Driver.o file 4.2.7.1 The _load(), _unload() and initialization routines. 4.2.7.2 and the cmn_err() routine. 4.2.8 The id commands. 4.3 LAB: static linking of this driver / reboot / restart / test. 4.4 The DSP changes and wrappers needed for pre-DDI8 dynamic drivers. 4.5 LAB: make the driver dynamic / test, no reboot, no restart 4.6 Auto-configuring drivers 4.7 Additional DSP files: 4.7.1 The Autotune file. 4.7.2 Others breifly mentioned. 5.0 Flesh Of A Basic Driver 5.1 The config() routine 5.2 The devinfo() routine 5.2.1 BCBs, physrec's, physrecalloc(), bcballoc() and bcbprep() 5.3 The open() routine. 5.4 The close() routine. 5.5 LAB: Modify driver from above and use I/O redirection to open it. 5.6 The startio() and read()/write() routines. 5.7 The ioctl() routine. 5.8 The interrupt() routine, IPLs, and multi-threaded IPLs/locks 5.9 Unreliable devices, timeouts, and associated routines. 5.10 LAB: Modify previous lab and use mouse-test program. 6.0 Block Drivers 6.1 A block-devicer's DSP. 6.2 More about BCBs and bufbreakup(). 6.3 The strategy() routine (pre-DDI8). 6.4 LAB: a RAM-disk driver. 7.0 Streams Drivers 7.1 Where did streams come from? 7.2 Overview of a streams driver (head, driver, queues, modules). 7.3 A streams device's DSP. 7.4 Streams device driver routines: getqueue(), putqueue(), etc. 7.5 Streams flow-control. 7.6 LAB: A streams-driven bus-mouse driver. 7.7 Overview of multiplexing streams drivers. 8.0 The Host and Target Driver Scheme for Storage Devices 8.1 Review of SDI architecture 8.2 The HBA initialization sequence and the claiming of Target devices. 8.3 I/O sequences and their relationship to block (Target) drivers. 8.4 Hot-plug events in SDI (HBA and Disk) 8.5 Layered driver overview 8.6 MPIO overview



