⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.html

📁 这是很好的学习嵌入式LINUX的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<li><p>呼入端口被命名为<tt class="FILENAME">/dev/ttyd<varclass="REPLACEABLE">N</var></tt>,这儿<varclass="REPLACEABLE">N</var>是端口号,从零开始。通常,你使用呼入端口作为终端。呼入端口要求数据线使用载波检测(DCD)信号来工作。</p></li><li><p>呼出端口被命名为<tt class="FILENAME">/dev/cuaa<varclass="REPLACEABLE">N</var></tt>。你通常不使用呼出端口作为终端,只使用modem。如果串行线或终端不支持载波检测数据传输,你可以使用呼出端口。</p></li></ul><p>如果你已经连接一个终端到第一个串行端口(在<spanclass="TRADEMARK">MS-DOS</span>&reg;上是<ttclass="DEVICENAME">COM1</tt>),那你可以使用<ttclass="FILENAME">/dev/ttyd0</tt>来作为终端。如果它是在第二个串行端口(<ttclass="DEVICENAME">COM2</tt>),那就是<tt class="FILENAME">/dev/ttyd1</tt>,等等。</p></div></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN28100" name="AEN28100">20.2.3. 内核配置</a></h2><p>FreeBSD默认支持4个串行端口。在<span class="TRADEMARK">MS-DOS</span>下,这些是 <ttclass="DEVICENAME">COM1</tt>, <tt class="DEVICENAME">COM2</tt>, <ttclass="DEVICENAME">COM3</tt>, 和 <ttclass="DEVICENAME">COM4</tt>。FreeBSD当前支持“dumb”多端口串行接口卡,如BocaBoard1008和2016,与许多Digiboard 和StallionTechnologies制造的智能多接口卡一样好。然而,默认的内核只会寻找标准的COM端口。</p><p>要看看你的内核是否支持你的串口,只要在内核启动时查看一下启动信息,或使用<ttclass="COMMAND">/sbin/dmesg</tt>命令重新检测内核启动信息。特别的,寻找以<varclass="LITERAL">sio</var>字符启动的信息。</p><div class="TIP"><blockquote class="TIP"><p><b>提示:</b> 提示:要看看带有<varclass="LITERAL">sio</var>字符的信息,可以使用下面的命令:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">/sbin/dmesg | grep 'sio'</kbd></pre><br /><br /></blockquote></div><p>例如,在一个带有4个串口的系统上,这些是串口特定的内核启动信息:</p><pre class="SCREEN">sio0 at 0x3f8-0x3ff irq 4 on isasio0: type 16550Asio1 at 0x2f8-0x2ff irq 3 on isasio1: type 16550Asio2 at 0x3e8-0x3ef irq 5 on isasio2: type 16550Asio3 at 0x2e8-0x2ef irq 9 on isasio3: type 16550A</pre><p>如果你的内核没有认出你的所有串口,你需要为你的系统定制一个内核。更多有关配置内核的细节,可以看看第9章<a href="kernelconfig.html">&#181;&#218; 8 章</a>。</p><p>在你的内核配置文件中相关的设备行是这样的,FreeBSD&nbsp;4.X:</p><pre class="PROGRAMLISTING">device     sio0    at isa? port port IO_COM1 irq 4device      sio1    at isa? port port IO_COM2 irq 3device      sio2    at isa? port IO_COM3 irq 5device      sio3    at isa? port IO_COM4 irq 9</pre><p>FreeBSD&nbsp;5.X:</p><pre class="PROGRAMLISTING">device     sio</pre><p>你可以注释掉或完全删除你没有的设备。FreeBSD&nbsp;5.X需要修改<ttclass="FILENAME">/boot/device.hints</tt>文件。请看看 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sio</span>(4)</span>的有关如何为你的多端口主板写入配置信息的联机手册。如果你使用了一个不同版本的FreeBSD的配置文件,请小心点,因为设备的标记在两个版本之间已经改变了。</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 这里端口<var class="LITERAL">IO_COM1</var>代替了<varclass="LITERAL">0x3f8</var>,端口<var class="LITERAL">IO_COM2</var>代替了<varclass="LITERAL">0x2f8</var>,端口<var class="LITERAL">IO_COM3</var>代替了<varclass="LITERAL">0x3e8</var>,端口<var class="LITERAL">IO_COM4</var>代替了<varclass="LITERAL">0x2e8</var>,这些都是各自端口相应的端口地址。中断4,3,5,9都是经常用的中断。也要注意有些正常的串行端口可能<span class="emphasis"><iclass="EMPHASIS">无法</i></span>在一些ISA总线的PC上共享中断(多端口板卡有板载的电子设备,允许在板上所有16550A的设备共享一个或两个中断请求)。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN28141" name="AEN28141">20.2.4. 设备指定文件</a></h2><p>内核中的绝大多数设备可以通过``device special files''来访问,它就在<ttclass="FILENAME">/dev</tt>目录下。<tt class="DEVICENAME">sio</tt>设备通过<ttclass="FILENAME">/dev/ttyd<var class="REPLACEABLE">N</var></tt>(拨入)和<ttclass="FILENAME">/dev/cuaa<varclass="REPLACEABLE">N</var></tt>(拨出)设备来访问。FreeBSD也提供了初始化的设备(<ttclass="FILENAME">/dev/ttyid<var class="REPLACEABLE">N</var></tt> 和 <ttclass="FILENAME">/dev/cuaia<var class="REPLACEABLE">N</var></tt>)和锁定的设备(<ttclass="FILENAME">/dev/ttyld<var class="REPLACEABLE">N</var></tt> 和 <ttclass="FILENAME">/dev/cuala<varclass="REPLACEABLE">N</var></tt>)。初始化的设备在每次端口被打开时被用来初始化设备通信端口参数。例如使用<var class="LITERAL">RTS/CTS</var>的流控制信号的<varclass="LITERAL">crts</var>的调制解调器。锁定设备被用来锁定端口的标记以阻止用户或程序改变某个参数。看看<span class="CITEREFENTRY"><span class="REFENTRYTITLE">termios</span>(4)</span>, <spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">sio</span>(4)</span>, 和 <spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">stty</span>(1)</span>的联机手册了解更多信息。</p><div class="SECT3"><h3 class="SECT3"><a id="AEN28170" name="AEN28170">20.2.4.1. 编译设备指定文件</a></h3><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b>FreeBSD5.0已把自动创建设备接点的devfs文件系统作为是必需的。如果你在运行启用<varclass="LITERAL">devfs</var>的FreeBSD版本,你就可以跳过这一节。</p></blockquote></div><p>一个在<tt class="FILENAME">/dev</tt>目录下的叫做<ttclass="COMMAND">MAKEDEV</tt>的shell脚本管理着设备指定文件。要使用<ttclass="COMMAND">MAKEDEV</tt>来建立拨号设备指定文件,可以使用<ttclass="DEVICENAME">COM1</tt>:(port 0),<tt class="COMMAND">cd</tt> 进入<ttclass="FILENAME">/dev</tt>,然后执行命令<tt class="COMMAND">MAKEDEVttyd0</tt>。同样地,要建立拨号设备指定文件以使用<tt class="DEVICENAME">COM2</tt>:(port1),可以执行<tt class="COMMAND">MAKEDEV ttyd1</tt>。</p><p><tt class="COMMAND">MAKEDEV</tt>不仅仅创建<tt class="FILENAME">/dev/ttyd<varclass="REPLACEABLE">N</var></tt>设备指定文件,也创建 <tt class="FILENAME">/dev/cuaa<varclass="REPLACEABLE">N</var></tt>, <tt class="FILENAME">/dev/cuaia<varclass="REPLACEABLE">N</var></tt>, <tt class="FILENAME">/dev/cuala<varclass="REPLACEABLE">N</var></tt>, <tt class="FILENAME">/dev/ttyld<varclass="REPLACEABLE">N</var></tt>, 以及 <tt class="FILENAME">/dev/ttyid<varclass="REPLACEABLE">N</var></tt>节点。</p><p>建立完新设备指定文件后,需要检查文件的权限来确定谁可以在这些文件上读写——你可能不想让普通的用户使用你的modem吧。在<tt class="FILENAME">/dev/cua*</tt>文件上的默认权限应该是足够了:</p><pre class="SCREEN">crw-rw----    1 uucp     dialer    28, 129 Feb 15 14:38 /dev/cuaa1crw-rw----    1 uucp     dialer    28, 161 Feb 15 14:38 /dev/cuaia1crw-rw----    1 uucp     dialer    28, 193 Feb 15 14:38 /dev/cuala1</pre><p>这些许可允许用户<tt class="USERNAME">uucp</tt>和在组<ttclass="USERNAME">dialer</tt>上的用户使用呼出设备。</p></div></div><div class="SECT2"><h2 class="SECT2"><a id="SERIAL-HW-CONFIG" name="SERIAL-HW-CONFIG">20.2.5.串行端口配置</a></h2><p><tt class="DEVICENAME">ttyd<var class="REPLACEABLE">N</var></tt>(或<ttclass="DEVICENAME">cuaa<varclass="REPLACEABLE">N</var></tt>)设备是你将要打开的应用程序的正常设备。当一个进程打开某个设备时,它将有一个终端I/O设置的默认配置。你可以在命令行看看这些设置:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">stty -a -f /dev/ttyd1</kbd></pre><p>当你修改了这个设备的设置,这个设置会生效,除非设备被关闭。当它被重新打开时,它将回到默认设置。要修改默认设置,你可以打开和调整``initialstate''设备的设置。例如,要为<tt class="DEVICENAME">ttyd5</tt>打开<varclass="OPTION">CLOCAL</var> 模式,8位通信和默认的 <var class="OPTION">XON/XOFF</var>流控制,键入:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">stty -f /dev/ttyid5 clocal cs8 ixon ixoff</kbd></pre><p>串行设备的系统初始化是用<ttclass="FILENAME">/etc/rc.serial</tt>文件类控制的。这个文件会影响串行设备的默认设置。</p><p>要防止某个设置被一个应用程序所修改,需要调整 ``lock state''设备。例如,要锁定<ttclass="DEVICENAME">ttyd5</tt> 的速度为57600&nbsp;bit/s,键入:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">stty -f /dev/ttyld5 57600</kbd></pre><p>现在,一个打开<tt class="DEVICENAME">ttyd5</tt>和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地,你需要确定初始状态,然后只用root帐户锁定状态设备的写入功能。</p><p>很显然,你应该只让 <tt class="USERNAME">root</tt> 用户可以初始化或锁定设备的状态。</p></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="serialcomms.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="term.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">串口通信</td><td width="34%" align="center" valign="top"><a href="serialcomms.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">终端</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -