Hi Andreas,
On Fri, Nov 21, 2003 at 12:17:53 +0100, Andreas Kretschmer wrote:
Lies mal den Knoppix-Remaster-Vortrag von Chris. Der ging da auch auf dieses Problem ein.
Meine Loesung funktioniert nur mit initrd. Die Shell in der initrd muss sleep eingebaut haben. Wenn sleep fehlt, benutzt einen ugly hack (/proc muss gemountet sein):
delay(){ IFS="." read begin x < /proc/uptime ( IFS="." while read end x < /proc/uptime do [ "$begin" != "$end" ] && break done ) }
Danach _zweimal_ delay aufrufen:
delay ; delay
Erklaerung: In /proc/uptime steht die Uptime in Sekunden mit Nachkommastellen. Die Funktion delay liest den ganzzahlinen Teil in die Variable "begin". Danach wird in der while-Schleife so lange der aktuelle ganzzahlige Teil in "end" ausgelesen, bis er sich von "begin" unterscheidet. In diesem Fall hat ein Sekundensprung stattgefunden. Man kann das Pech haben, dass delay genau vor einem Sekundensprung aufgerufen wird und so die Verzoegerung zu klein fuer USB ist. Daher der zweite Aufruf direkt danach. So wartet man mindestens eine Sekunde.
bye, Chris p.s.: Ja, das ist ein busy-wait. p.p.s.: Ich weiss, dass das extrem krank ist. p.p.p.s.: Beim Booten ist das sch***egal ;)