TetaTricks/chap/hardware.tex

308 lines
9.2 KiB
TeX
Raw Normal View History

2020-09-29 19:41:53 +11:00
\chapter{Hardware}
2020-11-13 11:35:31 +11:00
\label{chap:hardware}
2020-09-29 19:41:53 +11:00
2021-12-24 06:06:52 +11:00
% -----------------------------------------------------------
\section{Joystick}\index{joystick}
2023-10-09 06:56:41 +11:00
La manette de jeu est un périphérique que j'affectionne particulièrement.
2021-12-24 06:06:52 +11:00
\begin{verbatim}
int foo, joy_fd;
struct js_event js;
joy_fd = open(joy_device , O_RDONLY);
foo = read(joy_fd, &js, sizeof(struct js_event));
\end{verbatim}
% -----------------------------------------------------------
2020-09-29 19:41:53 +11:00
\section{Diagnostics}
2020-11-20 14:06:44 +11:00
Quand les choses ne se passent pas comme prévu, quand il
y a des accrocs dans le plan, que le résultat n'est
2024-08-09 00:28:22 +11:00
qu'une video totalement noire de 17 minutes, que des
octets incongrus arrivent depuis l'Arduino.
2024-08-17 19:02:59 +11:00
dmesg, lscpu, lshw, lsusb, lspci\dots
2020-09-29 19:41:53 +11:00
2023-10-09 06:56:41 +11:00
% -----------------------------------------------------------
% new: Fri Sep 22 11:13:36 UTC 2023
\subsection{lshw} \index{lshw}
\begin{quote}
lshw is a small tool to extract detailed information on the hardware
configuration of the machine. It can report exact memory configuration,
firmware version, mainboard configuration, CPU version and speed, cache
configuration, bus speed, etc. on DMI-capable x86 or IA-64 systems and
on some PowerPC machines (PowerMac G4 is known to work).
\end{quote}
2020-09-29 19:41:53 +11:00
% -----------------------------------------------------------
2024-08-17 19:02:59 +11:00
\subsection{lscpu} \index{lscpu}
\begin{verbatim}
tth@redlady:~/Desktop$ lscpu --all --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3800.0000 1600.0000
1 0 0 1 1:1:1:0 yes 3800.0000 1600.0000
2 0 0 2 2:2:2:0 yes 3800.0000 1600.0000
3 0 0 3 3:3:3:0 yes 3800.0000 1600.0000
tth@redlady:~/Desktop$
\end{verbatim}
% -----------------------------------------------------------
2020-09-29 19:41:53 +11:00
\section{Ports série}
2021-12-24 06:06:52 +11:00
\index{rs232} \label{rs232}
2020-09-29 19:41:53 +11:00
2020-11-20 14:06:44 +11:00
\begin{quote}
RS-232 (parfois appelée EIA RS-232, EIA 232 ou TIA 232) est
une norme standardisant une voie de communication de type série.
Le standard RS-232 recouvre plusieurs autres standards~:
les recommandations UIT-T V.24 (définition des circuits)
et V.28 (caractéristiques électriques),
ainsi que la norme ISO 2110 pour la connectique.
\end{quote}
2020-09-29 19:41:53 +11:00
Comment détecter si un \textit{device} correspond bien
2024-09-29 05:25:02 +11:00
à un port série ? Une fois de plus, la réponse passe
par un \textsl{ioctl}\index{ioctl}.
Même si il est bien caché.
2020-09-29 19:41:53 +11:00
\begin{lstlisting}[language=C]
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#define TTY "/dev/ttyS18"
int main(void) {
int fd = open(TTY, O_RDWR | O_NOCTTY);
if (fd < 0) {
perror("open " TTY);
return 1;
}
struct termios tio;
if (tcgetattr(fd, &tio)) {
perror("tcgetattr " TTY);
return 1;
}
2020-11-20 14:06:44 +11:00
return 0;
2020-09-29 19:41:53 +11:00
}
\end{lstlisting}
2024-09-29 05:25:02 +11:00
En effet, \texttt{tcgetattr(3)} va aller lire le paramétrage
du port associé au descripteur de fichier \texttt{fd}
par l'intermédiaire d'un ioctl (qui aurait pû prévoir ?)
que nous détaillerons un de ces jours.
2020-11-20 14:06:44 +11:00
Et la question qui, je le sens, va venir~: « à quoi peut bien
servir un port série ? » appelle un réponse presque évidente~:
« à plusieurs choses ». Une petite liste~:
Connecter un Minitel\index{MINITEL}
pour dialoguer avec Ulla Trentsixquinze ? Brancher un
2021-12-24 06:06:52 +11:00
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
2020-11-20 14:06:44 +11:00
Discuter avec un équipement avionnique ? Rediriger
2024-08-09 00:28:22 +11:00
l'impression d'un MSX\index{MSX} ou d'un Alice 32
vers Cups\index{cups} ?
2020-09-29 19:41:53 +11:00
2020-11-20 14:06:44 +11:00
Les possibilités sont infinies. C'est votre imagination qui
est la limite\footnote{Comme à peu près tout dans la vie.}
2020-09-29 19:41:53 +11:00
2022-01-20 09:31:51 +11:00
% -----------------------------------------------------------
2024-09-29 05:25:02 +11:00
\section{Ports \textbf{//}} \label{portparallele}
2022-01-20 09:31:51 +11:00
\index{port //}
% http://people.redhat.com/twaugh/parport/html/x623.html
périphérique \texttt{/dev/parport}
2023-11-30 00:12:03 +11:00
Question: comment faire du \textsl{bitbanging} ?
2024-08-09 00:28:22 +11:00
% -----------------------------------------------------------
\section{USB} \index{USB} \label{USB}
2024-09-29 05:25:02 +11:00
Universal Serial Bus, existe en trois taille.
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ lsusb
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 006: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 002 Device 002: ID 0461:4e6f Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
\end{verbatim}
2024-08-09 00:28:22 +11:00
2020-09-29 19:41:53 +11:00
% -----------------------------------------------------------
\section{Disques durs}
2020-11-20 14:06:44 +11:00
Iozone ? Bonnie ? Smart\index{smart} ? UUID\index{uuid} ?
2020-11-23 07:07:05 +11:00
Ddrescue\index{ddrescue} ?
2020-11-20 14:06:44 +11:00
2020-11-23 07:07:05 +11:00
\subsection{blkid \& lsblk}
2020-11-20 14:06:44 +11:00
À mi-chemin entre le matériel et le système, la commande
\texttt{blkid}\index{blkid} affiche quelques informations
sur les périphériques blocs
et surtout les partitions qu'ils contiennent~:
\begin{itemize}
\item Périphérique dans \texttt{/dev/}
\item UUID XXX\index{XXX}
\item Type de la partition
\item Label textuel
\item PARTUID
\end{itemize}
2020-11-23 07:07:05 +11:00
\vspace{1em}
Quand à \texttt{lsblk}\index{lsblk}, elle affiche
le même genre d'information, mais en plus joli
(j'ai utilisé l'option \texttt{-i} pour que le résultat
passe mieux à l'impression)~:
\begin{verbatim}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 232.9G 0 disk
+-sda1 8:1 0 18.6G 0 part /
+-sda2 8:2 0 3.8G 0 part [SWAP]
+-sda3 8:3 0 488M 0 part /boot
+-sda4 8:4 0 210G 0 part /home
\end{verbatim}
2020-11-20 14:06:44 +11:00
% -----------------------------------------------------------
\subsection{Smart}\index{smart}
Self-Monitoring, Analysis and Reporting Technology%
\footnote{http://www.smartmontools.org/} est un ensemble
de choses pour la surveillance de l'état des disques durs
et dérivés (SSD\index{SSD}). Il permettrait, dans un monde
idéal, la prédiction des pannes.
\begin{verbatim}
smartctl -a /dev/sda
Print a large amount of SMART information for drive /dev/sda .
\end{verbatim}
% -----------------------------------------------------------
2020-11-23 07:07:05 +11:00
\subsection{fsck}\index{fsck}\index{fuck}
2020-11-20 14:06:44 +11:00
\textsl{Check and repair a Linux filesystem}
2024-08-09 00:28:22 +11:00
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne
la tronçonneuse, parce que là, c'est pas beau à voir\dots}
2020-11-23 07:07:05 +11:00
2020-11-20 14:06:44 +11:00
% -----------------------------------------------------------
\subsection{tune2fs}\index{tune2fs}
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
2020-11-23 07:07:05 +11:00
filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
2020-11-20 14:06:44 +11:00
2024-08-09 00:28:22 +11:00
% -----------------------------------------------------------
% nouveau 2 juin 2024
% basé sur mes tentatives pour faire marcher l'interface
% Enttec OpenDMX USB
\section{udev} \index{udev} \label{udev}
\begin{quote}
udev supplies the system software with device events, manages
permissions of device nodes and may create additional symlinks in the
/dev directory, or renames network interfaces. The kernel usually just
assigns unpredictable device names based on the order of discovery.
Meaningful symlinks or network device names provide a way to reliably
identify devices based on their properties or current configuration.
\end{quote}
Avant de rentre dans les détails, nous pouvons aller voir un exemple
concret en page \pageref{OpenDMX} où nous atriburons un nom fixe
à une interface USB.
2020-11-20 14:06:44 +11:00
% -----------------------------------------------------------
2023-11-30 00:12:03 +11:00
\section{Sensors} \index{sensors}
L'outil pour connaitre la température de votre CPU surmené.
% -----------------------------------------------------------
2020-11-20 14:06:44 +11:00
\section{Interface réseau}\index{NIC}
2020-09-29 19:41:53 +11:00
On a parfois besoin de savoir dans quel état est une interface
2020-11-20 14:06:44 +11:00
réseau Ethernet
(\textsc{up}, \textsc{running} dans la sortie de ifconfig).
2020-09-29 19:41:53 +11:00
Parfois, je n'aime pas trop \textit{parser} celle-ci à grand
coup de \textit{regexp}\index{regexp}, en particulier dans un
contexte de type Busybox\index{busybox}. Et pour ce cas-là, je
préfère utiliser un binaire brassé à la maison, et dont voici
un fragment de source :
\begin{lstlisting}[language=C]
int get_if_flags(char *ifname, short *p_flags)
{
int fd;
int retcode;
struct ifreq req;
#if DEBUG_LEVEL
2024-08-09 00:28:22 +11:00
fprintf(stderr, ">>> %s ( \"%s\" to %p )\n", \
2020-09-29 19:41:53 +11:00
__func__, ifname, p_flags);
#endif
/* Sanity check */
if ( strlen(ifname) > (IFNAMSIZ-1) )
{
fprintf(stderr, "name %s to long\n", ifname);
abort();
}
fd = socket(PF_INET, SOCK_DGRAM, 0);
if (fd < 0)
{
perror("socket bla...");
return -2;
}
/* populate the struct for the request */
memset(&req, 0, sizeof(req));
strcpy(req.ifr_name, ifname);
/* do the call */
retcode = ioctl(fd, SIOCGIFFLAGS, &req);
if (retcode < 0)
{
perror("ioctl SIOCGIFFLAGS");
close(fd);
return -1;
}
2024-08-09 00:28:22 +11:00
#if DEBUG_LEVEL /* display the result */
2020-09-29 19:41:53 +11:00
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
#endif
close(fd);
*p_flags = req.ifr_flags;
return 0;
}
\end{lstlisting}
Hélas, je n'ai pas pu trop tester ce truc sur beaucoup de systèmes,
et je vous propose de ne pas trop lui faire confiance pour une
application critique...
2020-11-20 14:06:44 +11:00
% -----------------------------------------------------------
2020-09-29 19:41:53 +11:00