Device Drivers: Generally a kernel module Often makes an entry in /dev Some things in /dev aren't hardware devices Some hardware devices don't make an entry in /dev Devices themselves: Connected with a bus Internal busses: PCI Express, SATA, relics External busses: USB, Firewire, Parallel Port, etc. There is a lot of mixing possible! Internal USB devices External sata Busses generally have a method of polling Some devices respond to that Older model: Driver checks to see if device is present Most primitive: Driver assumes device is present Can still be appropriate if you're sure Character devices vs. block devices (ioctl for special cases): mouse keyboard hard drive printer video cards are more complicated: block exposed to X11 /dev/nvidia character device, proprietary mknod and making a device node: Not exactly like /proc! Making a file in /dev So it's a regular directory! Nodes are special files in a regular directory Parallel Port Devices: Hardware Setup: parallel port pinout +5, or kind of sorta close, for high Low current Don't short it out! Expansion cards, docking station, etc. Parallel cables (not all that common anymore!) PowerSwitch Tail II Lamp, extension cord Polling for devices Hopefully the driver makes sense to me still Works in FreeBSD Wrote it a couple years ago Making stuff happen with the computer: Serial port is more powerful, but has less pins decoder, demultiplexer, etc. USB: Not very many outputs to work with! You're expected to communicate with a chip That's when it gets complicated! https://numato.com/product/8-channel-usb-gpio-module-with-analog-inputs Raspberry pi and GPIO pins Sainsmart relays