Linux App. zu Mac portieren.

relaht

Aktives Mitglied
Thread Starter
Dabei seit
02.11.2003
Beiträge
319
Reaktionspunkte
10
Hallo, ich würde so gerne dieses Linux Programm auf meinem Mac zum laufen kriegen. Es ist eigentlich ganz simple, denn es hat nur 2 Funktionen:
- Serielle Übertragung eines files von und zur Dreambox(Flash-Speicher).

http://developer.elitedvb.net/files/75/dreamupl.tar.bz2

Eine Dreambox ist ein Sat. Receiver.
Wie so oft, wurde dieses Programm nur für Wimdows kompiliert. Und die Mac User haben leider das Nachsehen.

Ich bin mit dem Entwickler in Kontakt und der sagte mir, dass die Portierung auf Mac eigentlich kein Problem sein sollte.
Der einzige Plattformspezifische Programmteil ist die Behandlung der seriellen Schnittstelle. (Leider kennt er sich mit Mac überhaupt nicht aus, würde aber generell auch helfen)

Das Programm wird mit zwei Scripts gesteuert:

- flash
- flash_backup
(Beide Scripts sind im Download enthalten)

Ich würde mit REALBasic eine Bunutzeroberfläche schreiben, habe aber leider überhaupt keine Ahnung von C

Hat jemand Lust in dieses "Jugend forscht" Projekt mit einzusteigen?
 
Es ist eigentlich ganz einfach: du musst im Code die Stelle suchen, die den Namen der Gerätedatei der seriellen Schnittstelle festlegt. Die Stelle musst du so umwandeln, dass es der Gerätedatei unter OS X entspricht. Weiss leider nicht welche, hab z.Zt. noch OS 9 ;) Danach solltest du es im Idealfall ohne weitere Änderungen durchkompilieren können.

Aber sagmal, wo wie wird die Dreambox angeschlossen, hat dein Mac eine passende Schnittstelle? *g*

Nachtrag:
main.c:98, da steht's :)
Scheint aber ein kompliziertes Programm zu sein. Und es kann scheinbar auch über's Netzwerk flashen? Schließt du die Kiste so an?
 
Zuletzt bearbeitet:
Erstmal vielen Dank für deine Antwort!

Saski schrieb:
Es ist eigentlich ganz einfach: du musst im Code die Stelle suchen, die den Namen der Gerätedatei der seriellen Schnittstelle festlegt. Die Stelle musst du so umwandeln, dass es der Gerätedatei unter OS X entspricht. Weiss leider nicht welche, hab z.Zt. noch OS 9 ;)
Wie gesagt, ich habe leider Null-Ahnung von C (Ich weiss noch nicht mal ob dieses Programm in C oder C++ geschrieben ist :( )

Saski schrieb:
Danach solltest du es im Idealfall ohne weitere Änderungen durchkompilieren können.
Da ist schon das nächste Problem. Womit kann ich kompilieren? Gibt es da etwas im Freeware Bereich?

Saski schrieb:
Aber sagmal, wo wie wird die Dreambox angeschlossen, hat dein Mac eine passende Schnittstelle? *g*
Ich werwende hierfür einen USB=>Seriell Adabter (Keyspan)

Saski schrieb:
Nachtrag:
main.c:98, da steht's :)
Scheint aber ein kompliziertes Programm zu sein. Und es kann scheinbar auch über's Netzwerk flashen? Schließt du die Kiste so an?
Ja das stimmt. Man kann seriell und auch übers Netzwerk flashen.
Aber wenn beim "Netzwerk flashen" etwas schief läuft, ist man darauf angewiesen es seriell zu tun, da die Dreambox dann nicht mehr auf das Netzwerk reagiert.

Wie müsste ich, deiner Meinung nach, die Zeile 98 ändern damit der Mac sie versteht? "Wir" können das ruhig erstmal in OS9 machen. Ich denke der Schritt zu OSX ist dann auch zu schaffen. (Oder es läuft halt im Classic-Mode)
 
glaube dass es in osX leichter geht - im prinzip gleicher compiler usw. ! werde mir die datei mal anschauen bin aber eigentlich mit solchen dingen nicht vertraut...
 
hab es mal compiliert..normal müsste das device in etwa gleich bleiben...problem ist jedoch, dass #include <linux/types.h> auf mac logischerweise nicht geht...
 
Normalerweise kompiliert man Linux Programme mit make! Eigentlich brauchst du nur gcc und make... beides ist open source.. und du kannst dir die Sachen per FINK ziehen und installieren.
 
dreambox

Hallo,

also ich habe selbst eine Dreambox, eine 5600-S - das Aufspielen eines flash-images war nur ein einziges Mal nötig, dazu tat es ein altes Windoze-Notebook mit Nullmodemkabel.
Alle weiteren Updates holt sich die Dreambox über das Netz (eingebaute Netzwerkkarte, geht über den Router einwandfrei). Zugriff über Browser (Port 80) oder ftp sind auch vom Mac aus möglich, sogar Streaming funktioniert mit Shell-Skripten.
Ich weiß nicht, ob der ganze Bohei mit Programmieren und Kompilieren dafür steht...
www.i-have-a-dreambox.com kennst du sicher, oder?


Grüße,

animalchin
 
Hallo,

das ist C.

Weitere Infos zum Ansprechen einer seriellen Schnittstelle in OSX gibts unter
http://developer.apple.com/document...tml#//apple_ref/doc/uid/TP30000423-TP30001045

das scheint allerdings nicht so trivial zu sein, da man das I/O Kit verwenden soll (Obj-C). Ich weiß allerdings nicht ob das einfach so über einen USB Adapter laufen wird. Kann sein das ein Treiber des Adapters ein serielles Device einhängt und darüber dann kommuniziert wird. Das würde ich als erstes mal abklären. Auf der Seite oben gibts auch eine alternative USB Kernel Extension die mehr Informationen über angeschlossene Geräte ausspuckt.

Da ich weder einen USB->Serial Adapter noch eine Dreambox hab, kann ich dir auch nicht helfen.

Du kannst ja mal deine Fortschritte posten.
Viel Glück !
 
Zuletzt bearbeitet:
relaht schrieb:
...
Wie müsste ich, deiner Meinung nach, die Zeile 98 ändern damit der Mac sie versteht? ...
Naja, da steht doch "/dev/ttyS01". Der Mac versteht das schon, findet aber die Datei nicht. Darum musst Du das durch den Namen der Gerätedatei ersetzen, die deiner seriellen Schnittstelle entspricht. Keine Ahnung wie die heisst, das müsstest Du besser wissen ;) Steht aber bestimmt irgendwie in der Doku des Treiber oder so?
Und OS 9 wird garnicht gehen, weil's kein UNIX ist :p

Dass da Linux-native Dateien eingebunden werden, hab ich übersehen. Ist aber nicht schlimm, unter OS X liegen die Dateien dann eben woanders. Musst du mit dem Finder suchen. Wird ja das Verzeichnis /include oder /usr/include geben, da müssen die Dateien drinstecken. Dann gibst du den Pfad relativ zu diesem Verzeichnis an. Unter Linux gibt's z.B. die Datei /usr/include/linux/types.h - und ist in den Dateien mit #include <linux/types.h> eingebunden. Dementsprechend musst du das abändern.

Keine Angst, das setzt keinerlei Programmierkenntnisse voraus :p
 
Erstmal vielen Dank für die rege Beteiligung!
Damit habe ich wirklich nicht gerechnet.
Je mehr Antworten ich lese, desto mehr wird mir aber auch klar, wie wenig ich von der Sache verstehe :(
Ich bekomme aber auch immer mehr Lust mich darin einzuarbeiten und dieses Projekt als Einstieg in C zu betrachten.
Könnte aber auch verstehen wenn ihr sagt: "Geh doch nach Hause und mach erstmal deine Hausaufgaben"

Ich habe mal mit REALbasic (nicht lachen, ich kann bisher ja nichts anderses) die Seriellen Schnittstellen ausgelesen. Beim Keyspan steht:
Name: "USA28X3b1P1.1" und "USA28X3b1P1.2"
I/O device: "/dev/cu.USA28X3b1P1.1" und "/dev/cu.USA28X3b1P1.2"

(Es sind 2 Schnittstellen, da es ein Twin Adapter ist)

Ich würde die Benutzeroberfläche gerne mit REALbasic machen, und hiermit auch die serielle Schnittstelle dem C Programm übergeben.
Das Auslesen des jeweils angeschlossenen Adapters ist mit RB ganz einfach und das fertige Programm sollte mit allen Adaptern funktionieren und nicht nur für mit dem Keyspan.


@animalchin
Im Normalfall hast du recht und man braucht die serielle Übertragung nicht. Aber wenn beim "Netzwerk flashen" irgend etwas schief läuft (und genau das ist bei mir schon passiert) ist man darauf angewiesen.

@Alfisto
Danke für den Tip! Ich habe FINK auf meinem Mac installiert und muss jetzt nur noch rauskriegen wie ich an "gcc" und "make" komme.

@matzetronic
Danke für den link ich hab mal in das Dokument rein geschaut aber um es zu verstehen muss ich erstmal viel kleiner anfangen.

/usr/include/sys/
ist auf meinem System nicht vorhanden (Ich habe es mit: Finder/"gehe zum Ordner:/usr" versucht)


@Saski
Wie eben schon gesagt, kann ich die Datei nicht finden. Hast du einen Tip wie ich danach suchen kann? (Man, komme ich mir blöd vor)

@kanthos
Ich hoffe doch sehr, dass man nicht für jeden möglichen USB=>seriel Adapter einen eigenen code schreiben muss. Dann währe ja ein universal Einsatz undenkbar.

In meiner (Traum)Vorstellung dachte ich, dass der User die serielle Schnittstelle auswählt, diese dem C Programm übergeben wird und dann einfach das jeweilige Script gestartet wird.

Hier mal die Aussage von Felix Domke (dem Autor von DreamUpl
Felix Domke schrieb:
Wie gesagt, dreamupl als command-line tool sollte recht einfach nach
macos zu portieren sein (wahrscheinlich müsste man nur den seriellen
zugriff anpassen - ich hab keine Ahnung von MacOS, sorry). die
oberfläche kannst du dann ja in realbasic machen, und entsprechende
ausgaben in dreamupl reinhacken (da kann ich auch gerne behilflich sein,
wenns nicht zuviel wird), die deine oberfläche auswertet.

z.b. wäre denkbar dass das tool zeilenweise sachen wie:

UPLOAD start
UPLOAD 1%
UPLOAD 2%
...
UPLOAD done
FLASH start
FLASH 1%
FLASH 2%
..
FLASH done

ausgibt und dein tool daraus eine grafische prozentanzeige generiert.
 
relaht schrieb:
@kanthos
Ich hoffe doch sehr, dass man nicht für jeden möglichen USB=>seriel Adapter einen eigenen code schreiben muss. Dann währe ja ein universal Einsatz undenkbar.

Nun, für den Adapter musst Du ja deren Treiber installieren und wird mittels dem IOKit angesteuert. Also ist es leider so, daß Du wohl für verschiedene eine Routine schreiben müsstest.
Etwas anderes wäre es, wenn der Mac direkt eine Serielle Schnittstelle hätte, aber so musst Du die Dreambox ja gezielt über diesen Adapter ansteuern und mir ist leider keine Allround Lösung bekannt. Ich lasse mich da aber gerne verbessern.

Was den Autor des Programmes betrifft sagt er ja leider selbst, daß er keine Ahnung von Mac OS X hat.
 
Relaht: Ne, der Vorteil von Unix ist ja, dass für Programme alle Geräte eines Typs - entweder Schnittstelle oder Massenspeicher - gleich aussehen ;) Und da der Treiber deines seriellen Adapters auch Gerätedateien erzeugt hat (wie du ja schon selbst herausgefunden hast), musst du die nur noch dem Flasher übergeben.

Ich hab da mal einen winzigen Patch für die main.c gebastelt, ohne Funktionsgarantie. Nach IP-Adresse usw. muss an dritter Stelle die serielle Schnittstelle angegeben werden. Wenn du nicht weisst, wie man das Programm patch benutzt, such einfach die bestehende Zeile in der main.c, die im Patch angegeben ist, und ersetze sie durch die Darunterstehende, und das Ganze drei mal ;)
 
Vielen Dank für den patch. Kannst du mir auch sagen, was er bewirkt?
Ich bin leider immer noch nicht in der Lage zu kompilieren. (Habe im Augenblick nicht so viel Zeit wie ich gern hätte!)

Kann man unter C mit den Angaben über die serielle Schnittstelle etwas anfangen?
Ich dachte mir, dass ich der "Config" Datei "/dev/cu.USA28X3b1P1.1" übergebe und dies dann mit dem C Programm auswerte (bzw. die Schnittstelle öffne)

Ausserdem muss dem C Programm ja auch noch der Ort von der zu "flashenden" Datei übergeben werden. Meine Überlegung war, auch dieses in der Config Datei zu machen.
 
Naja, wie bereits beschrieben, du übergibst nach dem IP-Kram einfach die Gerätedatei der seriellen Schnittstelle (hier: /dev/cu.USA28X3b1P1.1) als dritten Parameter ;)

Wo du die Parameter mit deinem RealBASIC-Programm nachher speicherst, bleibt dir überlassen.
 
Zuletzt bearbeitet:
Zurück
Oben Unten