Carte hôte AudioWire · pilote Linux hors-arbre

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
00

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.

01

Ce qui est livré

Un pilote, deux applications de contrôle et un installeur qui fonctionne sur n'importe quelle distribution.

Noyau

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.

Contrôle · CLI

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.

Contrôle · GUI

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.

Installation

Toute distribution

Détecte pacman/apt/dnf/zypper/apk/xbps, installe les dépendances puis le module via DKMS. Non interactif sous curl | sh.

Outillage

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.

Licence

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.

02

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écouverteValeurÉ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
& 0xff800000CONFIRMÉ
Chemin d'interruption
l'ISR est une méthode virtuelle C++ ; interruption en attente = bit 1 du port
ack ← 0x10 @ +0x88CONFIRMÉ
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_BUFFERCONFIRMÉ
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 ← 2CONFIRMÉ
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écutionCONFIRMÉ
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 @ 0x61f50CONFIRMÉ
Firmware FPGA
la carte classique se configure depuis sa flash embarquée — aucun envoi depuis l'hôte
pas de request_firmwareCONFIRMÉ
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 + 0x64SUR CARTE
03

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_main.cattache PCI · mappe les BAR · vecteur IRQ · création de la carte ALSA — l'interruption appelle motu424_hw_irq_ack()
motu424_pcm.copérations PCM d'ALSA — traduit open/prepare/trigger/pointer en appels motu424_hw_*
motu424_hw.cregistres · horloge/fréquence · anneau DMA · ack IRQ — la vérité matérielle réside ici
04

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
05

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.

  • FAIT
    Cadre & outillage · ossature PCI/DMA/IRQ/ALSA, installeur multi-distribution, CLI + GUI, chaîne d'outils RE.
  • FAIT
    Modèle registres, IRQ & transport · MMIO fenêtré, ack IRQ, anneau PIO, l'interface IOCTL complète, le verdict sur le firmware.
  • FAIT
    Modè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.
  • PARTIEL
    Encodage 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 REQUISE
    Initialisation & validation · relever les adresses d'exécution, lecture/capture à chaque fréquence, le mixeur CueMix, tests d'endurance — le dernier pas avant le son.