---
name: "ucom"
section: "4"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "openbsd"]
url: "https://new.carta.tech/ucom"
---

# ucom(4)

USB tty support

## NAME

**ucom** – USB tty support

## SYNOPSIS

**device** **ucom**

In [loader.conf(5)](/loader.conf/5.md): **ucom\_load="YES"**

[loader.conf(5)](/loader.conf/5.md) or [sysctl.conf(5)](/sysctl.conf/5.md): **hw.usb.ucom.debug** **hw.usb.ucom.device\_mode\_console** **hw.usb.ucom.pps\_mode**

## DESCRIPTION

The **ucom** driver attaches to USB modems, serial ports, and other devices that need to look like a tty. The **ucom** driver shows a behavior like a [tty(4)](/tty/4.md). This means that normal programs such as [tip(1)](/tip/1.md) or [ppp(8)](/ppp/8.md) can be used to access the device.

## SYSCTL VARIABLES

The following variables are available as both [sysctl(8)](/sysctl/8.md) variables and [loader(8)](/loader/8.md) tunables:

- *hw.usb.ucom.debug*

  Debug output level, where 0 is debugging disabled and larger values increase debug message verbosity. Default is 0.

- *hw.usb.ucom.device\_mode\_console*

  When set to 1, the **ucom** driver will mark terminals as console devices when operating in device mode. Default is 1.

- *hw.usb.ucom.pps\_mode*

  Enables and configure PPS capture mode as described below.

## Pulse Per Second (PPS) Timing Interface

The **ucom** driver can capture PPS timing information as defined in RFC 2783. The API, accessed via [ioctl(2)](/ioctl/2.md), is available on the tty device. To use the PPS capture feature with [ntpd(8)](/ntpd/8.md), symlink the tty device to */dev/pps0.*

The *hw.usb.ucom.pps\_mode* sysctl configures the PPS capture mode. It can be set in [loader.conf(5)](/loader.conf/5.md) or [sysctl.conf(5)](/sysctl.conf/5.md). The following capture modes are available:

- 0

  Capture disabled (default).

- 1

  Capture pulses on the CTS line.

- 2

  Capture pulses on the DCD line.

## FILES

- */dev/ttyU\**

  for callin ports

- */dev/ttyU\*.init*

  - */dev/ttyU\*.lock*

  corresponding callin initial-state and lock-state devices

- */dev/cuaU\**

  for callout ports

- */dev/cuaU\*.init*

  - */dev/cuaU\*.lock*

  corresponding callout initial-state and lock-state devices

## SEE ALSO

[cu(1)](/cu/1.md), [tty(4)](/tty/4.md), [uark(4)](/uark/4.md), [ubsa(4)](/ubsa/4.md), [ubser(4)](/ubser/4.md), [uchcom(4)](/uchcom/4.md), [ucycom(4)](/ucycom/4.md), [ufoma(4)](/ufoma/4.md), [uftdi(4)](/uftdi/4.md), [uhso(4)](/uhso/4.md), [uipaq(4)](/uipaq/4.md), [umcs(4)](/umcs/4.md), [umct(4)](/umct/4.md), [umodem(4)](/umodem/4.md), [umoscom(4)](/umoscom/4.md), [uplcom(4)](/uplcom/4.md), [usb(4)](/usb/4.md), [uslcom(4)](/uslcom/4.md), [uvisor(4)](/uvisor/4.md), [uvscom(4)](/uvscom/4.md), [ttys(5)](/ttys/5.md)

## HISTORY

The **ucom** driver was adopted from NetBSD in March of 2002. This manual page was adopted from NetBSD by Tom Rhodes ⟨*trhodes@FreeBSD.org*⟩ in April 2002.

## BUGS

Prior to FreeBSD 6.0 **ucom** created */dev/ucom?* rather than the uniform device names created today. Old scripts must be adjusted accordingly.
