# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: YAML Front Matter: description #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1 #, no-wrap msgid "This chapter covers the use of USB Device Mode and USB On The Go (USB OTG) in FreeBSD" msgstr "" #. type: YAML Front Matter: part #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1 #, no-wrap msgid "Part III. System Administration" msgstr "" #. type: YAML Front Matter: title #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1 #, no-wrap msgid "Chapter 28. USB Device Mode / USB OTG" msgstr "" #. type: Title = #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:15 #, no-wrap msgid "USB Device Mode / USB OTG" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:53 #, no-wrap msgid "Synopsis" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:57 msgid "" "This chapter covers the use of USB Device Mode and USB On The Go (USB OTG) " "in FreeBSD. This includes virtual serial consoles, virtual network " "interfaces, and virtual USB drives." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:62 msgid "" "When running on hardware that supports USB device mode or USB OTG, like that " "built into many embedded boards, the FreeBSD USB stack can run in _device " "mode_. Device mode makes it possible for the computer to present itself as " "different kinds of USB device classes, including serial ports, network " "adapters, and mass storage, or a combination thereof. A USB host like a " "laptop or desktop computer is able to access them just like physical USB " "devices. Device mode is sometimes called the \"USB gadget mode\"." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:68 msgid "" "There are two basic ways the hardware can provide the device mode " "functionality: with a separate \"client port\", which only supports the " "device mode, and with a USB OTG port, which can provide both device and host " "mode. For USB OTG ports, the USB stack switches between host-side and " "device-side automatically, depending on what is connected to the port. " "Connecting a USB device like a memory stick to the port causes FreeBSD to " "switch to host mode. Connecting a USB host like a computer causes FreeBSD " "to switch to device mode. Single purpose \"client ports\" always work in " "device mode." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:73 msgid "" "What FreeBSD presents to the USB host depends on the `hw.usb.template` " "sysctl. Some templates provide a single device, such as a serial terminal; " "others provide multiple ones, which can all be used at the same time. An " "example is the template 10, which provides a mass storage device, a serial " "console, and a network interface. See man:usb_template[4] for the list of " "available values." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:77 msgid "" "Note that in some cases, depending on the hardware and the hosts operating " "system, for the host to notice the configuration change, it must be either " "physically disconnected and reconnected, or forced to rescan the USB bus in " "a system-specific way. When FreeBSD is running on the host, " "man:usbconfig[8] `reset` can be used. This also must be done after loading " "[.filename]#usb_template.ko# if the USB host was already connected to the " "USBOTG socket." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:79 msgid "Read this chapter to learn:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:81 msgid "How to set up USB Device Mode functionality on FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:82 msgid "How to configure the virtual serial port on FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:83 msgid "" "How to connect to the virtual serial port from various operating systems." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:84 msgid "How to configure FreeBSD to provide a virtual USB network interface." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:85 msgid "How to configure FreeBSD to provide a virtual USB storage device." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:87 #, no-wrap msgid "USB Virtual Serial Ports" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:89 #, no-wrap msgid "Configuring USB Device Mode Serial Ports" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:95 msgid "" "Virtual serial port support is provided by templates number 3, 8, and 10. " "Note that template 3 works with Microsoft Windows 10 without the need for " "special drivers and INF files. Other host operating systems work with all " "three templates. Both man:usb_template[4] and man:umodem[4] kernel modules " "must be loaded." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:97 msgid "" "To enable USB device mode serial ports, add those lines to [.filename]#/etc/" "ttys#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:102 #, no-wrap msgid "" "ttyU0\t\"/usr/libexec/getty 3wire\"\tvt100\tonifconsole secure\n" "ttyU1\t\"/usr/libexec/getty 3wire\"\tvt100\tonifconsole secure\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:105 msgid "Then add these lines to [.filename]#/etc/devd.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:115 #, no-wrap msgid "" "notify 100 {\n" "\tmatch \"system\"\t\t\"DEVFS\";\n" "\tmatch \"subsystem\"\t\"CDEV\";\n" "\tmatch \"type\"\t\t\"CREATE\";\n" "\tmatch \"cdev\"\t\t\"ttyU[0-9]+\";\n" "\taction \"/sbin/init q\";\n" "};\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:118 msgid "Reload the configuration if man:devd[8] is already running:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:122 #, no-wrap msgid "# service devd restart\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:125 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:192 msgid "" "Make sure the necessary modules are loaded and the correct template is set " "at boot by adding those lines to [.filename]#/boot/loader.conf#, creating it " "if it does not already exist:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:130 #, no-wrap msgid "" "umodem_load=\"YES\"\n" "hw.usb.template=3\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:133 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:200 msgid "To load the module and set the template without rebooting use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:138 #, no-wrap msgid "" "# kldload umodem\n" "# sysctl hw.usb.template=3\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:140 #, no-wrap msgid "Connecting to USB Device Mode Serial Ports from FreeBSD" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:146 msgid "" "To connect to a board configured to provide USB device mode serial ports, " "connect the USB host, such as a laptop, to the boards USB OTG or USB client " "port. Use `pstat -t` on the host to list the terminal lines. Near the end " "of the list a USB serial port is shown, e.g. \"ttyU0\". To open the " "connection, use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:150 #, no-wrap msgid "# cu -l /dev/ttyU0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:153 msgid "After pressing the kbd:[Enter] key a few times a login prompt appears." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:154 #, no-wrap msgid "Connecting to USB Device Mode Serial Ports from macOS" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:158 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:168 msgid "" "To connect to a board configured to provide USB device mode serial ports, " "connect the USB host, such as a laptop, to the boards USB OTG or USB client " "port. To open the connection, use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:162 #, no-wrap msgid "# cu -l /dev/cu.usbmodemFreeBSD1\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:164 #, no-wrap msgid "Connecting to USB Device Mode Serial Ports from Linux" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:172 #, no-wrap msgid "# minicom -D /dev/ttyACM0\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:174 #, no-wrap msgid "Connecting to USB Device Mode Serial Ports from Microsoft Windows 10" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:182 msgid "" "To connect to a board configured to provide USB device mode serial ports, " "connect the USB host, such as a laptop, to the boards USB OTG or USB client " "port. To open a connection a serial terminal program is needed, such as " "PuTTY. To check the COM port name used by Windows, run Device Manager, " "expand \"Ports (COM & LPT)\". A name similar to \"USB Serial Device " "(COM4)\" appears. Run the serial terminal program of choice, for example " "PuTTY. In the PuTTY dialog set \"Connection type\" to \"Serial\", type the " "COMx obtained from Device Manager in the \"Serial line\" dialog box and " "click Open." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:184 #, no-wrap msgid "USB Device Mode Network Interfaces" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:190 msgid "" "Virtual network interfaces support is provided by templates number 1, 8, and " "10. Note that none of them works with Microsoft Windows. Other host " "operating systems work with all three templates. Both man:usb_template[4] " "and man:if_cdce[4] kernel modules must be loaded." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:197 #, no-wrap msgid "" "if_cdce_load=\"YES\"\n" "hw.usb.template=1\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:205 #, no-wrap msgid "" "# kldload if_cdce\n" "# sysctl hw.usb.template=1\n" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:208 #, no-wrap msgid "USB Virtual Storage Device" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:213 msgid "" "The man:cfumass[4] driver is a USB device mode driver first available in " "FreeBSD 12.0." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:219 msgid "" "Mass Storage target is provided by templates 0 and 10. Both " "man:usb_template[4] and man:cfumass[4] kernel modules must be loaded. " "man:cfumass[4] interfaces to the CTL subsystem, the same one that is used " "for iSCSI or Fibre Channel targets. On the host side, USB Mass Storage " "initiators can only access a single LUN, LUN 0." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:220 #, no-wrap msgid "Configuring USB Mass Storage Target Using the cfumass Startup Script" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:224 msgid "" "The simplest way to set up a read-only USB storage target is to use the " "[.filename]#cfumass# rc script. To configure it this way, copy the files to " "be presented to the USB host machine into the `/var/cfumass` directory, and " "add this line to [.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:228 #, no-wrap msgid "cfumass_enable=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:231 msgid "To configure the target without restarting, run this command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:235 #, no-wrap msgid "# service cfumass start\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:240 msgid "" "Differently from serial and network functionality, the template should not " "be set to 0 or 10 in [.filename]#/boot/loader.conf#. This is because the " "LUN must be set up before setting the template. The cfumass startup script " "sets the correct template number automatically when started." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:241 #, no-wrap msgid "Configuring USB Mass Storage Using Other Means" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:245 msgid "" "The rest of this chapter provides detailed description of setting the target " "without using the cfumass rc file. This is necessary if e.g. one wants to " "provide a writeable LUN." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:251 msgid "" "USB Mass Storage does not require the man:ctld[8] daemon to be running, " "although it can be used if desired. This is different from iSCSI. Thus, " "there are two ways to configure the target: man:ctladm[8], or man:ctld[8]. " "Both require the [.filename]#cfumass.ko# kernel module to be loaded. The " "module can be loaded manually:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:255 #, no-wrap msgid "# kldload cfumass\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:258 msgid "" "If [.filename]#cfumass.ko# has not been built into the kernel, [.filename]#/" "boot/loader.conf# can be set to load the module at boot:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:262 #, no-wrap msgid "cfumass_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:265 msgid "A LUN can be created without the man:ctld[8] daemon:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:269 #, no-wrap msgid "# ctladm create -b block -o file=/data/target0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:274 msgid "" "This presents the contents of the image file [.filename]#/data/target0# as a " "LUN to the USB host. The file must exist before executing the command. To " "configure the LUN at system startup, add the command to [.filename]#/etc/" "rc.local#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:277 msgid "" "man:ctld[8] can also be used to manage LUNs. Create [.filename]#/etc/" "ctl.conf#, add a line to [.filename]#/etc/rc.conf# to make sure man:ctld[8] " "is automatically started at boot, and then start the daemon." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:280 msgid "" "This is an example of a simple [.filename]#/etc/ctl.conf# configuration " "file. Refer to man:ctl.conf[5] for a complete description of the options." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:289 #, no-wrap msgid "" "target naa.50015178f369f092 {\n" "\tlun 0 {\n" "\t\tpath /data/target0\n" "\t\tsize 4G\n" "\t}\n" "}\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:296 msgid "" "The example creates a single target with a single LUN. The " "`naa.50015178f369f092` is a device identifier composed of 32 random " "hexadecimal digits. The `path` line defines the full path to a file or zvol " "backing the LUN. That file must exist before starting man:ctld[8]. The " "second line is optional and specifies the size of the LUN." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:298 msgid "" "To make sure the man:ctld[8] daemon is started at boot, add this line to " "[.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:302 #, no-wrap msgid "ctld_enable=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:305 msgid "To start man:ctld[8] now, run this command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:309 #, no-wrap msgid "# service ctld start\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:313 msgid "" "As the man:ctld[8] daemon is started, it reads [.filename]#/etc/ctl.conf#. " "If this file is edited after the daemon starts, reload the changes so they " "take effect immediately:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:317 #, no-wrap msgid "# service ctld reload\n" msgstr ""