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

📄 devs-eth-synth-ecosynth.html

📁 ecos3.0 beta 的官方文档,html格式
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!-- Copyright (C) 2009 Free Software Foundation, Inc.                                -->
<!-- This material may be distributed only subject to the terms      -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- or later (the latest version is presently available at          -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- permission is obtained from the copyright holder.               -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Synthetic Target Ethernet Driver</TITLE
><meta name="MSSmartTagsPreventParsing" content="TRUE">
<META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="eCos Reference Manual"
HREF="ecos-ref.html"><LINK
REL="UP"
TITLE="Synthetic Target Ethernet Driver"
HREF="devs-eth-synth-ecosynth-ref.html"><LINK
REL="PREVIOUS"
TITLE="Synthetic Target Ethernet Driver"
HREF="devs-eth-synth-ecosynth-ref.html"><LINK
REL="NEXT"
TITLE="Freescale ColdFire Ethernet Driver"
HREF="devs-eth-m68k-mcfxxxx-part.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>eCos Reference Manual</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="devs-eth-synth-ecosynth-ref.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="devs-eth-m68k-mcfxxxx-part.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="DEVS-ETH-SYNTH-ECOSYNTH"
></A
>Synthetic Target Ethernet Driver</H1
><DIV
CLASS="REFNAMEDIV"
><A
NAME="AEN20010"
></A
><H2
>Name</H2
>Synthetic Target Ethernet Support&nbsp;--&nbsp;Allow synthetic target applications to perform ethernet I/O</DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN20013"
></A
><H2
>Overview</H2
><P
>The synthetic target ethernet package can provide up to four network
devices, <CODE
CLASS="VARNAME"
>eth0</CODE
> to <CODE
CLASS="VARNAME"
>eth3</CODE
>. These can
be used directly by the eCos application or, more commonly, by a
TCP/IP stack that is linked with the eCos application. Each eCos
device can be mapped on to a real Linux network device. For example,
if the Linux PC has two ethernet cards and <CODE
CLASS="VARNAME"
>eth1</CODE
> is
not currently being used by Linux itself, then one of the eCos devices
can be mapped on to this Linux device. Alternatively, it is possible
to map some or all of the eCos devices on to the ethertap support
provided by the Linux kernel.
    </P
><P
>The ethernet package depends on the I/O auxiliary provided by the
synthetic target architectural HAL package. During initialization the
eCos application will attempt to instantiate the desired devices, by
sending a request to the auxiliary. This will load a Tcl script
<TT
CLASS="FILENAME"
>ethernet.tcl</TT
> that is responsible for handling the
instantiation request and subsequent I/O operations, for example
transmitting an ethernet packet. However, some of the low-level I/O
operations cannot conveniently be done by a Tcl script so
<TT
CLASS="FILENAME"
>ethernet.tcl</TT
> will actually run a separate program
<B
CLASS="COMMAND"
>rawether</B
> to interact with the Linux network device. 
    </P
><DIV
CLASS="INFORMALFIGURE"
><P
></P
><A
NAME="AEN20023"
></A
><DIV
CLASS="MEDIAOBJECT"
><P
><IMG
SRC="overview.png"
ALIGN="CENTER"></P
></DIV
><P
></P
></DIV
><P
>On the target-side there are configuration options to control which
network devices should be present. For many applications a single
device will be sufficient, but if the final eCos application is
something like a network bridge then the package can support multiple
devices. On the host-side each eCos network device needs to be mapped
on to a Linux one, either a real ethernet device or an ethertap
device. This is handled by an entry in the target definition file:
    </P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>synth_device ethernet {
    eth0 real eth1
    eth1 ethertap tap3 00:01:02:03:FE:05
    &#8230;
}</PRE
></TD
></TR
></TABLE
><P
>The ethernet package also comes with support for packet logging,
and provides various facilities for use by user Tcl scripts.
    </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="DEVS-ETH-ECOSYNTH-INSTALL"
></A
><H2
>Installation</H2
><P
>Before a synthetic target eCos application can access ethernet devices
it is necessary to build and install host-side support. The relevant
code resides in the <TT
CLASS="FILENAME"
>host</TT
>
subdirectory of the synthetic target ethernet package, and building it
involves the standard <B
CLASS="COMMAND"
>configure</B
>,
<B
CLASS="COMMAND"
>make</B
> and <B
CLASS="COMMAND"
>make install</B
> steps.
The build involves a new executable <B
CLASS="COMMAND"
>rawether</B
> which
must be able to access a raw Linux network device. This is achieved by
installing it suid root, so the <B
CLASS="COMMAND"
>make install</B
> step
has to be run with superuser privileges.
    </P
><DIV
CLASS="CAUTION"
><P
></P
><TABLE
CLASS="CAUTION"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>Caution</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>Installing <B
CLASS="COMMAND"
>rawether</B
> suid root introduces a
potential security problem. Although normally
<B
CLASS="COMMAND"
>rawether</B
> is executed only by the I/O auxiliary,
theoretically it can be run by any program. Effectively it gives any
user the ability to monitor all ethernet traffic and to inject
arbitrary packets into the network. Also, as with any suid root
programs there may be as yet undiscovered exploits. Users and system
administrators should consider the risks before running <B
CLASS="COMMAND"
>make
install</B
>. 
    </P
></TD
></TR
></TABLE
></DIV
><P
>There are two main ways of building the host-side software. It is
possible to build both the generic host-side software and all
package-specific host-side software, including the ethernet support,
in a single build tree. This involves using the
<B
CLASS="COMMAND"
>configure</B
> script at the toplevel of the eCos
repository. For more information on this, see the
<TT
CLASS="FILENAME"
>README.host</TT
> file at the top of the repository.
Note that if you have an existing build tree which does not include
the synthetic target ethernet support then it will be necessary to
rerun the toplevel configure script: the search for appropriate
packages happens at configure time.
    </P
><P
>The alternative is to build just the host-side for this package.
This requires a separate build directory, building directly in the
source tree is disallowed. The <B
CLASS="COMMAND"
>configure</B
> options
are much the same as for a build from the toplevel, and the
<TT
CLASS="FILENAME"
>README.host</TT
> file can be consulted for more
details. It is essential that the ethernet support be configured with
the same <CODE
CLASS="OPTION"
>--prefix</CODE
> option as other eCos host-side
software, especially the I/O auxiliary provided by the architectural
synthetic target HAL package, otherwise the I/O auxiliary will be
unable to locate the ethernet support.
    </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="DEVS-ETH-ECOSYNTH-OPTIONS"
></A
><H2
>Target-side Configuration Options</H2
><P
>The target-side code can be configured to support up to four ethernet
devices, <CODE
CLASS="VARNAME"
>eth0</CODE
> to <CODE
CLASS="VARNAME"
>eth3</CODE
>. By
default <CODE
CLASS="VARNAME"
>eth0</CODE
> is enabled if the configuration
includes a TCP/IP stack, otherwise it is disabled. The other three
devices are always disabled by default. If any of the devices are
enabled then there will also be the usual configuration options
related to building this package. Other options related to network
devices, for example whether or not to use DHCP, are provided by
the generic network device package.
    </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="DEVS-ETH-ECOSYNTH-REAL"
></A
><H2
>Real Ethernet</H2
><P
>One obvious way of providing a synthetic target eCos application with
ethernet I/O is to use a real ethernet device in the PC: transmitted
packets go out on a real network, and packets on the network addressed
to the right MAC address are passed on to eCos. This way synthetic
target networking behaves just like networking on a real target with
ethernet hardware. For example, if there is a DHCP server anywhere on
the network then eCos will be able to contact it during networking
startup and get hold of IP address information.
    </P
><P
>Configuring the ethernet support to use a real ethernet device
requires a simple entry in the target definition file:
    </P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>synth_device ethernet {
    &lt;eCos device&gt; real &lt;linux device&gt;
    &#8230;
}</PRE
></TD
></TR
></TABLE
><P
>For example, to map the eCos network device <CODE
CLASS="VARNAME"
>eth0</CODE
> to
the Linux device <CODE
CLASS="VARNAME"
>eth1</CODE
>:
    </P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>synth_device ethernet {
    eth0 real eth1
    &#8230;
}</PRE
></TD
></TR
></TABLE
><P
>It is not possible for an ethernet device to be shared by both the
eCos TCP/IP stack and the Linux one: there would be no simple way to
work out which stack incoming packets are intended for. In theory
it might be possible to do some demultiplexing using distinct IP
addresses, but it would be impossible to support some functionality
such as DHCP. Therefore the <B
CLASS="COMMAND"
>rawether</B
> program will
refuse to access any ethernet device already in use. On a typical
Linux system <CODE
CLASS="VARNAME"
>eth0</CODE
> will be used for Linux
networking, and the PC will have to be equipped with additional
ethernet devices for use by eCos.
    </P
><P
>The <B
CLASS="COMMAND"
>rawether</B
> program will access the hardware via
the appropriate Linux device driver, so it is important that the
system is set up such that the relevant module will be automatically
loaded or is already loaded. The details of this will depend on the
installed distribution and version, but typically it will involve an
entry in <TT
CLASS="FILENAME"
>/etc/modules.conf</TT
>.
    </P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="DEVS-ETH-ECOSYNTH-ETHERTAP"
></A
><H2
>Ethertap</H2
><P
>The Linux kernel's ethertap facility provides a virtual network
interface. A Linux application, for example the
<B
CLASS="COMMAND"
>rawether</B
> program, can open a special character
device <TT
CLASS="FILENAME"
>/dev/net/tun</TT
>, perform various
<CODE
CLASS="FUNCTION"
>ioctl</CODE
> calls, and then <TT
CLASS="FILENAME"
>write</TT
>
and <TT
CLASS="FILENAME"
>read</TT
> ethernet packets. When the device is
opened the Linux kernel automatically creates a new network interface,
for example <CODE
CLASS="VARNAME"
>tap0</CODE
>. The Linux TCP/IP stack can be
made to use this network interface like any other interface, receiving
and transmitting ethernet packets. The net effect is a virtual network
connecting just the Linux and eCos TCP/IP stacks, with no other nodes
attached. By default all traffic remains inside this virtual network
and is never forwarded to a real network.
    </P
><P
>Support for the ethertap facility may or may not be provided
automatically, depending on your Linux distribution and version. If
your system does not have a device <TT
CLASS="FILENAME"
>/dev/net/tun</TT
>
or a module <TT
CLASS="FILENAME"
>tun.o</TT
> then the appropriate kernel
documentation should be consulted, for example
<TT
CLASS="FILENAME"
>/usr/src/linux-2.4/Documentation/networking/tuntap.txt</TT
>.
If you are using an old Linux kernel then the ethertap functionality
may be missing completely. When the <B
CLASS="COMMAND"
>rawether</B
>
program is configured and built, the <B
CLASS="COMMAND"
>configure</B
>
script will check for a file <TT
CLASS="FILENAME"
>/usr/include/linux/if_tun.h</TT
>. If that
file is missing then <B
CLASS="COMMAND"
>rawether</B
> will be built without
ethertap functionality, and only real ethernet interfaces will be
supported.
    </P
><P
>The target definition file is used to map eCos network devices on to
ethertap devices. The simplest usage is:
    </P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>synth_device ethernet {
    eth0 ethertap
    &#8230;
}</PRE
></TD
></TR
></TABLE
><P
>The Linux kernel will automatically allocate the next available tap
network interface. Usually this will be <CODE
CLASS="VARNAME"
>tap0</CODE
> but if
other software is using the ethertap facility, for example to
implement a VPN, then a different number may be allocated. Usually it
will be better to specify the particular tap device that should be
used for each eCos device, for example:
    </P
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>synth_device ethernet {
    eth0 ethertap tap3
    eth1 ethertap tap4
    &#8230;
}</PRE
></TD
></TR
></TABLE
><P
>The user now knows exactly which eCos device is mapped onto which
Linux device, avoiding much potential confusion. Because the virtual
devices are emulated ethernet devices, they require MAC addresses.
There is no physical hardware to provide these addresses, so normally
MAC addresses will be invented. That means that each time the eCos

⌨️ 快捷键说明

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