Hallo zusammen,
da es um grundsätzlichen Umgang mit Linux, Kompilieren und KernelModule,
geht hoffe ich, das richtige Forum erwischt zu haben. Wenn nicht bitte
an den richtigen Ort verschieben.
Ok, worum geht es:
Ich würde gern eine FW mit USBIP für ein HLK-RM04 von Hi_Link bauen.
Ein Image mit den unterstützen Feeds bauen ist kein Problem.
Mit make menuconfig kann ich kmod-usbip, kmod-usbip_server und
kmod-usbip-client auswählen und make baut dann auch ohne Fehler.
Auf das Modul geflasht, sehe ich das die kmods geladen sind, aber es
gibt keine Binarys zum ausführen ( usbip und usbipd sollten da sein ).
Und da hört es bei mir auch schon auf, komme aus der embedded
HardwareEcke ;-)
Vielleicht hat ja wer schon mal was mit USBIP und OpenWRT gemacht und
kann mir einen kleinen Schubs geben!
Auch auf der Gegenseite hat es nicht geklappt:
Ubuntu 12.04 apt-get install usbip funzt, aber diesmal sind die Binarys
da und die Kernelmodule fehlen :-( Keine Ahnung was da nicht stimmt.
Danke im Vorraus
Hans
Schau mal unter Netzwerk nach.
Da sind die Userspace Programme.
Diese aktivieren auch automaisch die Kernelmodule
ProTip:
Wenn du dann Programm "less" kennst, da gibt es den Tastenbefehl "/",
damit kann man suchen.
Das gleiche geht auch bei
make menuconfig
Und 16MB RAM ist was wenig, also nur das nötigste nehmen.
Ulli
EDIT
Unter Ubuntu musst du du Userspace Programme selber bauen.
Hi und danke für Deine Antwort.
Da ist leider nichts von USBIP drin! Das Feed ist bei dem aktuellen
Trunk nur noch unter oldpackages zu finden. Aktivier ich die und wähle
USBIP aus, rennt make in unendlich viele Fehler :(
Hab versucht die mit V=s sichtbar gemachten fehlenden lib zu
installieren, aber ohne Erfolg.
Die / Suchfunktion kannst ich schon ;)
Hab meine Module schon auf 32 GB umgelötet, das ist kein Problem.
Und unter Ubuntu, sind die binäres da, da fehlen die Kernelmodule. Und
nach langer Googelsuche schein ich nicht der einzige zu sein dem es so
geht. USBIP ist wohl in linux aufgenommen worden, aber ...
Hans M. schrieb:> Hi und danke für Deine Antwort.> Da ist leider nichts von USBIP drin! Das Feed ist bei dem aktuellen> Trunk nur noch unter oldpackages zu finden. Aktivier ich die und wähle> USBIP aus, rennt make in unendlich viele Fehler :(> Hab versucht die mit V=s sichtbar gemachten fehlenden lib zu> installieren, aber ohne Erfolg.> Die / Suchfunktion kannst ich schon ;)> Hab meine Module schon auf 32 GB umgelötet, das ist kein Problem.
Bin gerade am compilen.
Im RootFS von Ramips sind die Userspace Programme drin
Hm... Und was hast du jetzt anders gemacht als ich?
Also außer, das de weißt was de tun musst ?!? ;)
Kann morgen ja nochma zusammen schreiben, was ich mach. Vielleicht fehlt
mir ja nur ein kleiner Zwischenschritt!
Guna
Ok nochmal Schritt für Schritt:
- svn co svn://svn.openwrt.org/openwrt/trunk
- cd trunk
- ./scripts/feeds update -a
- ./scripts/feeds install -a
- make menuconfig
Target System > RaLink RT288x/RT3xxx
Target Profile > HILINK HLK-RM04
Haken bei Build Image Builder, SDK und Toolchain
LuCI
mit "/" nach USBIP gesucht liefert nur die 3 kmods unter Kernel
modules > USB Support
alle 3 mit "*" ausgewählt
speichern und EXIT
- make kernel_menuconfig
Kernel hacking > jffs2 mem=32M für 32MB RAM
speichern und EXIT
-make -j3
und warten...
bin solange mal einkaufen und kochen :-)
Hans
Hans M. schrieb:> Ok nochmal Schritt für Schritt:>> - svn co svn://svn.openwrt.org/openwrt/trunk
Hier ist dein Fehler ...
SVN ist einiger Zeit "offline" bzw. wird nicht mehr upgedatet.
Bitte git benutzen.
Einfach
1
gitclonegit://git.openwrt.org/openwrt.git
2
cdopenwrt
3
cpfeeds.conf.defaultfeeds.conf
4
./scripts/feedsinstall-a
5
./scripts/feedsupdate-a
Bitte vorher ggf. den Müll im alten OpenWRT Verzeichnis entfernen.
Wenn du in
make menuconfig
alles soweit einstellt hast, kannst du deine Config nochmal prüfen.
Das ist mein Output für den USB Part
Kann es sein, dass du das Package noch nicht installiert hast?
Möglicherweise hast du im "make menuconfig" die Option "M"
angewählt..dann musst du die jeweiligen Programme/Module noch per opkg
installieren.
Andere Idee: Es gibt auch auf den OpenWRT Servern
prebuild-Packages...solange du da keine Kernelmodule verwendest, kannst
du auch einfach die in die opkg.conf eintragen und runterladen. Dann
musst du nicht jeden Userspace kram extra kompilieren.
So, hab mal n bissl rumgespielt. Damit meine Config so aussah wie deine,
musst ich die oldpackages mit aktivieren.
Damit konnt ich dann auch erst unter Netzwerk USBIP finden und mit *
markieren. Dann schlägt aber make fehl.
Hab auch dein Beispiel mit GIT, so wie beschrieben, ausprobiert. Aber
ich weiß nicht warum bei dir USBIP zu finden ist und bei mir nicht?!
NIX :-(
trau mich schon gar nicht mehr zu posten.
Egal was ich versuche, USBIP taucht im menuconfig nur als kmod auf.
Weis nicht wo Deins her kommt?!
Hab eben mal bei https://github.com/openwrt geschaut, das finde ich es
auch nicht.
Hans M. schrieb:> NIX :-(> trau mich schon gar nicht mehr zu posten.>> Egal was ich versuche, USBIP taucht im menuconfig nur als kmod auf.> Weis nicht wo Deins her kommt?!> Hab eben mal bei https://github.com/openwrt geschaut, das finde ich es> auch nicht.
Hmmm -..
Bin gerade das nochmal an einem anderen Laptop am testen.
Die Inet-Verbindung ist etwas lam, ich werde das OpenWRT repo lokal
clonen.
Danke für Deine Mühe!
kann es vielleicht an etwas außerhalb von OWRT liegen?
bei mir läuft ein Debian 7 Image im VMware Player.
Mache grad mal n apt-get update/upgrade. vielleicht liegt es daran?!
Das hab ich schon gemacht, danach kernel_menuconfig wegen 32MB RAM und
dann schlägt make fehl.
wenn ich make kernel_menuconfig mache, wird noch n Haufen Kram
runtergeladen. Ist das normal so?
und das kommt bei raus:
make[3] -C package/libs/gettext host-compile
make[3] -C package/libs/libiconv host-compile
make[3] -C feeds/packages/libs/glib2 host-compile
make -r world: build failed. Please re-run make with V=s to see what's
going on
make: *** [world] Error 1
Hans M. schrieb:> Das hab ich schon gemacht, danach kernel_menuconfig wegen 32MB RAM und> dann schlägt make fehl.> wenn ich make kernel_menuconfig mache, wird noch n Haufen Kram> runtergeladen. Ist das normal so?
Mach erstmal einen normalen Build ohne irgendwelche Änderung am Kernel !
Mit dem RAM werde ich mich noch kümmern ..
EDIT:
Mein Build lief ohne Probleme durch
Das ist komisch, das hab ich eben gemacht und dann die Fehlermeldung
weiter oben.
Also nur git clone, feed update und install, im menuconfig target
ausgewählt und LuCI und USBIP ausgewählt.
Dann make und Error.
Also da es bei Dir erfolgreich baut und bei mir trotz vermeintlichem
gleichen Vorgehen nicht, gilt es herauszufinden woran es bei mir liegen
kann?!
Kann es an meinem Linux liegen? Wenn irgendwas fehlen würde, würde bei
make sicherlich was meckern oder?
was sagt denn ein
make V=s
nur die letzten Zeilen, wo der Fehler auftritt posten
ggf. vorher
make clean
rm -Rf build_dir/ staging_dir/ tmp/
make menuconfig
machen
Ok Build läuft, lass den Output gleich in ne Datei schreiben.
Muss mal schaun, irgendwo bin ich über einen Patch für USBIP gestolpert.
Da gings darum, das einige Funktionen aus der glib2 verwendet werden und
diese dadurch komplett eingebunden wird. Das soll das Image für embedded
Geräte nur unnötig aufblähen.
Hans M. schrieb:> Ok Build läuft, lass den Output gleich in ne Datei schreiben.> Muss mal schaun, irgendwo bin ich über einen Patch für USBIP gestolpert.> Da gings darum, das einige Funktionen aus der glib2 verwendet werden und> diese dadurch komplett eingebunden wird. Das soll das Image für embedded> Geräte nur unnötig aufblähen.
Das dürfte entweder alt oder falsch sein.
USBIP ist seit der Kernelversion 3.17 stable, und in
drivers/usb/usbip/
tools/usb/usbip/
in den Kernelsourcen zu finden. (vorher auch z.B. im Staging Zweig)
Und da achten die Maintainer schon das da kein unltiger bloat dabei
kommt.
Hier wurde erfolgreich das compilen von opkg (für den HOST, also deinen
PC) beendet.
Die komischen Nummern am Ende von okpg- ist ein SHA1 Hash -> git
> make[1]: ***> [/home/rene/openwrt/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/
stamp/.package_compile]
> Error 2> make[2]: Leaving directory `/home/rene/openwrt'> make[1]: Leaving directory `/home/rene/openwrt'> make: *** [world] Error 2
Hier passiert "irgendwie" ein Fehler...
Es sollte eigentlich das kommen.
make[3]: Entering directory
`/home/rene/GIT/MASTER/openwrt/package/system/ubox'
Das habe ich jetzt mal mit meinem Output verglichen.
Hmmm, sonst aber keine Fehlermeldung ...
Du sagst du benutzt eine VM ?
Hast du auch genug "Festplattenspeicher" zugesichert ?
Ich habe im build_dir ca. 6,2 GB an Speicher belegt.
Das komplette OpenWRT Verzeichnis verbraucht ca. 8,6GB bei mir.
Also mind. 10GB freier Platz wäre gut.
ca 17GB sind noch frei und der Dynamische Datenträger kann sich noch um
80 GB erweitern.
Bau jetzt nochmal nur mit Target und USBIP ausgewählt.
Und überleg mir, wie ich evtl anders meine "Nutzdaten" durchs Netz
tunnel.
ist eigentlich nur ein virtueller Com und ein Datenträger, beides
Endpunkte eines STM32 mit USB.
Datenträger dürfte über nbd Network Block Device gehen
Und Seriell über serialoverip.
Beides ist in OpenWRT drin.
Aber daran dürfte es nicht liegen ...
Macht mal bitte keinen "dynamischen" Datenträger
>> gemacht?
er hat (hoffetlich) eine neue VM aufgesetzt
Hans M. schrieb:> Setz die VM mal neu auf, wird aber n bissl dauern.
Das sind normalerweise Fehler die vom übertackten kommen.
Früher (tm) hatte man mal einen gcc Bootstrap build gemacht um den
Speicher/CPU zu testen
Hab die VM gelöscht und das Debian 7 VMware Image neu entpackt.
Dann gestartet und apt-get Update/Upgrade, GIT installiert und nicht
Root Benutzer angelegt.
Mit GIT das OWRT geklont, Feeds Update und install 2x, dann alle von
make prereq angemahnten packets installiert und make menuconfig.
Dort das Target ausgewählt und USBIP usbip-Client USBIP-Host mit *
markiert, gespeichert Exit und make -j3
Nichts übertatet oder so, Hostsystem Core i7, 8GiB RAM, VM auf SSD,
2Kerne und 2GiB für die Vm...
Hab langsam die Befürchtung, das meine SSD Stress macht, obwohl nich mal
n halbes Jahr alt und S.M.A.R.T. ihr 100% bescheinigt
http://wiki.openwrt.org/doc/howto/build
Make options
Building on multi-core CPU
:!: Build may FAIL
The build process can be accelerated by running multiple concurrent job
processes using the -j-option:
make -j 3
Use the standard formula <your number of CPU cores + 1>
If this produces random build errors try compiling again without the
-j-option
Meine original Quelle gibt es glaube ich nicht mehr, aber
http://unix.stackexchange.com/questions/51815/why-people-recommend-the-j3-option-for-make-when-having-a-dual-core-cpu
For example, the Gentoo handbook says:
A good choice is the number of CPUs (or CPU cores) in your system
plus one, but this guideline isn't always perfect.
But what is the rationale for "CPUs + 1" rule? Why the extra job?
The make.conf(5) man page even says:
Suggested settings are between CPUs+1 and 2*CPUs+1.
OK.
Gentoo ist eine Source Distro.
-> Heating your boxes since 1999
Jede Distro geht.
Ich baue nativ auf Gentoo (aka Sabayon)
Ich habe glaube ich schon mal mit einer Live Distro gebaut und dazu
einen USB Stick aus der Grabbelkiste genommen.
Dann nimm Sabayon.
Bei der weiss ich, das der Compiler usw. mit drauf ist.
Kurzanleitung :
CD/DVD booten.
Ein Terminal starten., du siehst ein Userprompt mit "$"
Root werden
$ sudo su
Jetzt siehst du ein "#"
USB Stcik einstecken, und Kernel Logmessages anzeigen lassen.
# dmesg
dann kommt do eine Zeile vor
[ 391.462945] sdc: sdc1
sdc: sdc1 können auch anders sich nennen.
ggf. testen. mit
# cat /proc/partitions
Alle Zahlen snd k-Byte angaben.
ggf. nochmal mit dem ausgestecken USB Stick vergleichen
Meine nutzbare Partition ist hier mal sdc1
erste Partition vom Stick formatieren (Filesystem einrichten)
# mke2fs /dev/sdc1
Mountpunkt erzeugen und mouten.
# mkdir /mnt/stick
# mount /dev/sdc1 /mnt/stick
Userverzeichnis erzeugen und Rechte anpassen.
# mkdir /mnt/stick/usr
# chown -R sabayonuser:sabayonuser /mnt/stick/user
Root wieder verlassen
# exit
Symlick zum Userverzeichnis machen
$ ln -s /mnt/stick/user
Ein
$ cd user
und du bist auf dem Stick
Danke Hans für die Anleitung, aber bin nativ MS ;) unterwegs
Grad läuft die Installation von UBUNTU... Comerica auf die ssd
Btw was ist das für ne gruselige grafische Oberfläche?!
Werde morgen nach Arbeit nochmal mit deiner Anleitung versuchen, dann
ist mein system wenigstens in einem dir bekannten Zustand :-D
Könnt hilfreich sein, glaub ich zumindest.
Und habe nie versucht mit Root zu baun, soweit stimmt wohl das OWRT
Tutorial...
So kurzes Update,
Letzte Nacht Ubuntu auf ne extra Platte installiert und alles nochmal
von vorn.
Ok make V=s -j16 war wohl n bissl übermütig, Ubuntu ist nach 20 min voll
verreckt, aber 2ter Versuch heut ohne -jx hat erfolgreich gebaut.
Schon mal gut soweit, also Windows, teraterm und tftp Server angewurfen
und Image über uboot aufgespielt.
Jetzt hab ich n Bad magic Nummer Fehler, aber das ist schon eine gute
Ausgangslage ;)
Danke für die Hilfe bis hierher.
Hans
Und wieder da ;)
Meine Befürchtung scheint sich zu bestätigen, hab nur LuCI und USBIP
zusätzlich zur Standardauswahl hinzugefügt und gebaut aber Uboot sagt
das das Image zu groß ist 3,9MB! Konnt beim make auch sehen, das GLIB2
mit kompiliert wird.
Bin schon auf der Suche nach dem Patch...
Was war denn jetzt hier die Lösung das nur die kmod-usbip zu finden
sind?
Bei mir ist unter Network nämlich auch kein USBIP zu finden :/
Das ganze läuft in einer frischen VM.
Hab die VM auch schon neu aufgesetzt (MINT) und anhand der hier bisher
vorgegebenen Methoden getestet. USBIP ist nicht auffindbar.