\subsubsection{Device Nodes} % ---------------------------- \begin{frame}[fragile] \frametitle{Basics} \begin{itemize} \item Reference to Device Drivers and its Instances \item Re-use file-syscalls to extend the System API \item File-syscall redirection to Device Driver \end{itemize} \begin{beamerboxesrounded}[shadow=true]{Access to HW by Userspace applications} \begin{scriptsize} \begin{verbatim} /* open file (permissions will be checked)*/ fd = open("/dev/ttyS0, flags); /* read data from HW */ read(fd, buf, buf_len); /* write data to HW */ write(fd, buf, buf_len); /* close file after usage close(fd); \end{verbatim} \end{scriptsize} \end{beamerboxesrounded} \end{frame} % Device nodes are the main interfaces to device drivers. The device nodes % are special files, which appears in a filesytem. Userspace application can % interact with with the hardware via these device nodes. Instead of % creating additional syscalls for accessing the hardware, the device node % concept re-uses the file systemcalls read(), write(), and ioctl(). % ---------------------------- \begin{frame}[fragile] \frametitle{Special File} \begin{itemize} \item Special Files (inodes) \item File Type: Block or Character \item Major Number \begin{itemize} \item Reference to Device Driver \item Handled by common Kernel code \end{itemize} \item Minor Number \begin{itemize} \item Reference to Device Instance \item Handled by Device Driver \end{itemize} \item Permissions manage access to HW \end{itemize} \end{frame} % There are two types of devide nodes, block and character devices. Each % device node has a major and minor number. The type and major number is % used to find the right driver in the right subsystem for the hardware % access. The minor number is used by the driver for handling multiple % instances. This allows to handle multiple instances of the same controller % type with one single device driver implementation. % ---------------------------- \begin{frame}[fragile] \frametitle{Special File: Diagram} \begin{figure}[h] \centering \includegraphics[width=8cm]{images/devicenode.png} \end{figure} \end{frame} % ---------------------------- \begin{frame}[fragile] \frametitle{Manage Special Files} \begin{itemize} \item manually: \texttt{mknod /dev/ttyS0 c 4 65} \item hotplug: userspace /dev (udev) \item kernel: \texttt{mount -t devtmpfs none /dev} \end{itemize} \end{frame} % The device nodes can be created manually with the command "mknod", or by % the hotplug mechanism userspace /dev (udev). The kernel also provides a % pseudo fs "devtmpfs" with device nodes for all existing deivces. This is % very useful for small devices, where it's too complex to setup udev and % its rules. % ---------------------------- \subsubsection*{} \begin{frame} \frametitle{Resources} \begin{itemize} \item \href{http://man7.org/linux/man-pages/man7/udev.7.html}{man 7 udev} \end{itemize} \end{frame}