0% found this document useful (0 votes)
33 views

Device Interfaces and Drivers

Uploaded by

ABDUL MAJITH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views

Device Interfaces and Drivers

Uploaded by

ABDUL MAJITH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Real-Time Systems

Lecture Topic - Device Interface Drivers and MMIO


Dr. Sam Siewert
Electrical, Computer and Energy Engineering
Embedded Systems Engineering Program

Copyright © 2019 University of Colorado


Resource View of HW/SW Interface
CPU-bound
Three-Space View of Utilization
Requirements
– CPU Margin – 30% for LUB
CPU-Util – IO Latency (Bandwidth) Margin?
– Memory Capacity (Latency) Margin?

Upper Right Front Corner – Low-


IO-Util
Margin
I/O-bound
Origin – High-Margin

Memory-Util

Memory-bound

2
Camera Demo - Linux Devices
Computer Vision Application Demo Camera Applications
– OpenCV API – User Space On Linux Laptop
– V4L2 API – Kernel, User Space Interface
– UVC – Driver, Kernel Space Module
For OpenCV hit “q” in imshow
– USB – Driver, Kernel Space Module window to properly shutdown
Reset USB bus and device
sudo cat /proc [PIDs, meminfo, cpuinfo,interrupts, If you happen to exit badly – e.g.
slabinfo, devices, bus/pci, bus/input, …] with Ctrl-C or run camorama
[sigint could catch and handle]
sudo lshw, lsusb, lspci, lsscsi, lsmod, lscpu, slabtop
[more] Use syslog instead of printf
• Buffers for output in slack time
dmesg, htop, iostat from sysstat [more]; • Avoids immediate blocking I/O
free, lsof, netstat, strace, vmstat [more] that can delay a service
• Similar features
Trace, Profile, Debug Tools (coming up …) – • Add custom time-stamp
– KernelShark (sudo apt-get install kernelshark), Linux kernel modules
– wireshark (sudo apt-get install wireshark), • Must use “printk”
– ftrace, sysprof, systemtap, etc. • Kernel Modules, Drivers

3
Embedded I/O (HW View)
Analog I/O
– DAC analog output: servos, motors, heaters, ...
– ADC analog input: photodiodes, thermistors, ...
Digital I/O
– Direct TTL I/O or GPIO
– Digital Serial (I2C, SPI, ... - Chip-to-Chip)
– Digital Interface to UART/Line Driver, Serializer-deserializer
(Serdes), or Physical I/F
Digital I/O to Line Driver Interface (e.g. RS232)
10/100 MII, 1G RGMII, 10G XGMII interfaces to Serdes to Phy

4
CPU Core I/O (SW View)
Word
– Register Control/Config, Status, Data
– Typical of Low-Rate I/O Interfaces (RS232)
Block
– FIFOs (2-32K), Dual-Port RAM and DMA
– Typical of High-Rate I/O Interfaces
System Memory Map (32 or 64 bit space)
– Physical Memory (SDRAM, DDR, SRAM)
– BootROM (Typically Flash)
– Configuration and Control Registers

5
Example 4Gb System Memory Map
0xFFFF_FFFF 1 Mbyte Boot ROM device
Boot ROM (Flash) (reset vector address @ high address)
0xFFF0_0000
0xFFEF_FFFF
4015 Mbytes unused
0x0500_0000
0x04FF_FFFF 16 Mbytes Memory Mapped IO
MMIO (PCI BARs for Device
0x0400_0000 Function Registers)
0x03FF_FFFF
32 Mbytes unused
(space left for memory upgrades)
0x0200_0000
0x01FF_FFFF

Main Working Memory for OS/Apps


Working Memory (e.g. 32 Mbytes SRAM, SDRAM, DDR)

0x0000_0000

6
OS and App Use of 32 Mb Memory
0x01FF_FFFF
App Code Heap Loadable App modules
(.text, .data, .bss, .rom)

ISR Stack ISR_STACK_SIZE


_end+1 WDB Pool WDB_POOL_SIZE
_end Loadable VxWorks image
System Code (.text, .data, .bss, .rom)
0x0010_8000
0x0010_0000 System Stack 32K for kernel – grows down

0x0009_FFFF Bootrom Image 608 Kbyte Boot_rom image


0x0000_8000
0x0000_5000 Bootrom Stack 12K stack for boot – grows down
256 Bytes bootDev, unitNum,
0x0000_1200 Boot Parameters
procNum, flags
0x0000_07FF 2 Kbytes for IRQ 0-15 Handlers
Interrupt Vector Table
0x0000_0000 (128 Bytes, 32 Dwords of Code)

7
Platform/RTOS I/O (FW View)
Network Stack – Driver Interface
Driver Interfaces Used By Applications
– Top-Half: Application Interface
– Bottom-Half: FW Interface to HW
Application Interface Examples
– Word-at-a-Time I/O Drivers
Serial byte streams
Device Configuration, Control, and Status
– Block I/O Drivers
Disk, Flash, High-Rate Network (Typically DMA)
– Stack I/O Drivers
Filesystem, TFFS/DOC, TCP/IP

8
Platform/RTOS I/O (FW View) – Device Interfaces
Word-at-a-Time - RS-232/422 UART, GPIO, RELAY, ADC
Block I/O - Common Flash Interface, Ethernet Link Layer Linux Block Interfaces

Stack I/O - E.g. Flash Filesystem and Network Stack mmcblk is the block
interface to
SD card Nand flash on
Linux

Disk drivers are normally


SCSI (SAS) or ATA
(SATA) – including SSD

The mmcblk driver


interface is critical to I/O
performance for stored
data

9
Driver Design
Application(s)
open/close, read/write,
creat, ioctl
EAGAIN, Block,
Data, Status Application Interface
If Output
Ring-Buffer Full then
If Input
Ring-Buffer Empty then – Application Policy
{SemTake {SemTake
or EAGAIN}
else
or EAGAIN}
else
– Blocking/Non-Blocking
{Process and Return} {Processand Return}
– Multi-thread access
– Abstraction
Output
Ring-Buffer
SemGive Input
Ring-Buffer
Device Interface
– SW/HW Interface
ISR
– Immediate Buffering
– Interrupt Service Routine
HAL Interface
Hardware Device

10
Cached Memory and DMA
Cache Coherency
– Making sure that cached data and memory are in sync
– Can become out of sync due to DMAs and Multi-Processor Caches
– Push Caches Allow for DMA into and out of Cache Directly
– Cache Snooping by HW may Obviate Need for Invalidate

Drivers Must Ensure Cache Coherency


– Invalidate Memory Locations on DMA Read Completion
cacheInvalidate()
– Flush Cache Prior to DMA Write Initiation
cacheFlush()

IO Data Cache Line Alignment


– Ensure that IO Data is Aligned on Cache Line Boundaries
– Other Data That Shares Cache Line with IO Data Could Otherwise Be Errantly Invalidated

11
Disadvantages of Abstracted Driver
Generally the Software Engineering Value Outweighs any Inefficiency

PDL – Peripheral Driver Library, Focus on Device Interfaces [Devices


Interfaces and HAL]

Full Driver Abstraction Adds Overhead and Complexity


– Function calls and table look-up
– More Code than Single Layer API

Adds Buffering and Copy Features


– Can Use Zero-Copy Buffering (Pointers) to Minimize Impact
– Zero-Copy Buffers can be Complex

12
Advantages of Abstracted Driver
Portability
– If SW/HW Interface changes, change Device Interface
– If Application Interface changes, change Application Interface
Testability (Test HW Interface and User Space Application
Interface Separately)
Single Point of Access and Maintenance
Enforce Multi-Thread Usage Policies
Separate Buffering and ISR from Usage
Common Application Entry Points
Scheduled I/O (Most Work in Task Context rather than ISR
Context)

13
Driver Writer Resources
Linux Device Drivers
– Kernel Modules (Loaded After Boot)
– Built-in Drivers (Loaded with Kernel Image)
– Linux 2.6.x Device Drivers, by Rubini and Corbet [Web Version]
– Jerry Cooperstein’s Linux Device Drivers
– Linux Foundation [most current]

VxWorks RTOS Device Interfaces


– All applications and drivers are kernel modules (E.g. Btvid analog NTSC Video Decoder)
– Driver entry point registration table
– Section 3.9 of VxWorks Programmer’s Guide, pages 166-174
– VxWorks Programmer’s Guide, Appendix D for x86 Architecture – pages 431-478

14
Copyright © 2019 University of Colorado

You might also like