Linux

Linux er Knippix i websdr.dk

Det har vist sig at Linux måde at reservere båndbredde på er interessant.

En USB 2.0 bus kan overføre 480 Mbit/s i high speed. Dette er et absolut maksimum for alt hvad der er tilsluttet en USB port direkte på IO processor.

En full Speed device kan overføre 12 MBit/s.

Lydkortet kører Isokron full speed (garanteret bådbredde) og i USB der der 1023 bytes per mS til rådighed for den slags.

Hvis sample rate er 192 ks/s og der er 2 kanaler af 16 bit (2 bytes) , bliver resultatet at der skal overføres 768 bytes/mS - det lader sig gøre.

Hvis sample rate er 192 ks/s og der er 2 kanaler af 24 bits (3 bytes), bliver resultatet at de skal overføres 1152 bytes/mS - det lader sig ikke gøre.

Så nu ved vi at ved Full Speed isokron kan der aldrig blive overført mere end 8 Mbit /s, i dette tifælde (192 / 16 ) bliver der nok til 6,1 Mbit/s

Det har vist sig at Linux, idet den jo skal garantere at der er plads på bussen, sætter lydenheden til 12Mbit/s - hvilket er fornuftigt nok.

De konstruerede lydkort, indeholder ud over lydenheden også en USBCDC (rs232 over usb) til konfigurering og styring.

Det har vist sig at Linux, ide den jo skal garantere at der er plads på bussen, sætter cdc enheder til 12Mbit/s - meget optimistisk...

eller .... der er jo kun een fysisk Full Speed enhed og den kan jo aldrig forbruge mere end 12 MBit/s, men er nu sammenlagt blevet til 24 MBit/s.

 Og nu er det næste trin efter CPU jo en HUB. Sådan en sag kan højest klare 7 porte. Her er et dump af hvordan Linux ser 2 gange 5 lydkort på 2 hubs:

Her er en lsusb listing.

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 28, If 0, Class=Hub, Driver=hub/7p, 480M
        |__ Port 1: Dev 29, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 1: Dev 29, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 2: Dev 55, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 2: Dev 55, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 31, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 31, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 4: Dev 54, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 4: Dev 54, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 5: Dev 33, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 5: Dev 33, If 1, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 2: Dev 34, If 0, Class=Hub, Driver=hub/7p, 480M
        |__ Port 1: Dev 35, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 2: Dev 37, If 0, Class=Audio, Driver=snd-usb-audio, 12M
            |__ Port 2: Dev 37, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 36, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 36, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 5: Dev 38, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 5: Dev 38, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 6: Dev 39, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 6: Dev 39, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 7: Dev 40, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 7: Dev 40, If 1, Class=Audio, Driver=snd-usb-audio, 12M

Jeg havde en drøm om, at alle 10 lydkort kunne gå på en 10 ports hub - det går bare ikke - uden at designreglerne for USB overtrædes.
 Linux forkaster at der er mere end 5 "dobbelt" devices på en PC port. Og Linux udregnet så er 7 gange 12 Mbit =  84 MBit og i dette tilfælde har vi jo 120 Mbit på en HUB. Hvis man antager at Lyd ikke kommer over 7 Mbit/s og USBCDC ikke kommer over 1 Mbit/s så er det 8Mbit/s - så der burde være plads.
Måske skal man reducere til 3 lydkort per HUB idet der er stadig lidt problemer, med kanaler der falder af.

USB enhedrne får addresse  (port/dev)  lidt tilfældigt i den rækkefølge som enhederne registreres. Der er derfor lavet et script der læser "arecord -l" output og  bygger to kontrolfiles til websdr softwaren.
Websdr softwaren er leveret af PA3FWM som også driver websdr.org
Softwaren kan per server process understøtte op til 8 SDR modtagere - derfor er websdr.dk opdelt i 2 servere a hver 5 modtagere.

Men til andre, der er på vej ud i mange USB enheder på linux - der er faldgrubber.... og linux er ikke helt skarp på udregningen.