PDA

View Full Version : Quale scegliere?


Primitive Dragon
10-05-2010, 16:28
Salve a tutti!
Premessa: Di programmazione conosco davvero le basi e non ho nessuna conoscenza approfondita di nessu linguaggio in particolare. Però ho un sacco di tempo libero!!

Ho in mente questo folle progetto: Voglio costruirmi un lettore dvd (DIVX) utilizzando un vecchio computer che è nella cantina.
Tutto questo lo voglio fare senza dover installare un sistema operativo di nessun tipo: QUESTO AGGEGGIO DOVRA' SOLO RILEVARE E LEGGERE I FILE VIDEO CHE SONO SUL DVD O (al massimo) SULLA PORTA USB (priorità secondaria).

La vecchia carcassa ha più o meno queste caratteristiche:

CPU: 1.5 GHz (singol core)
Ram: 120 Mb DDR2 (espandibili fino a 512)
Scheda video: Non ne ho idea ma è da almeno 32 Mb
Lettore dvd
Scheda madre che supporti tutto ciò.
Hard disk: Poco più di 20 Gb da 5400 rpm

Il quesiti salienti di tutto ciò sono:
1- La cosa vi sembra fattibile oltre che folle e inutile?
2- L'hardware è sufficiente?
3-Sapete indicarmi un linguaggio di progetto adatto a questo lavoro? (L'importante è che non ci vogliano decenni per impararlo e che possa lavorarci su windows).

Aspetto notizie.
Grazie in anticipo.

pabloski
10-05-2010, 16:47
In pratica vuoi usare un vecchio computer per crearti un lettore dvd/divx?

Beh buona fortuna visto che non vuoi appoggiarti a nessun sistema operativo esistente. In pratica quello che devi fare è crearti un sistema operativo da zero.

L'hardware va bene, ok magari una scheda grafica migliore sarebbe meglio ma li legge i dvd :D

La cosa è ovviamente fattibile ma richiede tempo.

Tieni presente che senza voler reinventare la ruota potresti

1) appoggiarti a qualche microkernel realtime molto leggero ( eCos, L4 )
2) sfruttare librerie e codec opensource per non dover riscrivere inutilmente cose che già esistono e funzionano bene....penso a ffmpeg ad esempio

Potresti ovviamente basarti sul kernel linux che è abbastanza completo oppure se proprio vuoi seguire la strada lunga e complicata puoi riscriverti una serie di service routine che pilotano l'hardware.

La cosa importante è capire secondo quali modalità vuoi far funzionare il lettore. Sarà multitasking/monotasking? Avrà supporto per media esterni o meno? In che modo gestirai gli interrupt? Utilizzerai la p-mode o meno?

Il linguaggio da scegliere in questi casi è il C, c'è poco da fare, no C no party :D

Potresti scegliere il C++ ma perchè appesantire il tutto? Oppure Objective-C imho è una scelta eccellente.

Potresti scrivere tutto in assembly ma non te lo consiglio :D

p.s. usare windows per sviluppare un sistema operativo ti porrà presto o tardi di fronte a problemi di varia natura, dalla difficoltà ad installare librerie fino alla mancanza di componenti essenziali per il toolchain....l'uso di linux è vivamente consigliato

Primitive Dragon
10-05-2010, 16:55
Grazie mille!

OK! Quindi mi devo lanciare nel magico mondo di C ! ! !
Va bene! Allora devo ricominciare a studiare sul serio.
Cavolate a parte: la cosa dei microkernel mi piace particolarmente.
Dove trovarli?
Ho la possibilità di lavorare in linux ma non ho la più pallida idea di dove trovare software adatti.
Se sapete qualcosa, potete inviarmi il link di qualche corso C ed associati programmi linux?

Grazie ancora

pabloski
10-05-2010, 17:19
Cavolate a parte: la cosa dei microkernel mi piace particolarmente.
Dove trovarli?


ne trovi parecchi online e sono tutti opensource

c'è l4 http://os.inf.tu-dresden.de/L4/
minix http://www.minix3.org/
kolibri http://www.kolibrios.org/
ecos http://ecos.sourceware.org/
freertos http://www.freertos.org/

mi è venuto in mente un kernel decisamente interessante che è newos http://newos.org/

questo kernel è alla base del noto clone di beos Haiku....ovviamente potresti pure pensare di adattare Haiku visto che è un sistema operativo noto per essere velocissimo proprio nei carichi multimediali

tanto per capire quant'è veloce guarda qui http://www.youtube.com/watch?v=W3dsDf_DkII


Ho la possibilità di lavorare in linux ma non ho la più pallida idea di dove trovare software adatti.
Se sapete qualcosa, potete inviarmi il link di qualche corso C ed associati programmi linux?

Grazie ancora

per il C non ti serve sapere chissà che va bene pure uno dei tutorial che si trovano in giro

piutttosto ti consiglio di bazzicare questo forum http://forum.osdev.org/index.php

riguardo i software bastano make e gcc sotto linux per creare un sistema operativo

li trovi installati su qualsiasi distribuzione linux

per l'assembler ( che ti servirà ) ti consiglio fasm

se proprio ti va di buttarti nel mondo del codice che si ottimizza a runtime e della compilazione jit puoi studiarti LLVM

fero86
10-05-2010, 19:13
1- La cosa vi sembra fattibile oltre che folle e inutile? fattibile lo é sicuramente; per quanto riguarda la follia dipende: a seconda delle scelte tecniche potrebbe non essere una cosa cosi impossibile. di sicuro non ti conviene realizzare i tuoi drivers per il lettore DVD, la scheda video (anche se é solo una VGA), la scheda audio, le periferiche di input e altro hardware vario ed eventuale, quindi sicuramente é consigliabile usare un kernel giá esistente. da quello che capisco la tua intenzione fondamentale é quella di ottenere un sistema alleggerito al massimo a cui sia richiesto esclusivamente di riprodurre i DVD, quindi Windows non va bene perché contiene troppe cose che tu non vuoi e che non possono essere rimosse. premesso che il risultato che cerchi puó essere ottenuto semplicemente con un po' di lavoro di configurazione e/o programmazione di un'edizione Home dell'ultima versione di Windows, ció che piu si avvicina alla tua idea é la creazione di una tua versione di Linux che sappia fare un mestiere solo. il problema é che naturalmente non potresti lavorarci da Windows.

MHO.

fero86
10-05-2010, 19:16
p.s. usare windows per sviluppare un sistema operativo ti porrà presto o tardi di fronte a problemi di varia natura, dalla difficoltà ad installare librerie fino alla mancanza di componenti essenziali per il toolchain....l'uso di linux è vivamente consigliato wtf? :mbe:
scusa, secondo te Windows con cosa lo sviluppano?

pabloski
10-05-2010, 20:23
wtf? :mbe:
scusa, secondo te Windows con cosa lo sviluppano?

sicuramente con una toolchain basata su visualc e che permette la compilazione di binari puri

hai mai sentito dire che col linker della microsoft si possono compilare binari puri? io no e tutti i sistemi operativi alternativi che ci sono in giro ( macosx compreso ) usano la toolchain gnu

ah dimenticavo di dire a Primitive Dragon che macos x è ovviamente altrettanto efficace per lo sviluppo di sistemi operativi

cdimauro
10-05-2010, 21:58
Per Windows ci sono sempre MingW e, soprattutto, Cygwin che mettono a disposizione quello che serve.

Per chi ha le versioni Business+ di Vista o 7 c'è anche il nuovo subsystem POSIX-compliant (SUA) che è decisamente comodo.

pabloski
10-05-2010, 22:12
Per Windows ci sono sempre MingW e, soprattutto, Cygwin che mettono a disposizione quello che serve.

Per chi ha le versioni Business+ di Vista o 7 c'è anche il nuovo subsystem POSIX-compliant (SUA) che è decisamente comodo.

mingw però se non sbaglio genera solo eseguibili PE

e cygwin è un bel casino da settare e installare a dovere

in passato sono riuscito ad ottenere buoni risultati con djgpp ma lo sviluppo non è sincronizzato con gcc

la scelta più adatta sarebbe ricorrere a tcc

fero86
10-05-2010, 23:34
sicuramente con una toolchain basata su visualc e che permette la compilazione di binari puri

hai mai sentito dire che col linker della microsoft si possono compilare binari puri? io no e tutti i sistemi operativi alternativi che ci sono in giro ( macosx compreso ) usano la toolchain gnu intendevo dire a livello di sistema operativo. trovo molto difficile che usino Linux o Mac OS X per generare eseguibili PE che devono obbligatoriamente usare features non implementate dal MinGW, come il SEH. per quanto riguarda gli strumenti di sviluppo non so se usino Visual C++ ma quasi sicuramente usano l'utility BUILD e una strumentazione del tutto simile a quella fornita col WDK; per il resto possono usare anche Notepad.

non capisco poi come mai ti focalizzi sul problema di generare binari puri: in Windows il bootloader sará, chessó, un milionesimo di tutto il sistema operativo? un miliardesimo? i problemi che la toolchain deve affrontare sono ben altri. molto probabilmente comunque usano MASM.

cdimauro
11-05-2010, 06:48
mingw però se non sbaglio genera solo eseguibili PE
E' possibile, anche se con mingw mi pare che l'obiettivo fosse la realizzazione del minimo indispensabile per poter usare la toolchain GNU.

Sarebbe strano che abbiano tolto il supporto alla crosscompilazione (e annessi), ma a questo punto devo verificare.
e cygwin è un bel casino da settare e installare a dovere
Sulla configurazione concordo. Sull'installazione e per disperazione puoi sempre selezionare tutti i pacchetti, e amen. :D Tanto gli hard disk oggi si misurano nell'ordine dei TB. ;)
in passato sono riuscito ad ottenere buoni risultati con djgpp ma lo sviluppo non è sincronizzato con gcc
Troppo vecchio come progetto. E scarsamente produttivo. Sarà una decina d'anni che non lo uso più.
la scelta più adatta sarebbe ricorrere a tcc
Questo onestamente non lo conosco.

DanieleC88
11-05-2010, 08:32
SEH.

Come disse Metal Carter! :D

Questo onestamente non lo conosco.

Non ti sei perso niente, non è un compilatore che aspira a competere con chicchessia, anche se è un progetto carino (lo sviluppatore (http://en.wikipedia.org/wiki/Fabrice_Bellard) è uno davvero forte :O): http://bellard.org/tcc/

mingw però se non sbaglio genera solo eseguibili PE

Da quel che mi risulta genera anche binari senza problemi. Tutt'al più, se non li genera direttamente come output della compilazione, li puoi esportare con objcopy.

cionci
11-05-2010, 08:49
E' una impresa titanica con tali premesse. Esistono già distribuzioni linux che fanno quello che cerchi: http://wiki.xbmc.org/?title=XBMC_Live
Il problema è che non so se sia sufficiente l'hardware.

banryu79
11-05-2010, 08:59
E' una impresa titanica con tali premesse.
Ci sono voluti 12 post, ma alla fine qualcuno glielo ha detto :fagiano:

pabloski
11-05-2010, 14:35
Ci sono voluti 12 post, ma alla fine qualcuno glielo ha detto :fagiano:

no dai che c'entra se ha tempo a disposizione e voglia per farlo perchè non dovrebbe sfruttare quest'occasione per acculturarsi?

cionci
11-05-2010, 14:38
no dai che c'entra se ha tempo a disposizione e voglia per farlo perchè non dovrebbe sfruttare quest'occasione per acculturarsi?
Forse perché con quelle premesse ci vogliono almeno 5-6 anni di lavoro a tempo pieno per realizzare una cosa del genere ?

pabloski
11-05-2010, 14:44
Forse perché con quelle premesse ci vogliono almeno 5-6 anni di lavoro a tempo pieno per realizzare una cosa del genere ?

se ho capito bene lui è più che altro interessato al fare da sè piuttosto che avere il lettore dvd pronto nel minor tempo possibile

cioè il lettore è una scusa per provare ad entrare nelle intercapedini del software di base

fero86
11-05-2010, 18:38
in che senso "software di base"?

pabloski
11-05-2010, 19:38
in che senso "software di base"?

sistemi operativi, firmware e similari

Mattyfog
11-05-2010, 22:11
no dai che c'entra se ha tempo a disposizione e voglia per farlo perchè non dovrebbe sfruttare quest'occasione per acculturarsi?

Perchè si crede di poter fare tutto, si pensa che basti studiacchiare un po' e poi si rimane delusi. Non sto facendo una colpa a nessuno, è normale, non si nasce imparati. Però potendo vorrei suggerire che l'impresa è abbastanza lunga e difficile. Ci sono passato anche io poco fa nel credere di poter far tutto. E ora mi limito parecchio a cercar di capire quello che scrivo o leggo su guide. St'estate per fortuna finalmente potrò studiare seriamente.

gugoXX
11-05-2010, 22:18
no dai che c'entra se ha tempo a disposizione e voglia per farlo perchè non dovrebbe sfruttare quest'occasione per acculturarsi?

E gli proponete di scrivere un decoder mp2 e un demacrovision, in C, per Linux (che divertente per il sonoro poi), e soprattutto conosce appena le basi della programmazione e il C non l'ha mai visto?
Mah. :mbe:

Mattyfog
11-05-2010, 22:23
Ma si può anche fare il punto è che bisogna partire con molta molta voglia ed essere molto motivati e capire l'impegno che ci vuole dietro a un progetto simile.

cionci
12-05-2010, 07:19
E gli proponete di scrivere un decoder mp2 e un demacrovision, in C, per Linux (che divertente per il sonoro poi), e soprattutto conosce appena le basi della programmazione e il C non l'ha mai visto?
Mah. :mbe:
Veramente non è per Linux, vuole anche scrivere il sistema operativo ;)

gugoXX
12-05-2010, 08:09
Veramente non è per Linux, vuole anche scrivere il sistema operativo ;)

Aaah. Beh, allora... :asd:

No, vabbe', forse quella parte si potrebbe saltare, se si deve solo leggere da DVD
Per leggere da CD mi ricordo che c'era una BIOS call dell'INT13h.
Magari funziona anche per DVD.

Un bel programmone monolitico. Ma per debuggare...

fero86
12-05-2010, 12:26
Per leggere da CD mi ricordo che c'era una BIOS call dell'INT13h. l'INT 13h del BIOS é il Disk Driver. funziona con dischi fissi e unitá floppy ma c'ho il dubbio sui lettori CD e DVD; in effetti dovrebbe funzionare visto che anche le unitá CD e DVD possono essere configurate nella boot sequence e che il boot di un sistema puó essere fatto anche da CD o DVD.
naturalmente non puó pretendere di usare il BIOS se sta in modalitá protetta, peró una cosa che puó fare é realizzare un task in modalitá virtuale x86 (un task a 16 bit che gira mentre stai in modalitá protetta, la cosa é supportata dall'architettura Intel a 32 bit) che viene invocato solamente allo scopo di chiamare le interrupt del BIOS. tutto questo baraccone funzionerebbe solo sulle architetture a 32 bit perché quelle a 64 bit non supportano la modalitá virtuale x86.



Un bel programmone monolitico. Ma per debuggare... alcune virtual machine permettono di fare il debug del codice emulato (Bochs mi pare lo faccia).

pabloski
12-05-2010, 14:31
E gli proponete di scrivere un decoder mp2 e un demacrovision, in C, per Linux (che divertente per il sonoro poi), e soprattutto conosce appena le basi della programmazione e il C non l'ha mai visto?
Mah. :mbe:

per questo gli ho detto di guardarsi intorno e cominciare a considerare di usare ffmpeg e magari qualche microkernel preesistente

il suo progetto potrebbe non essere così banale come lo descrivi, tutto dipende da cosa lui ha in mente

come ho detto più sù dipende se ha intenzione di creare un sistema multitask o monotask, se vuole processi separati e quindi p-mode oppure no

l'int 13 è ormai un residuato bellico il cui unico scopo effettivo è di permettere al bootloader di leggere il file del kernel e l'initramfs

cionci
12-05-2010, 14:34
E la visualizzazione con cosa la fa ?

pabloski
12-05-2010, 14:48
E la visualizzazione con cosa la fa ?

quella cosa mi è venuta in mente ieri notte e ho pensato che il poveraccio è nei guai se ha una scheda nvidia ad esempio

può implementare un generico driver vesa, ma questo dipende da che performance vuole avere