USB SUSBSYSTEM FOR MINIX SUSBSYSTEM FOR MINIX 3 A PROJECT REPORT ... Figure 7.1 Message format 1 37 ... Design of the Minix USB Subsystem 28

  • View
    212

  • Download
    0

Embed Size (px)

Text of USB SUSBSYSTEM FOR MINIX SUSBSYSTEM FOR MINIX 3 A PROJECT REPORT ... Figure 7.1 Message format 1...

  • USB SUSBSYSTEM FOR MINIX 3

    A PROJECT REPORT

    Submitted By

    ALTHAF K BACKER

    In partial fulfillment of the requirements for the Degree

    of

    Bachelor of Technology (B.Tech)

    in

    COMPUTER SCIENCE AND ENGINEERING

    SCHOOL OF ENGINEERING

    COCHIN UNIVERSITY OF SCIENCE AND TECHNOLOGY

    KOCHI-682022

    MARCH 2010

  • Division of ComputerEngineering

    School of Engineering

    Cochin University of Science & TechnologyKochi-682022

    _

    CERTIFICATE

    Certified that this is abonafiderecord of theproject work titled

    USB Subsystem for Minix 3

    Doneby

    Althaf K Backer

    of VI I I semester, Computer Science& Engineering, in theyear 2010 inpartial

    fulfillment of therequirements for theaward of Degreeof Bachelor of Technology

    inComputer Science& Engineeringof CochinUniversityof Science& Technology

    Dr. DavidPeter S. Vinod Kumar P.P Headof theDivision Project Guide

  • i

    ACKNOWLEDGEMENT

    At the outset, I thank God almighty for making my endeavor a success. I also express my

    gratitude to Dr. David Peter S., Head of Division of Computer Engineering for providing me

    with adequate facilities, ways and means by which I was able to complete this project.

    .

    I also express my sincere gratitude to my Project Guide Mr. Vinod Kumar PP, for his

    constant support and valuable suggestions without which the successful completion of this

    project would not have been possible.

    I also express my immense pleasure and thankfulness to all the teachers and staff of the

    Division of Computer Engineering, CUSAT for their cooperation and support. Last but not the

    least, I thank all others, and especially my classmates and my family members who in one way

    or another helped me in the successful completion of this work.

    Althaf K Backer

  • ABSTRACT

    MINIX 3 a microkernel based, Open Source UNIX clone which is

    POSIX compliant, MINIX is a good platform to learn and experiment, the

    present implementation that is MINIX 3 lags USB subsystem,which could

    ease programming USB device drivers , which other wise could be a tedious

    task , understanding the importance the project aims at implementing it on

    MINIX 3.

    Project focus on three essential parts of a USB Stack

    USB driver (USBD), which is an abstraction of USB and provides

    uniform interfaces namely USB driver interface (USBDI) and Host

    Controller Driver interface (HCDI). USB class drivers can be written

    on top of USBDI which is not part of project.

    Host Controller driver Interface (HCDI) , which is another layer that

    abstracts host controller drivers and provides a uniform abstraction to

    USBD as well as host controller drivers.

    Implementing host controller driver for well known host controller

    Universal Host Controller Interface (UHCI).

    Human Interface Device (HID) Class specific request at USBDI and

    dummy USB HID keyboard and mouse drivers.

    Entire worked is biased on USB 2.0 specifiation and UHCI revision 1.1.

    ii

  • List of Tables

    Table 2.0 USB revision and speed 6

    iii

  • List of Figures

    Figure 1.0 Microkernel Architecture of Minix 3 1

    Figure 1.1 Sample of /etc/system.conf for uhci-hcd 2

    Figure 1.2 Code snippet of a generic driver interface libdriver 3

    Figure 2.0 Conceptual View of USB transaction 10

    Figure 2.1 Conceptual view of frame generation in usb 1.x systems 11

    Figure 2.2 Descriptor hierarchy for a USB device with

    two configurations 13

    Figure 2.3 Detailed USB communication flow

    (chapters are of USB 2.0) 14

    Figure 2.4 Summery of USB communication flow 16

    Figure 3.0 Showing the bandwidth allocation of each type to transfers 18

    Figure 3.1 A typical transfer arrangement of the UHCI transfers 18

    Figure 3.2 UHCI Start of Frame and Frame list pointer relation 19

    Figure 3.3 Frame list pointer and bit roles 20

    Figure 3.4 Queue Head and bit roles 21

    Figure 3.5 Transfer Descriptor , roles of bit fields are explained below 22

    Figure 3.6 Transfer queuing and traversal state diagram 25

    Figure 5.0 Conceptual View of the proposed design 30

    Figure 6.0 Minix 3.1.5 on qemu 0.11.1 33

    Figure 6.1 Qemu Monitor 33

    Figure 6.2 local ssh session for compilation purpose 34

    Figure 6.3 Redirecting kernel messages 34

    Figure 6.4 Editing file from minix locally in linux using vim 35

    Figure 7.0 structure that defines message data type 36

    Figure 7.1 Message format 1 37

    Figure 7.2 Message format 2 37

    iv

  • Table of Contents

    Abstarct i

    List of Tables v

    List of Figures vi

    1. Introduction

    1.1 Introduction to Minix 3 1

    1.2 Device driver framework of Minix 3 2

    1.3 Why I choose Minix 3 ? 4

    2. Universal Serial Bus 5

    2.1 The Universal Serial Bus 5

    2.2 USB Hardware 6

    2.2.1 Host Controllers 6

    2.2.2 Usb Hubs 7

    2.2.3 Usb Devices 8

    2.3 USB Protocol elements 8

    2.3.1 Transfer Types 8

    2 .3.1.1 Control transfers 8

    2.3.1.2 Interrupt transfers 9

    2.3.1.3 Isochronous tranfers 9

    2.3.1.4 Bulk tranfers 9

    2.3.2 Transactions 9

    2.3.3 Frame Generation 11

    2.3.4 Confiugration and Interfaces 11

    2.3.5 Descriptors 12

    2.3.5.1 Device Descriptor 12

    2.3.5.2 Configuration Descriptor 12

    2.3.5.3 Interface Descriptor 12

  • 2.3.5.4 Endpoint Descriptor 12

    2.3.5.5 String Descriptor 13

    2.3.5.6 Class Descriptor 13

    2.4 USB communication flow 13

    2.4.1 Device Endpoints 15

    2.4.2 Pipes 16

    3. Universal Host Controller Interface 17

    3.1 Overview 17

    3.2 Data Structures 18

    3.2.1 Frame List and SOF 18

    3.2.2 Frame List Pointer 19

    3.2.3 Queue Head 20

    3.2.4 Transfer Descriptor 21

    3.3 Transfer queuing and Traversal state diagram 23

    3.4 Why UHCI ? 24

    4. Project Scope and Limitations 26

    4.1 Scope 26

    4.2 Limitations 26

    5. Design of the Minix USB Subsystem 28

    5.1 Design 28

    5.1.1 Modularity 28

    5.1.2 Reliability 29

    5.1.3 Scalability 29

    5.1.4 Fault Tolerant 29

    5.2 Brief idea of implementation in minix 31

    5.3 Drawbacks of proposed design 31

    6. Development Environment 32

  • 6.1 Development Environment 32

    6.2 Setting Up 32

    6.2.1 Qemu 0.11.1 configuration 33

    6.2.2 Mounting Minix file system using sshfs 34

    7. Implementation 36

    7.1 Implementation of USB subsystem 36

    7.2 Minix 3 services 36

    7.3 Subsystem components 38

    7.3.1 USBD 38

    7.3.1.1 Standard USB requests 40

    7.3.1.2 Responsibilities of USBD 40

    7.3.2 USBDI 40

    7.3.2.1 Extending USBDI for HID Request 42

    7.3.3 HCDI and UHCI HCD 46

    7.3.3.1 Implementation of USBD memory Manager 46

    8. Conclusion 48

    Appendix 1 49

    Appendix 2 50

    Appendix 3 56

    Appendix 4 59

    References 60

  • Figure 7.3 Message format 3 37

    Figure 7.4 Minix message passing primitives used for our purpose 37

    Figure 7.5 USBD to HCDI 38

    Figure 7.6 HCDI to USBD 39

    Figure 7.7 USBD to USBDI 39

    Figure 7.7 USBDI to USBD 39

    Figure 7.8 Standard USB request that USBD implements 40

    Figure 7.9 USBDI interface for device drivers 41

    Figure 7.10 Shows how USBDI hides message passing in

    usbdi_set_config 42

    Figure 7.11 HID request implementation and interrupt request 43

    Figure 7.12 Showing attach / detach of HID keyboard

    device along scanscodes 43

    Figure 7.13 Descriptors of HID keyboard that is read by USBD 44

    Figure 7.15 Descriptors of HID keyboard that is read by USBD 45

    Figure 7.17 Methods and data structures of USBD 46

    v

  • !#

    %

    &

    %

  • ()

    )

    +,

    (

    ..

    /

    !

    00.

  • +,

    1

    1)

    22

    222222 22 22 22

  • !

    3

    3

    45

    3

    #

  • !#!

    +,

    6 7 89

    45869

    % !#!

    :;%

    ?

    ?

    ?

    ?

  • 70

    10

    1%%%

    6;%01%

    1%

    %

    (

    6;0 45.

    781989

    1%45

    #

    !!

    45

    +,

    +,3

    3

    %

  • >

    ! ! &

    8:=9

    ()!&()3

    8)::9

    .

    %!&

    1%8%1943

    (

    #!