We have been able to produce working examples of gstreamer-rs-device-monitor.rs and gstreamer-rs-launch.rs the other day. They are working flawlessly on a Mac OS X desktop machine, so Linux shouldn’t be a problem either ;] (on Intel).
Könntest Du mal in einer freien Minute ausprobieren, ob diese Programme [1] auf Deinem MIPS Linux laufen? Vermutlich wird es noch nicht out of the box funktionieren, aber manchmal hat man ja Glück ;].
Damit Ihr wisst, was Ihr Euch da auf die Maschinen spielt, gibt es unter [2] die Quelltexte.
"qemu-mips gstreamer-rs-launch fakesrc ! fakesink" läuft jetzt bei mir im Qemu für MIPS - sehr schön! Es erzeugt zwar keine Ausgabe, dafür war es aber auch noch nicht vorgesehen. Die Tatsache, dass es sich nicht zerlegt, ist schonmal keine schlechte - ich bleibe vorsichtig optimistisch ;].
"qemu-mips gstreamer-rs-device-monitor" stürzt zwar ab, allerdings gibt Qemu wahrscheinlich auch wirklich kein sinnvolles Audiodevice her… ;]. Ich bin darauf gespannt, ob es auf echter Hardware läuft.
# Enumerate devices
$ qemu-mips gstreamer-rs-device-monitor
thread 'main' panicked at 'assertion failed: result.is_ok()', src/gstreamer-rs-device-monitor.rs:43:5
# Launch pipeline
$ qemu-mips gstreamer-rs-launch fakesrc ! fakesink
<LÄUFT>
# Nothing to see, move along
$ qemu-mips saraswati
Hello world
Ausblick
Die Adressierung ungültiger Geräte wie audiotestsrc oder audiotestsink führt auch hier zur Panikattacke (obviously):
$ qemu-mips gstreamer-rs-launch audiotestsrc ! autoaudiosink
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error(Boxed { inner: ForeignOwned(0x760524d0) })', libcore/result.rs:945:5
Das Ziel wäre, diesen Zustand ordentlich abzufangen, um im Fehlerfall genauso eloquent wie das Original antworten zu können:
$ qemu-mips /usr/bin/gst-launch-1.0 audiotestsrc ! autoaudiosink
WARNING: erroneous pipeline: no element "autoaudiosink"
Auch im Erfolgsfall wäre noch Luft nach oben:
$ qemu-mips /usr/bin/gst-launch-1.0 fakesrc ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
^C
handling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:05.111362507
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
Ja, so will er das bei mir auch machen: Mit der "ash" wird die Ausführung nicht klappen! ;] Ähnliche Probleme hatte ich auch bei der Entwickung des procd-scripts für BERadio: "procd" wollte das Python Programm ebenfalls ständig mit der "ash" ausführen, "busybox" spielt dabei anscheinend auch eine Rolle.
@weef kann die Anomalie bestätigen: Der MIPS24K des MediaTek MT7688 Chipsatzes läuft auf “little-endian”, also LSB. Ergo müssen wir für das “mipsel” Target kompilieren.
Leider hatte der Kernel darüber keine Auskunft gegeben, hier stand ganz klar "mips" ;]:
root@he_7688:~# uname -a
Linux he_7688 3.18.23 #5 Tue Sep 27 11:48:57 CEST 2016 mips GNU/Linux
ich sehe schon wieder den Bezug zu /lib/ld.so.1 , steht die dort denn bei Dir auch bzw. gibt es einen link, der auf ne gültige (z.B. /lib/ld-uClibc.so.0 bei Rich) hinweist?
Und dann probier dochmal, wie angesprochen, das Teil testweise statisch zu linken, um herauszufinden, ob es überhaupt rennt. Könntest ja aus Platzgründen die dietlibc nehmen! 8)
Ergo ist cross hier ein Holzweg und wir sollten uns an die Empfehlung halten, den Job “ganz normal” mit dem OpenWrt SDK zu erledigen. Da müssen wir dann “nur noch” die Rust Toolchain anflanschen, https://github.com/japaric/rust-cross gibt ein wenig mehr darüber Auskunft (Achtung “deprecated” und leicht inkorrekte Informationen, aber vom gleichen Autor).
Leider nein, Unterstützung für die uClibc ist nirgendwo zu sehen, es ist also kein Wunder, dass die erzeugten Artefakte auf dem fraglichen Zielsystem nicht laufen ;].