Hardware Probing in the Linux Kernel

Preview:

Citation preview

Linux kernel TLV meetup, 21.09.2015Kfir Gollan

Hardware Probing

What is hardware probing?Different approaches for detecting hardwareProbing in the linux kernel

Agenda

Have you ever wondered how does the OS know what hardware components are available on a given machine?

Basically, someone needs to tell the OS what is available.

The process of detecting all the hardware components and pairing them up with the matching drivers in the OS is called hardware probing, or just probing for short.

What is hardware probing?

Hardcode the details of the hardware into the kernel

Static configurationDevice trees

Dynamic configurationACPI

Bus based detectionPCI

Different approaches for probing

Device trees

Formal definition:“The Device Tree is a data structure for describing hardware.Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time.”

devicetree.org

Device tree – What is it?

Device tree source (DTS)Device tree bindings

Device tree blob (DTB)Flattened Device Tree (FDT)

Device tree compiler (DTC)

Device trees - How do they work?

{compatible = "nvidia,harmony", "nvidia,tegra20";#address-cells = <1>;#size-cells = <1>;interrupt-parent = <&intc>;

memory {device_type = "memory";reg = <0x00000000 0x40000000>;

};...

};

Device tree example

{….sound {

compatible = "nvidia,harmony-sound";

i2s-controller = <&i2s1>;i2s-codec = <&wm8903>;

};};

Device tree example

chosen {bootargs = "console=ttyS0,115200

loglevel=8";initrd-start = <0xc8000000>;initrd-end = <0xc8200000>;

};

Device tree example

Xillybus Device tree tutorialDevice trees for Dummies!Documentation/devicetree/

usage-model.txtbooting-without-of.txt

Device trees – Where to go from here?

ACPI

Advanced configuration and power interfaceOriginally created by Intel, Toshiba &

MicrosoftCurrently maintained by the UEFI forum

Current last revision of the spec was released at May 2015 (Revision 6.0)

Replaces APM (Advanced Power Management)Allows the kernel/user to control power

features without going into BIOS configurationIt’s complex! (Revision 6.0 is 1056 pages

long)

ACPI

The fact that it takes more code to parse and interpret ACPI than it does to route traffic on the internet backbones should be a hint something is badly wrong either in ACPI the spec, ACPI the implementation or both.

Alan Cox

ACPI is a complete design disaster in every wayLinus Torvalds

Basically, it is just complex.

Remarks on ACPI

Divided to three major componentsACPI registersACPI BIOSACPI tables

AML – ACPI Machine LanguageRequires a full-fledged interpreter to be

implemented in the kernel.

How it works?

Motherboard devices are described in an hierarchical format called the ACPI namespace.ACPI definition blocksDifferentiated System Description Table

(DSDT)Secondary System Description Table (SSDT)

The operating system is simply required to iterate over the ACPI namespace and load the proper drivers for each device that is listed there.

Configuration and “Plug and Play”

Device (BT){ Name (_HID, "TOS6205") Method (_STA, 0, NotSerialized) { If (BTEN) { Return (0x00) } Else { Return (0x0F) } } ...}

AML example

Device (BT){ … Method (DUSB, 0, NotSerialized) { Store (0x00, \_SB.PCI0.LPC0.EC0.BTDT) } …}

AML example

ACPI Component Architecture(OS)-independent reference

implementation of the Advanced Configuration and Power Interface Specification (ACPI).

www.acpica.orgDivided into a few major components

OS services layerACPI core subsystemdevice drivers

ACPICA

A collection of modules that implement the core logic of ACPI.AML interpreter

Execution of the AML bytecodeACPI table management

Validation, parsing, installation and removalResource management

Dependencies between resources IRQ routing tables

Namespace managementProviding simple access to the full ACPI device hierarchy

Many others

ACPICA – ACPI core

Intermediate layer between the ACPI core and the rest of the systemTranslate syscall to a matching ACPI method

Standard set of interfaces that perform OS dependenet functionsMemory allocationHardware accessThreading and synchronization

Needs to be implemented by each operating system that wishes to use ACPICA.

ACPICA – OS service layer

Probing in the linux kernel

Platform devices Platform devices are devices that typically

appear as autonomous entities in the system.No bus initialization and management requiredDirectly probe the hardware –

implementing .probe functionstruct platform_driver{

int (*probe)(struct platform_device *);int (*remove)(struct platform_device *);

...;}

Probing in the linux kernel

PCI devicesDrivers are registered to the PCI subsystem of

the kernel.When a device is detected the matching drivers

probe function is invoked.struct pci_driver{

... int (*probe) (struct pci_dev *dev, ..); void (*remove) (struct pci_dev *dev);

...;}

Probing in the linux kernel

Questions?