Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157810572
D15513.id42807.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
21 KB
Referenced Files
None
Subscribers
None
D15513.id42807.diff
View Options
Index: en_US.ISO8859-1/books/handbook/Makefile
===================================================================
--- en_US.ISO8859-1/books/handbook/Makefile
+++ en_US.ISO8859-1/books/handbook/Makefile
@@ -200,6 +200,7 @@
SRCS+= printing/chapter.xml
SRCS+= security/chapter.xml
SRCS+= serialcomms/chapter.xml
+SRCS+= usb-device-mode/chapter.xml
SRCS+= virtualization/chapter.xml
SRCS+= x11/chapter.xml
Index: en_US.ISO8859-1/books/handbook/book.xml
===================================================================
--- en_US.ISO8859-1/books/handbook/book.xml
+++ en_US.ISO8859-1/books/handbook/book.xml
@@ -253,6 +253,7 @@
&chap.l10n;
&chap.cutting-edge;
&chap.dtrace;
+ &chap.usb-device-mode;
</part>
<part xml:id="network-communication">
Index: en_US.ISO8859-1/books/handbook/chapters.ent
===================================================================
--- en_US.ISO8859-1/books/handbook/chapters.ent
+++ en_US.ISO8859-1/books/handbook/chapters.ent
@@ -42,6 +42,7 @@
<!ENTITY chap.l10n SYSTEM "l10n/chapter.xml">
<!ENTITY chap.cutting-edge SYSTEM "cutting-edge/chapter.xml">
<!ENTITY chap.dtrace SYSTEM "dtrace/chapter.xml">
+ <!ENTITY chap.usb-device-mode SYSTEM "usb-device-mode/chapter.xml">
<!-- Part Four -->
<!ENTITY chap.serialcomms SYSTEM "serialcomms/chapter.xml">
Index: en_US.ISO8859-1/books/handbook/disks/chapter.xml
===================================================================
--- en_US.ISO8859-1/books/handbook/disks/chapter.xml
+++ en_US.ISO8859-1/books/handbook/disks/chapter.xml
@@ -593,133 +593,6 @@
any block device, including optical drives or
<acronym>iSCSI</acronym> <acronym>LUN</acronym>s.</para>
</sect2>
-
- <sect2>
- <title><acronym>USB</acronym> Mass Storage Target</title>
-
- <note>
- <para>The &man.cfumass.4; driver is a <acronym>USB</acronym>
- device mode driver first available in &os; 12.0.</para>
- </note>
-
- <para>When running on <acronym>USB</acronym>
- <acronym>OTG</acronym>-compliant hardware like that built into
- many embedded boards, the &os; <acronym>USB</acronym> stack
- can run in <emphasis>device mode</emphasis>. Device mode
- makes it possible for the computer to present itself as
- different kinds of <acronym>USB</acronym> device classes,
- including serial ports, network adapters, and mass storage. A
- <acronym>USB</acronym> host like a laptop or desktop computer
- is able to access them just like physical
- <acronym>USB</acronym> devices.</para>
-
- <para>The &man.usb.template.4; kernel module allows the
- <acronym>USB</acronym> stack to switch between host-side and
- device-side automatically, depending on what is connected to
- the <acronym>USB</acronym> port. Connecting a
- <acronym>USB</acronym> device like a memory stick to the
- <acronym>USB</acronym> <acronym>OTG</acronym> port causes &os;
- to switch to host mode. Connecting a <acronym>USB</acronym>
- host like a computer causes &os; to switch to device
- mode.</para>
-
- <para>What &os; presents to the <acronym>USB</acronym> host
- depends on the <varname>hw.usb.template</varname> sysctl. See
- &man.usb.template.4; for the list of available values. Note
- that for the host to notice the configuration change, it must
- be either physically disconnected and reconnected, or forced
- to rescan the <acronym>USB</acronym> bus in a system-specific
- way. When &os; is running on the host, &man.usbconfig.8;
- <command>reset</command> can be used. This also must be done
- after loading <filename>usb_template.ko</filename> if the
- <acronym>USB</acronym> host was already connected to the
- <acronym>USB</acronym> <acronym>OTG</acronym> socket.</para>
-
- <para>The <varname>hw.usb.template</varname> sysctl
- is set to 0 by default, making &os; work as a
- <acronym>USB</acronym> Mass Storage target. 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 <acronym>iSCSI</acronym> or
- Fibre Channel targets. On the host side,
- <acronym>USB</acronym> Mass Storage initiators can only access
- a single <acronym>LUN</acronym>,
- <acronym>LUN</acronym> 0.</para>
-
- <para><acronym>USB</acronym> Mass Storage does not require the
- &man.ctld.8; daemon to be running, although it can be used if
- desired. This is different from <acronym>iSCSI</acronym>.
- Thus, there are two ways to configure the target:
- &man.ctladm.8;, or &man.ctld.8;. Both require the
- <filename>cfumass.ko</filename> kernel module to be loaded.
- The module can be loaded manually:</para>
-
- <screen>&prompt.root; <userinput>kldload cfumass</userinput></screen>
-
- <para>If <filename>cfumass.ko</filename> has not been built into
- the kernel, <filename>/boot/loader.conf</filename> can be set
- to load the module at boot:</para>
-
- <programlisting>cfumass_load="YES"</programlisting>
-
- <para>A <acronym>LUN</acronym> can be created without the
- &man.ctld.8; daemon:</para>
-
- <screen>&prompt.root; <userinput>ctladm create -b block -o file=/data/target0</userinput></screen>
-
- <para>This presents the contents of the image file
- <filename>/data/target0</filename> as a <acronym>LUN</acronym>
- to the <acronym>USB</acronym> host. The file must exist
- before executing the command. To configure the
- <acronym>LUN</acronym> at system startup, add the command to
- <filename>/etc/rc.local</filename>.</para>
-
- <para>&man.ctld.8; can also be used to manage
- <acronym>LUN</acronym>s. Create
- <filename>/etc/ctl.conf</filename>, add a line to
- <filename>/etc/rc.conf</filename> to make sure &man.ctld.8; is
- automatically started at boot, and then start the
- daemon.</para>
-
- <para>This is an example of a simple
- <filename>/etc/ctl.conf</filename> configuration file. Refer
- to &man.ctl.conf.5; for a more complete description of the
- options.</para>
-
- <programlisting>target naa.50015178f369f092 {
- lun 0 {
- path /data/target0
- size 4G
- }
-}</programlisting>
-
- <para>The example creates a single target with a single
- <acronym>LUN</acronym>. The
- <literal>naa.50015178f369f092</literal> is a device identifier
- composed of 32 random hexadecimal digits. The
- <literal>path</literal> line defines the full path to a file
- or zvol backing the <acronym>LUN</acronym>. That file must
- exist before starting &man.ctld.8;. The second line is
- optional and specifies the size of the
- <acronym>LUN</acronym>.</para>
-
- <para>To make sure the &man.ctld.8; daemon is started at
- boot, add this line to
- <filename>/etc/rc.conf</filename>:</para>
-
- <programlisting>ctld_enable="YES"</programlisting>
-
- <para>To start &man.ctld.8; now, run this command:</para>
-
- <screen>&prompt.root; <userinput>service ctld start</userinput></screen>
-
- <para>As the &man.ctld.8; daemon is started, it reads
- <filename>/etc/ctl.conf</filename>. If this file is edited
- after the daemon starts, reload the changes so they take
- effect immediately:</para>
-
- <screen>&prompt.root; <userinput>service ctld reload</userinput></screen>
- </sect2>
</sect1>
<sect1 xml:id="creating-cds">
Index: en_US.ISO8859-1/books/handbook/usb-device-mode/chapter.xml
===================================================================
--- /dev/null
+++ en_US.ISO8859-1/books/handbook/usb-device-mode/chapter.xml
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+-->
+
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="usb-device-mode">
+
+ <title>USB Device Mode</title>
+
+ <sect1 xml:id="usb-device-mode-synopsis">
+ <title>Synopsis</title>
+
+ <info>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>Edward Tomasz</firstname>
+ <surname>Napierala</surname>
+ </personname>
+ <affiliation>
+ <address>
+ <email>trasz@FreeBSD.org</email>
+ </address>
+ </affiliation>
+ <contrib>Written by </contrib>
+ </author>
+ </authorgroup>
+ </info>
+
+ <para>This chapter covers the use USB Device Mode and USB On The
+ Go in &os;. This includes virtual serial consoles, virtual
+ network interfaces, and virtual USB drives.</para>
+
+ <para>When running on hardware that supports USB device mode
+ or <acronym>USB OTG</acronym>, like that built into
+ many embedded boards, the &os; <acronym>USB</acronym> stack
+ can run in <emphasis>device mode</emphasis>. Device mode
+ makes it possible for the computer to present itself as
+ different kinds of <acronym>USB</acronym> device classes,
+ including serial ports, network adapters, and mass storage. A
+ <acronym>USB</acronym> host like a laptop or desktop computer
+ is able to access them just like physical
+ <acronym>USB</acronym> devices.</para>
+
+ <para>There are two basic ways the hardware can provide the
+ device mode functionality: with a separate "client port", which
+ only supports the device mode instead of the usual host mode,
+ and with a USB OTG port, which can provide both device and
+ host mode. For <acronym> USB OTG</acronym> ports, the
+ <acronym>USB</acronym> stack switches between host-side and
+ device-side automatically, depending on what is connected to
+ the port. Connecting a
+ <acronym>USB</acronym> device like a memory stick to the
+ port causes &os;
+ to switch to host mode. Connecting a <acronym>USB</acronym>
+ host like a computer causes &os; to switch to device
+ mode. Single purpose "client ports" always work in device
+ mode.</para>
+
+ <para>What &os; presents to the <acronym>USB</acronym> host
+ depends on the <varname>hw.usb.template</varname> 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.</para>
+ <para>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 <acronym>USB</acronym>
+ bus in a system-specific way. When &os; is running on the host,
+ &man.usbconfig.8; <command>reset</command> can be used.
+ This also must be done after loading
+ <filename>usb_template.ko</filename> if the
+ <acronym>USB</acronym> host was already connected to the
+ <acronym>USB</acronym> <acronym>OTG</acronym> socket.</para>
+
+ <para>After reading this chapter, you will know:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>How to set up USB Device Mode functionality on
+ &os;.</para>
+ </listitem>
+
+ <listitem>
+ <para>How to configure the virtual serial port on
+ &os;.</para>
+ </listitem>
+
+ <listitem>
+ <para>How to connect to the virtual serial port
+ from various operating systems.</para>
+ </listitem>
+
+ <listitem>
+ <para>How to configure &os; to provide a virtual
+ <acronym>USB</acronym> network interface.</para>
+ </listitem>
+
+ <listitem>
+ <para>How to configure &os; to provide a virtual
+ <acronym>USB</acronym> storage device.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 xml:id="usb-device-mode-terminals">
+ <title><acronym>USB</acronym> Virtual Serial Ports</title>
+
+ <sect2>
+ <title>Configuring USB Device Mode Serial Ports</title>
+
+ <para>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 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.</para>
+
+ <para>To enable USB device mode serial ports, add those lines
+ to <filename>/etc/ttys</filename>:</para>
+ <screen>ttyU0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyU1 "/usr/libexec/getty 3wire" vt100 onifconsole secure</screen>
+
+ <para>Then add these lines to
+ <filename>/etc/devd.conf</filename>:</para>
+ <screen>notify 100 {
+ match "system" "DEVFS";
+ match "subsystem" "CDEV";
+ match "type" "CREATE";
+ match "cdev" "ttyU[0-9]+";
+ action "/sbin/init q";
+};</screen>
+
+ <para>Reload the configuration if
+ &man.devd.8; is already running:</para>
+
+ <screen>&prompt.root; <userinput>service devd restart</userinput></screen>
+
+ <para>Make sure the necessary modules are loaded and the
+ correct template is set at boot by adding
+ those lines to <filename>/boot/loader.conf</filename>,
+ creating it if it does not already exist:</para>
+
+ <screen>umodem_load="YES"
+hw.usb.template=3</screen>
+
+ <para>To load the module and set the template without rebooting
+ use:</para>
+ <screen>&prompt.root; <userinput>kldload umodem</userinput>
+&prompt.root; <userinput>sysctl hw.usb.template=3</userinput></screen>
+
+ </sect2>
+ <sect2>
+ <title>Connecting to USB Device Mode Serial Ports from
+ &os;</title>
+
+ <para>To connect to a board configured to provide USB device
+ mode serial ports, connect the USB host, such as laptop, to
+ the boards USB OTG or USB client port. On the host use
+ "pstat -t" command to list the terminal lines. Near the end
+ of the list you should see a USB serial port, eg "ttyU0".
+ To open the connection, use:</para>
+ <screen>&prompt.root; <userinput>cu -l /dev/ttyU0</userinput></screen>
+
+ <para>After pressing the Enter key a few times you will see
+ a login prompt.</para>
+ </sect2>
+ <sect2>
+ <title>Connecting to USB Device Mode Serial Ports from
+ macOS</title>
+
+ <para>To connect to a board configured to provide USB device
+ mode serial ports, connect the USB host, such as laptop,
+ to the boards USB OTG or USB client port. To open the
+ connection, use:</para>
+ <screen>&prompt.root; <userinput>cu -l /dev/cu.usbmodemFreeBSD1</userinput></screen>
+ </sect2>
+ <sect2>
+ <title>Connecting to USB Device Mode Serial Ports from
+ Linux</title>
+
+ <para>To connect to a board configured to provide USB device
+ mode serial ports, connect the USB host, such as laptop,
+ to the boards USB OTG or USB client port. To open the
+ connection, use:</para>
+ <screen>&prompt.root; <userinput>minicom -D /dev/ttyACM0</userinput></screen>
+ </sect2>
+ <sect2>
+ <title>Connecting to USB Device Mode Serial Ports from
+ Microsoft Windows 10</title>
+
+ <para>To connect to a board configured to provide USB device
+ mode serial ports, connect the USB host, such as laptop,
+ to the boards USB OTG or USB client port. To open connection
+ you will need a serial terminal program, such as Putty.
+ To check the COM port name used by Windows, run Device
+ Manager, expand "Ports (COM & LPT)". You will see a name
+ similar to "USB Serial Device (COM4)". Run serial
+ terminal program of your 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.</para>
+ </sect2>
+
+
+ </sect1>
+ <sect1 xml:id="usb-device-mode-network">
+
+ <title><acronym>USB</acronym> Device Mode Network
+ Interfaces</title>
+
+ <para>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.</para>
+
+ <para>Make sure the necessary modules are loaded and the correct
+ template is set at boot by adding
+ those lines to <filename>/boot/loader.conf</filename>, creating
+ it if it does not already exist:</para>
+
+ <screen>if_cdce_load="YES"
+hw.usb.template=1</screen>
+
+ <para>To load the module and set the template without rebooting
+ use:</para>
+ <screen>&prompt.root; <userinput>kldload if_cdce</userinput>
+&prompt.root; <userinput>sysctl hw.usb.template=1</userinput></screen>
+ </sect1>
+
+ <sect1 xml:id="usb-device-mode-storage">
+ <title><acronym>USB</acronym> Virtual Storage Device</title>
+
+ <note>
+ <para>The &man.cfumass.4; driver is a <acronym>USB</acronym>
+ device mode driver first available in &os; 12.0.</para>
+ </note>
+
+ <para>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
+ <acronym>iSCSI</acronym> or Fibre Channel targets.
+ On the host side, <acronym>USB</acronym> Mass Storage
+ initiators can only access a single <acronym>LUN</acronym>,
+ <acronym>LUN</acronym> 0.</para>
+
+ <sect2>
+ <title>Configuring USB Mass Storage Target Using the cfumass
+ Startup Script</title>
+
+ <para>The simplest way to set up a read-only USB storage target
+ is to use the cfumass rc script. To configure it this way,
+ copy the files to be presented to the USB host machine into
+ the <literal>/var/cfumass</literal> directory, and
+ add this line to <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>cfumass_enable="YES"</programlisting>
+
+ <para>To configure the target without restarting,
+ run this command:</para>
+
+ <screen>&prompt.root; <userinput>service cfumass start</userinput></screen>
+
+ <para>Differently from serial and network functionality, the
+ template should not be set to 0 or 10 in
+ <filename>/boot/loader.conf</filename>. 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.</para>
+ </sect2>
+ <sect2>
+ <title>Configuring USB Mass Storage Using Other Means</title>
+
+ <para>The rest of this chapter provides detailed description of
+ setting the target without using the cfumass rc file. This is
+ necessary if eg one wants to provide a writeable LUN.</para>
+ <para><acronym>USB</acronym> Mass Storage does not require the
+ &man.ctld.8; daemon to be running, although it can be used if
+ desired. This is different from <acronym>iSCSI</acronym>.
+ Thus, there are two ways to configure the target:
+ &man.ctladm.8;, or &man.ctld.8;. Both require the
+ <filename>cfumass.ko</filename> kernel module to be loaded.
+ The module can be loaded manually:</para>
+
+ <screen>&prompt.root; <userinput>kldload cfumass</userinput></screen>
+
+ <para>If <filename>cfumass.ko</filename> has not been built into
+ the kernel, <filename>/boot/loader.conf</filename> can be set
+ to load the module at boot:</para>
+
+ <programlisting>cfumass_load="YES"</programlisting>
+
+ <para>A <acronym>LUN</acronym> can be created without the
+ &man.ctld.8; daemon:</para>
+
+ <screen>&prompt.root; <userinput>ctladm create -b block -o file=/data/target0</userinput></screen>
+
+ <para>This presents the contents of the image file
+ <filename>/data/target0</filename> as a <acronym>LUN</acronym>
+ to the <acronym>USB</acronym> host. The file must exist
+ before executing the command. To configure the
+ <acronym>LUN</acronym> at system startup, add the command to
+ <filename>/etc/rc.local</filename>.</para>
+
+ <para>&man.ctld.8; can also be used to manage
+ <acronym>LUN</acronym>s. Create
+ <filename>/etc/ctl.conf</filename>, add a line to
+ <filename>/etc/rc.conf</filename> to make sure &man.ctld.8; is
+ automatically started at boot, and then start the
+ daemon.</para>
+
+ <para>This is an example of a simple
+ <filename>/etc/ctl.conf</filename> configuration file. Refer
+ to &man.ctl.conf.5; for a more complete description of the
+ options.</para>
+
+ <programlisting>target naa.50015178f369f092 {
+ lun 0 {
+ path /data/target0
+ size 4G
+ }
+}</programlisting>
+
+ <para>The example creates a single target with a single
+ <acronym>LUN</acronym>. The
+ <literal>naa.50015178f369f092</literal> is a device identifier
+ composed of 32 random hexadecimal digits. The
+ <literal>path</literal> line defines the full path to a file
+ or zvol backing the <acronym>LUN</acronym>. That file must
+ exist before starting &man.ctld.8;. The second line is
+ optional and specifies the size of the
+ <acronym>LUN</acronym>.</para>
+
+ <para>To make sure the &man.ctld.8; daemon is started at
+ boot, add this line to
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>ctld_enable="YES"</programlisting>
+
+ <para>To start &man.ctld.8; now, run this command:</para>
+
+ <screen>&prompt.root; <userinput>service ctld start</userinput></screen>
+
+ <para>As the &man.ctld.8; daemon is started, it reads
+ <filename>/etc/ctl.conf</filename>. If this file is edited
+ after the daemon starts, reload the changes so they take
+ effect immediately:</para>
+
+ <screen>&prompt.root; <userinput>service ctld reload</userinput></screen>
+ </sect2>
+ </sect1>
+</chapter>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, May 26, 10:59 AM (54 m, 36 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33529288
Default Alt Text
D15513.id42807.diff (21 KB)
Attached To
Mode
D15513: Rewrite USB device mode chapter
Attached
Detach File
Event Timeline
Log In to Comment