Hallo zusammen, nun habe ich viel Zeit damit verbracht, den USB-Kram "schnell" zu laden - Fazit: udev dauert zu lange (auch mit --disable-extras) gudev an glib2 dauert auch... Einen devfs-Patch fuer den 2.6.37 habe ich nicht gefunden! Da _kein_ Hotplug erfolgen wird, habe ich folgende Idee: -Liste erstellen mit allen verfuegbaren USB-Kernelmodulen (das sind hier nicht sehr viele!) Format der Liste: VendorID,ProductID,Kernelmodul -aus dmesg [1] die gefundenen USB-Devices auslesen und die Kernelmodule lt. ID's in der Liste laden Es geht hier nur um "usb-storage" und ein paar serielle Converter +evtl. GPS-Dev's! Der Rest wird ueber 4xRS232 abgewickelt! Bevor ich mich jetzt ransetze und die Erkennungsroutine zusammenstricke, wollte ich nachfragen, ob irgendwas grundsaetzlich dagegen spricht. [1] es gibt kein _klogd_ und _kein_ syslogd, also auch kein tail -F /v/l/m und das System rennt komplett ReadOnly. Schoenes Wochenende! MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am 12.02.11 18:56, schrieb Thomas Moritz:
Hallo zusammen,
nun habe ich viel Zeit damit verbracht, den USB-Kram "schnell" zu laden - Fazit: udev dauert zu lange (auch mit --disable-extras) gudev an glib2 dauert auch... Einen devfs-Patch fuer den 2.6.37 habe ich nicht gefunden!
Schonmal mdev der Busybox probiert?
Da _kein_ Hotplug erfolgen wird, habe ich folgende Idee:
-Liste erstellen mit allen verfuegbaren USB-Kernelmodulen (das sind hier nicht sehr viele!) Format der Liste: VendorID,ProductID,Kernelmodul
Was spricht dagegen, die paar Module einfach einzukompilieren? Für den Zugriff kannst du dann ja weiterhin devtempfs verwenden.
-aus dmesg [1] die gefundenen USB-Devices auslesen und die Kernelmodule lt. ID's in der Liste laden
Nimm lieber sysfs. Gruß, Bernhard
Am Samstag, 12. Februar 2011 19:17:02 schrieb Bernhard Walle: Hallo Bernhard, besten Dank fuer die schnelle Antwort!
Schonmal mdev der Busybox probiert?
Uuups, die habe ich doch vor ein paar Tagen erst neu gebaut! Ist mir da was durch die Lappen gegangen? Das muss ich mir morgen gleich anschauen!
Was spricht dagegen, die paar Module einfach einzukompilieren? Für den Zugriff kannst du dann ja weiterhin devtempfs verwenden.
Beim Booten hatten mich die Fehlermeldungen gestoert, wenn keine Devices dran waren.
-aus dmesg [1] die gefundenen USB-Devices auslesen und die Kernelmodule lt. ID's in der Liste laden
Nimm lieber sysfs.
sysfs rennt! Sonst gibt es ja kein /sys/bus/usb /sys/bus/pci usw. Wie wuerdest Du daraus auf die zu ladenden Kernelmodule schliessen? Hierzu fehlt mir gerade ein Stueck Film. MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hi Moritz, Am 12.02.11 19:32, schrieb Thomas Moritz:
Am Samstag, 12. Februar 2011 19:17:02 schrieb Bernhard Walle:
Schonmal mdev der Busybox probiert?
Uuups, die habe ich doch vor ein paar Tagen erst neu gebaut! Ist mir da was durch die Lappen gegangen? Das muss ich mir morgen gleich anschauen!
mdev ist ein mini-udev, kann insb. als hotplug-Handler (sysctl kernel.hotplug bzw. /proc/sys/kernel/hotplug) registriert werden.
sysfs rennt! Sonst gibt es ja kein /sys/bus/usb /sys/bus/pci usw. Wie wuerdest Du daraus auf die zu ladenden Kernelmodule schliessen? Hierzu fehlt mir gerade ein Stueck Film.
Im Prinzip indem Du in für jeden Inhalt von /sys/devices/*/modalias (also z.B. pci:v000080EEd0000CAFEsv00000000sd00000000bc08sc80i00) ein fnmatch(3) gegen jede Zeile in /lib/modules/$(uname -r)/modules.alias machst. Klingt komplizierter als es ist. Wenn Du die Strings anschaust wird Dir schnell klar wie das funktioniert. fnmatch(3) funktioniert wie die Expansion der Shell. Gruß, Bernhard
Am Samstag, 12. Februar 2011 20:04:34 schrieb Bernhard Walle:
Hi Moritz, Äh, Thomas natürlich ;)
Kein Problem! Seit meiner Kindheit habe ich 2 Rufnamen :-) MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Samstag, 12. Februar 2011 20:03:15 schrieb Bernhard Walle: Hallo Bernhard, Ueber mdev in der busybox bin ich irgendwie hinweggestolpert. Vermutlich weil menuconfig sich mehrmals verheddert hatte. ( nachvollziehbar in Cores und Network -> [nur Strg+C hilft])
mdev ist ein mini-udev, kann insb. als hotplug-Handler (sysctl kernel.hotplug bzw. /proc/sys/kernel/hotplug) registriert werden.
mdev -s echo mdev > /proc/sys/kernel/hotplug + /etc/mdev.conf ...aber s. unten.
sysfs rennt! Sonst gibt es ja kein /sys/bus/usb /sys/bus/pci usw. Wie wuerdest Du daraus auf die zu ladenden Kernelmodule schliessen? Hierzu fehlt mir gerade ein Stueck Film.
Im Prinzip indem Du in für jeden Inhalt von /sys/devices/*/modalias (also z.B. pci:v000080EEd0000CAFEsv00000000sd00000000bc08sc80i00) ein fnmatch(3) gegen jede Zeile in /lib/modules/$(uname -r)/modules.alias machst. Klingt komplizierter als es ist. Wenn Du die Strings anschaust wird Dir schnell klar wie das funktioniert.
Habe ich mir angeschaut. Dein obiges Beispiel sieht schlimmer aus, als viele USB-Kennungen ("usb:0:8:15" -> "usb:0:8:15 mct_r232")
fnmatch(3) funktioniert wie die Expansion der Shell.
Das ist wieder Salz in die offene Wunde :-( Da es auf der Kiste kein perl und python gibt, bleibt also nur C. Mit C konnte ich mich, im Gegensatz zu Pascal, noch nie anfreunden, bleibt also die Shell. Ich habe mich heute den ganzen Tag mit der Thematik beschaeftigt und kam zu dem Ergebnis: Wenn ich alle Eventualitaeten per Shell beachten will, kann ich gegenueber udev/sysfs keine/kaum Zeit einsparen. Ich werde den Kernel auf ein absolutes Minimum ausmisten und sehen, ob ich dadurch 1,5sek. einsparen kann. (dann bin ich ab grub unter 10s) Momentan sind noch Treiber fuer 2 verschiedene Systeme drin. (VM und PC104) ...und wenn ich unter den 10s bin, geht es wieder an die GPIOs :-( Das ist der letzte Haertetest bzgl. des PC104 und wird noch eine Menge Nerven kosten. Die ersten Versuche hatte ich abgebrochen, da ich die PIN's des PCA9554 hinter dem cs553[56] nicht erreichen konnte. ein "force_addr=0x6100" in der cmdline koennte evtl. helfen... Dazu melde ich mich sicher nochmal! MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am 13.02.11 20:18, schrieb Thomas Moritz:
Am Samstag, 12. Februar 2011 20:03:15 schrieb Bernhard Walle:
mdev -s echo mdev > /proc/sys/kernel/hotplug
Sicher dass das geht? Nimm besser den absoluten Pfad (/bin/mdev o.ä.).
+ /etc/mdev.conf ...aber s. unten.
In util-linux/mdev.c (der Busybox):
* $envvar=val format is useful for loading modules for hot-plugged devices * which do not have driver loaded yet. In this case /sys/class/.../dev * does not exist, but $MODALIAS is set to needed module's name * (actually, an alias to it) by kernel. This rule instructs mdev * to load the module and exit: * $MODALIAS=.* 0:0 660 @modprobe "$MODALIAS" * The kernel will generate another hotplug event when /sys/class/.../dev * file appears.
Damit müsste es gehen. Gruß, Bernhard
Hallo Thomas, Am Sun, 13 Feb 2011, Thomas Moritz schrieb:
Am Samstag, 12. Februar 2011 20:03:15 schrieb Bernhard Walle: Habe ich mir angeschaut. Dein obiges Beispiel sieht schlimmer aus, als viele USB-Kennungen ("usb:0:8:15" -> "usb:0:8:15 mct_r232")
fnmatch(3) funktioniert wie die Expansion der Shell.
Das ist wieder Salz in die offene Wunde :-( Da es auf der Kiste kein perl und python gibt, bleibt also nur C. Mit C konnte ich mich, im Gegensatz zu Pascal, noch nie anfreunden, bleibt also die Shell.
Welche $SHELL? busybox? Wenn bash (oder auch pdksh/zsh) kann man auch damit einiges an Stringverarbeitung "ratzfatz" mit erledigen ... Bsp: s="usb:0:8:15 mct_r232" usbpath="${s% *}" usbdev="${usbpath#usb:}" usbdrv="${s##* }" echo "usb: »$usbdev« -> »$usbdrv«" Ah: das obige funktioniert hier (oS 11.2/x86_64) auch in einer 'busybox sh': BusyBox v1.12.3 (2009-10-24 03:04:48 UTC) built-in shell (ash) Die busybox-ash ist wohl Posix-kompatibler als gedacht :)) $ busybox sh -c 's="usb:0:8:15 mct_r232"
usbpath="${s% *}" usbdev="${usbpath#usb:}" usbdrv="${s##* }" echo "usb: »$usbdev« -> »$usbdrv«" ' usb: »0:8:15« -> »mct_r232«
Ah, und bei aktuellen Kernels (>= 2.36.x?) gibt's ein 'make localyesconfig' bzw. 'make localmodconfig', was dir passend zu den aktuell geladenen Modulen einen Kernel erstellt ... Ich seh eh gern mal über deine Scripterl nochmal drüber, wobei ein Image der Umgebung (.iso) für VMware ideal wäre, ansonsten mußt du mir halt ggfs. noch mehr Details[1] mailen, damit ich das hier möglichst nachvollziehen kann. Ah, ggfs. kannst du auch noch deine busybox anpassen (d.h. abspecken). Ob sich das lohnt kann ich aber nicht beurteilen. Äh, und für wirklich einfache Sachen können wir dir zur Not auch was in C basteln, so in etwa Grundgerüst von mir, und Philipp und Bernhard (z.B.) gucken dann mal drüber bzgl. off-by-one und sonstigem Bug-Krams. HTH, -dnh PS: Linux ganz ohne Perl ist nur noch mühsam möglich ... Es gibt z.B. bei oS einfach sehr viel Zeugs das davon abhängt ... Muß ja nicht grad beim booten sein. PPS: und falls dann doch Perl während des Boots gebraucht würde könnte man es ganz pervers machen und z.B. "perlsh" als shell verwenden :P Egal: ich liebe es einfach, daß ich ggfs. _alles_ anpassen kann. Und manches auch schon angepasst habe ;) PPPS: schon ne schlanke libc gewählt? Wenn du ggfs. Hilfe bei ner dynamischen dietlibc brauchst ... [1] darf bei PM auch "sensibel" sein, ich hab hier in meinem ~/helping so einiges, das ich mal ausmisten sollte. -- Minds are like books, they only function when open. -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Montag, 14. Februar 2011 10:24:19 schrieb David Haller: Hallo David,
Welche $SHELL? busybox? Wenn bash (oder auch pdksh/zsh) kann man auch damit einiges an Stringverarbeitung "ratzfatz" mit erledigen
busybox 1.18.2
$ busybox sh -c 's="usb:0:8:15 mct_r232"
usbpath="${s% *}" usbdev="${usbpath#usb:}" usbdrv="${s##* }" echo "usb: »$usbdev« -> »$usbdrv«" '
usb: »0:8:15« -> »mct_r232«
Cool! Vielen Dank!
Ah, und bei aktuellen Kernels (>= 2.36.x?) gibt's ein 'make localyesconfig' bzw. 'make localmodconfig', was dir passend zu den aktuell geladenen Modulen einen Kernel erstellt ...
Uuups, das ist mir neu! Das lass ich nachher gleich mal auf dem PC104 laufen. Bin schon gespannt, was alles rausfliegt.
Ich seh eh gern mal über deine Scripterl nochmal drüber, wobei ein Image der Umgebung (.iso) für VMware ideal wäre, ansonsten mußt du mir halt ggfs. noch mehr Details[1] mailen, damit ich das hier möglichst nachvollziehen kann.
Einfacher waere ein tgz vom rsync. Problematisch wird es jedoch mit dem aktuellen System. Das ist schon auf den GeodeLX beschraenkt. OK, dann muss ich Intel/Amd generic mit reinstricken.
Ah, ggfs. kannst du auch noch deine busybox anpassen (d.h. abspecken). Ob sich das lohnt kann ich aber nicht beurteilen.
Meine busybox habe ich schon zurechtgefeilt :-) Dummerweise war mir dabei mdev durch die Lappen gegangen. Ist inzwischen aber drin!
Äh, und für wirklich einfache Sachen können wir dir zur Not auch was in C basteln, so in etwa Grundgerüst von mir, und Philipp und Bernhard (z.B.) gucken dann mal drüber bzgl. off-by-one und sonstigem Bug-Krams.
Es ist doch angenehm zu lesen, dass man hier auch OT-Hilfe bekommt. Mein Bekanntenkreis interessiert sich weder fuer Linux und erst recht nicht fuer die Internas!
PS: Linux ganz ohne Perl ist nur noch mühsam möglich ... Es gibt z.B. bei oS einfach sehr viel Zeugs das davon abhängt ... Muß ja nicht grad beim booten sein.
Die Kiste muss lediglich schnell hochkommen und die _glibc_ mitbringen. Telnet rennt sofort und dropbear muss ich noch bauen. Das sind die beiden einzigen Dienste zum Service. Perl usw. ist nicht notwendig, da an dem fertigen System nie wieder was geaendert wird! Die Parameter fuer das Netzwerk, auch den Port fuer telnet, habe ich aus diesem Grund in die cmdline ausgelagert. Funzt prima!
PPS: und falls dann doch Perl während des Boots gebraucht würde könnte man es ganz pervers machen und z.B. "perlsh" als shell verwenden :P Egal: ich liebe es einfach, daß ich ggfs. _alles_ anpassen kann. Und manches auch schon angepasst habe ;)
Jaja, ich will es doch nicht uebertreiben :-)
PPPS: schon ne schlanke libc gewählt? Wenn du ggfs. Hilfe bei ner dynamischen dietlibc brauchst ...
Siehe ehemalige Mail: http://buildroot.uclibc.org/downloads/buildroot.html#faq Die glibc ist gefordert, da die Entwickler der Software ziemlich nah dran bauen! Wenn ich auf uclibc usw. abspecke kann ich mir nur Aerger einhandeln. Das erspare ich mir lieber von vorn herein! Nochmals Danke! Jetzt geht es an localyesconfig :-) MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Montag, 14. Februar 2011 10:24:19 schrieb David Haller: Hallo David,
Ah, und bei aktuellen Kernels (>= 2.36.x?) gibt's ein 'make localyesconfig' bzw. 'make localmodconfig', was dir passend zu den aktuell geladenen Modulen einen Kernel erstellt ...
Super! Jetzt kommt die Kiste von CF-Card in 7,8s in rcS! Nachbessern musste ich lediglich ata_generic. Den muss ich als Modul bauen, sonst findet die initrd das System nicht: "...modules.dep No such file or directory" Sonst habe ich noch 7 Module drin, die ich imho zum Testen der GPIO's brauche. Das wird jedoch der letze schwere Weg. MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
participants (3)
-
Bernhard Walle
-
David Haller
-
Thomas Moritz