[[osmotrx_device_support]] == OsmoTRX hardware device support OsmoTRX consists of a _common_ part that applies to all TRX devices as well as _hardware-specific_ parts for each TRX device. The hardware-specific parts are usually provided by vendor-specific or device-specific libraries that are then handled by some OsmoTRX glue code presenting a unified interface towards the rest of the code by means of a _RadioDevice_ class. The common part includes the core TRX architecture as well as code for implementing the external interfaces such as the TRX Manager UDP socket, control, and VTY interfaces. The hardware-specific parts include support for driving one particular implementation of a radio modem. Such a physical layer implementation can come in many forms. Sometimes it runs on a general purpose CPU, sometimes on a dedicated ARM core, a dedicated DSP, a combination of DSP and FPGA. Joining the common part with each of the available backends results in a different binary with different suffix for each backend. For instance, when OsmoTRX is built with UHD backend, an _osmo-trx-uhd_ binary is generated; when OsmoTRX is built with LimeSuite backend, an _osmo-trx-lms_ binary is generated. Build of different backend can be enabled and disabled by means of configure flags, which can be found in each subsection relative to each backend below.