[linux] Hoe een usb port te resetten, "claim"

Geert Stappers stappers op stappers.nl
Wo Sep 25 08:48:31 CEST 2019


On Mon, Sep 23, 2019 at 08:34:49AM +0200, Paul Slootman wrote:
> On Sun 22 Sep 2019, Geert Stappers wrote:
> > On Tue, 20 Aug 2019, 10:50 Paul Slootman, wrote:
> > >
> > > Het zal wel een hardware probleem zijn.
> > 
> > Ik vind niet dat we het uitschakelen (of loskoppelen)
> > en weer inschakelen (of aankoppelen) van een Arduino
> > een hardware probleem moeten noemen.
> 
> Ik heb op mijn pc ook een paar USB ports die soms "vastlopen", niks wat
> je er op aansluit wordt dan nog herkend (geen meldingen in dmesg).
> Dat noem ik een hardware probleem, en dit leek er veel op.
> 
> 
> > > > Ik zou het ding dan via een USB hub aansluiten. Dan hoef je
> > > > waarschijnlijk alleen de USB hub er even uit te halen en weer terug.
> > 
> > Onwaarschijnlijk. Mijn inschatting is het volgende
> > * Arduino aangesloten
> > * Arduino IDE doet bij opstart een scan naar serial ports
> > * Er wordt er eentje gevonden, zeg /dev/ttyUSB2
> > * Programma start verder op
> > * Men gaat aan het werk
> > * Iets claimt  /dev/ttyUSB2
> > * Arduino wordt losgekoppelt
> > * Dat wat /dev/ttyUSB2 claimt
> >   komt NIET op het idee om de claim los te laten.
> > * Arduino wordt aangekoppelt
> > * Omdat /dev/ttyUSB2 nog "locked" is,
> >   zal er een andere USB serial port dan /dev/ttyUSB2 komen
> > * Arduino IDE heeft geen reden om een nieuwe scan
> >   naar serial ports te doen
> > * Men is aan de rand van waar deze thread begon
> > 
> 
> Als iets /dev/ttyUSB2 claimt: als je die device verwijdert dan bestaat
> die device node ook niet meer. Dan valt er ook weinig te "claimen" (wat
> dat ook zou mogen betekenen).

Het is "device node" versus "file descriptor".
"hotplug code" zorgt dat de device node er is en ruimt die device node
ook weer op. Op een moment wordt die device node gebruikt in een file
descriptor. Dat is wat ik "claimen" noem. Betere beschrijving welkom.
Het stuk software wat de file descriptor open heeft zal niet bij
elke I/O actie controleren of de onderliggende device node er nog is.
Dat is waar "lock" resulteert in "lock up".


Groeten
Geert Stappers
-- 
Leven en laten leven


Meer informatie over de Linux maillijst