This commit is contained in:
Florian Pose 2008-10-22 12:04:07 +00:00
parent 0fc0b5a0ae
commit a0bfdb7abf
1 changed files with 17 additions and 15 deletions

View File

@ -300,7 +300,7 @@ Lesser General Public License (LGPL \cite{lgpl})\index{LGPL}, version 2.1.
%------------------------------------------------------------------------------
\chapter{Architecture}
\label{sec:arch}
\label{chap:arch}
\index{Master!Architecture}
The EtherCAT master is integrated into the Linux 2.6 kernel. This was
@ -2212,7 +2212,7 @@ installation prefix as \textit{libethercat.a} (for static linking),
\textit{libethercat.la} (for the use with \textit{libtool}) and
\textit{libethercat.so} (for dynamic linking).
\subsection{Usage}
\subsection{Using the Library}
The application interface header \textit{ecrt.h} can be used both in kernel
and in user context.
@ -2256,7 +2256,8 @@ gcc -static ectest.c -o ectest -I/opt/etherlab/include \
\label{sec:userimp}
Basically the kernel API was transferred into userspace via the master
character device (see sec.~\ref{sec:cdev}).
character device (see chap.~\ref{chap:arch}, fig.~\ref{fig:arch} and
sec.~\ref{sec:cdev}).
The function calls of the kernel API are mapped to the userspace via an
\lstinline+ioctl()+ interface. Each function has its own \lstinline+ioctl()+
@ -2264,19 +2265,20 @@ call. The kernel part of the interface calls the according API functions
directly, what results in a minimum additional delay (see
sec.~\ref{sec:usertiming}).
Also for performance reasons, the actual domain process data (see
chap.~\ref{chap:api}) are not copied between kernel and user memory on every
access: Instead, the data are memory-mapped to the userspace application. Once
the master is configured and activated, the master module creates one big
process data memory area for all domains and maps it to userspace, so that the
application can directly access the process data. For that, there is no
additional delay when accessing the process data from userspace.
For performance reasons, the actual domain process data (see
sec.~\ref{sec:processdata}) are not copied between kernel and user memory on
every access: Instead, the data are memory-mapped to the userspace
application. Once the master is configured and activated, the master module
creates one process data memory area spanning all domains and maps it to
userspace, so that the application can directly access the process data. As a
result, there is no additional delay when accessing process data from
userspace.
\paragraph{Differences} Because of the memory-mapping of the process data, the
memory is managed internally by the library functions. As a result, it is not
possible to provide external memory for domains, like in the kernel API. The
corresponding functions are only available in kernelspace. This is the only
difference when using the application interface in userspace.
\paragraph{Kernel/User API Differences} Because of the memory-mapping of the
process data, the memory is managed internally by the library functions. As a
result, it is not possible to provide external memory for domains, like in the
kernel API. The corresponding functions are only available in kernelspace.
This is the only difference when using the application interface in userspace.
\subsection{Timing}
\label{sec:usertiming}