MOTU PCI-324 / PCI-424,
réinventée pour Linux.
Un pilote noyau ALSA écrit de A à Z, une application de contrôle façon CueMix (CLI + GTK) et une rétro-ingénierie clean-room d'une carte son que le constructeur n'a jamais documentée.
curl -fsSL https://raw.githubusercontent.com/devfrp/Linux-motu-pci-424/main/get.sh | sh
Une carte non documentée, portée sur Linux au grand jour
La PCI-324/424 est une carte hôte pour les interfaces MOTU AudioWire — les 2408, 24I/O, 828, HD192, 896HD et consorts. Faute de documentation du constructeur, la table des registres et le protocole de transport ont été reconstitués à partir du pilote Windows : la rétro-ingénierie statique est terminée, seule la validation sur une vraie carte reste à faire. Toute l'infrastructure PCI, DMA, IRQ et ALSA est déjà en place ; tout ce qui demeure incertain est confiné à deux fichiers, de sorte que les faits confirmés se concentrent en un seul endroit.
Ce qui est livré
Un pilote, deux applications de contrôle et un installeur qui fonctionne sur n'importe quelle distribution.
Module ALSA
Découpage net en trois couches, entièrement géré par devm/pcim, empaqueté en DKMS pour se recompiler à chaque mise à jour du noyau.
motu424-ctl
Le CueMix FX version Linux, sur alsa-lib : source d'horloge, fréquence d'échantillonnage, gain/atténuation/phase par entrée et la matrice d'écoute entrées×bus.
motu424-gui
Une console de mixage GTK4 façon CueMix : tranches avec faders, vumètres à maintien de crête et panoramiques rotatifs, scènes, snapshots, annulation — visible sans carte avec --demo.
Toute distribution
Détecte pacman/apt/dnf/zypper/apk/xbps, installe les dépendances puis le module via DKMS. Non interactif sous curl | sh.
RE clean-room
Un analyseur de références croisées capstone et un résolveur de vtables C++ ; chaque fait reconstitué est consigné avec sa preuve.
Faits seuls, GPL
Seuls les décalages, formats et séquences entrent dans les sources GPL-2.0. Les binaires du constructeur ne sont jamais redistribués.
Ce que la rétro-ingénierie a établi
Reconstitué statiquement à partir du pilote Windows du constructeur — sans carte — avec
objdump, un analyseur de références croisées capstone et le décompileur
rz-ghidra pour le graphe d'objets C++. La RE statique est désormais terminée.
| Découverte | Valeur | État |
|---|---|---|
| Espace d'adressage MMIO fenêtré aiguillé par le bit-repère 0x01800000 — fenêtre A de 8 Mo / fenêtre B de 4 Mo | & 0xff800000 | CONFIRMÉ |
| Chemin d'interruption l'ISR est une méthode virtuelle C++ ; interruption en attente = bit 1 du port | ack ← 0x10 @ +0x88 | CONFIRMÉ |
| Transport PIO vers une fenêtre de la carte, dmaPoint matériel + anneau logiciel — pas de DMA bus-master côté hôte | WRITE_REGISTER_BUFFER | CONFIRMÉ |
| Séquence d'initialisation audio la carte publie son adresse de base audio après une impulsion sur le port, relue par scrutation | impulsion port+4 ← 2 | CONFIRMÉ |
| Cartographie des canaux du boîtier le nombre de canaux est lu dans un descripteur fourni par l'interface connectée — pas dans une table statique | descripteur à l'exécution | CONFIRMÉ |
| Modèle d'objets du périphérique l'objet audio est un singleton global ; sous-objets : gestionnaire de fenêtres MMIO + tampon DMA partagé | A @ 0x61f50 | CONFIRMÉ |
| Firmware FPGA la carte classique se configure depuis sa flash embarquée — aucun envoi depuis l'hôte | pas de request_firmware | CONFIRMÉ |
| Destination du mixeur CueMix coefficients transférés par plage modifiée vers une base indiquée par la carte | [dev + 0x9c] | CONFIRMÉ |
| Paramètre de fréquence & sélection d'horloge liés à l'interface et à la carte — ces dernières valeurs ne s'observent que sur du matériel | base + 0x64 | SUR CARTE |
Chemin du signal
Les couches PCI et PCM restent indépendantes du matériel ; chaque décalage de registre et chaque encodage résident uniquement dans le nœud du bas.
motu424_hw_irq_ack()motu424_hw_*Installation
La commande unique récupère les sources et lance l'installeur — dépendances, module DKMS, outils. Ajoute --gui pour le panneau graphique.
Une ligne
# dépendances + module DKMS + outils + chargement curl -fsSL https://raw.githubusercontent.com/devfrp/Linux-motu-pci-424/main/get.sh | sh # avec l'interface GTK curl -fsSL …/get.sh | sh -s -- --gui
Cloner & compiler
git clone https://github.com/devfrp/Linux-motu-pci-424 cd motu-pci-424 ./install.sh # ou : make && make load motu424-ctl # état CueMix (CLI) motu424-gui # panneau graphique
Où en est le projet
La rétro-ingénierie statique est terminée — tout ce qui est accessible sans matériel est acquis. Le reste est empirique et demande une vraie carte sur le banc.
- FAITCadre & outillage · ossature PCI/DMA/IRQ/ALSA, installeur multi-distribution, CLI + GUI, chaîne d'outils RE.
- FAITModèle registres, IRQ & transport · MMIO fenêtré, ack IRQ, anneau PIO, l'interface IOCTL complète, le verdict sur le firmware.
- FAITModèle d'objets & initialisation · toute la structure d'extension du périphérique, l'objet audio & ses sous-objets, et la séquence qui publie l'adresse de base audio.
- PARTIELEncodage horloge & fréquence · familles de fréquence, activation et incrément obtenus ; la sélection d'horloge et le paramètre de fréquence sont liés à l'interface — leurs valeurs demandent une carte.
- CARTE REQUISEInitialisation & validation · relever les adresses d'exécution, lecture/capture à chaque fréquence, le mixeur CueMix, tests d'endurance — le dernier pas avant le son.