Come iniziare a cambiare il codice sorgente di Linux per creare un sistema operativo personalizzato? [chiuso]


15

Ho sentito che possiamo personalizzare Linux (diciamo Ubuntu) come desideriamo cambiando il suo codice sorgente e possiamo creare un nuovo sistema operativo. Ho scaricato il codice sorgente del kernel Linux dal sito Web www.kernel.org. Ma vedendolo, non sono in grado di capire nulla, ci sono così tante directory, file all'interno dei file (come penso che ci sarebbe un unico grande programma). Voglio farlo come un progetto universitario e voglio anche contribuire a Linux apportando le necessarie modifiche. Ma dopo aver posto questa domanda su alcuni siti, hanno detto che il codice sorgente di Linux è molto grande. Puoi provare minix. Ora sono molto confuso.

Vi prego di darmi suggerimenti con dettagli su come dovrei iniziare questo viaggio (di cambiare il codice sorgente per personalizzare Linux) con i passaggi necessari, insieme ad alcuni libri per principianti.


Qual è il tuo obiettivo? Come vorresti contribuire?
Spidey,

Per creare il mio sistema operativo personalizzato modificando il suo codice sorgente (linux) ... e per sapere come funziona il sistema operativo e anche per divertimento
dubex,

Il kernel chiamato Linux non è Gnu / Linux (Ubuntu, Debian, RedHat, Suse, ecc. Distrowatch.com ) Tuttavia, la maggior parte delle persone usa confusamente il termine Linux per indicare GNU / Linux + X11 +. Tuttavia Linux è solo uno dei kernel, che può essere utilizzato con GNU e altri sistemi operativi. Se si desidera modificare Ubuntu o simili, ciò non equivale a modificare il kernel chiamato Linux.
ctrl-alt-delor,

Risposte:


29

Benvenuto su unix.stackexchange.com!

Non c'è una risposta facile alla tua domanda, e persone molto migliori di me hanno scritto interi libri sull'argomento del kernel Linux e dei sistemi operativi in ​​generale.

Sul campo di applicazione del progetto: scrivere un sistema operativo non è un compito semplice! Anche un sistema operativo minimamente intenzionale come Minix è una cosa piuttosto complessa! Per darti un'idea di Linux, pensa ai programmi C che hai scritto finora. Il corso medio universitario tende ad essere al massimo qualche migliaio di righe. Penso che il mio progetto dell'ultimo anno fosse di circa 30–35.000 linee di C ++. Il kernel di Linux contiene circa 13.000.000 di righe di codice C.

Perché è tutto in file separati? I progetti di grandi dimensioni vengono archiviati in file separati per motivi logistici e pratici. Considera solo di caricare un file di 13.000.000 di righe in un editor! Prima di affrontare un grande progetto come Linux, dovresti assolutamente affinare le tue abilità C al punto in cui la domanda "perché più file" risponde a se stessa. Dovresti anche essere in grado di leggere il codice C , non solo di scriverlo. (più difficile di quanto sembri all'inizio)

Dovresti assolutamente essere molto esperto in C. Il kernel è gestito da migliaia di persone e verrai chiamato a comprendere i modi di dire C personali di ciascuno di essi (garantito, all'interno degli standard di codifica del kernel abbastanza rigidi, ma comunque - tutti hanno il proprio stile di risoluzione dei problemi).

Dopo aver ottenuto il tuo C fu, assicurati di comprendere i sistemi operativi. Questo ti aiuterà a capire il codice. Non tutto Linux è essenziale. Il kernel proprio è piuttosto piccolo! Che gonfia è:

  • Migliaia di driver hardware per vari dispositivi.
  • Livelli di astrazione per varie classi di dispositivi per semplificare le API e la scrittura dei driver. Ad esempio, abbiamo il VFS per filesystem, il livello Event per dispositivi di input, eccetera.
  • Impressionanti quantità di codice e file compilati in modo condizionale per le varie architetture che eseguono Linux (non tutte le macchine Linux sono un PC Intel, e alcune sono incredibilmente diverse da quelle che ci si potrebbe aspettare). Il kernel ha a che fare con queste differenze, e questo significa più codice.

Un problema che scoprirai immediatamente è che questi componenti non sono così facili da staccare, cambiare e ricollegare. Ci sono numerose interrelazioni. In breve, cambiare i bit del kernel è complicato.

Il motivo per cui le persone ti hanno suggerito Minix è semplice: è un sistema operativo completo, ma non è gravato dalle esigenze di un sistema complesso come Linux. Il codice è piccolo, ma offre comunque funzionalità complete. Dopotutto, le prime versioni di Linux sono state ispirate da Minix.

Certo, Minix ha meno supporto hardware in questi giorni. E allora? Questo è un vantaggio! I computer moderni si virtualizzano molto bene. Usalo a tuo vantaggio: una VM per eseguire Minix è così leggera che renderà lo sviluppo un gioco da ragazzi.

Se il tuo progetto è costruire un sistema operativo, potresti fare di peggio che iniziare studiando Minix. Potresti anche voler comprare e leggere il libro che Minix è stato scritto per accompagnare " I moderni sistemi operativi di Andrew Tanenbaum ".

Dovresti anche fissare i tuoi obiettivi e definire i termini con precisione . Se la tua definizione di sistema operativo è quella di Microsoft (un sistema operativo con una GUI e una suite software completa), potresti essere coinvolto in un progetto molto lungo! Centinaia di migliaia di persone hanno lavorato dagli anni '60 per portarci dove siamo ora, dopo tutto.

Infine, ricorda il grido di battaglia di Computer Scientist: ' non reinventare mai la ruota! '(ci piace fare eccezioni durante l'apprendimento, ovviamente. E per divertimento :))


1
[link] (www.linuxfromscratch.org) riempirebbe completamente il mio sogno ... grazie per aver mostrato interesse alla mia domanda
dubex

LFS è fantastico per imparare come funziona lo spazio utente di un sistema POSIX. Per quanto ne so è specifico di Linux, quindi non si occupa di modificare il kernel in una direzione insolita (come faresti quando si crea il proprio kernel). Ma è un altro punto, perché una volta che il kernel si allontana da POSIX, lo spazio utente sarà incompatibile e dovrà essere portato o reimplementato.
Alexios,

Ci scusiamo per l'incomprensione ... Ma non volevo dire che avrò il mio kernel (dato che non ho molto talento :)). Voglio cambiare il codice sorgente in modo che possa sembrare diverso dagli altri e sembra che sia la mia creatività. Ad esempio: Vorrei un certo tipo di animazione con il suono (che ho realizzato), sullo schermo quando Linux (diciamo Ubuntu) si avvia con alcuni software di riconoscimento vocale installati al suo interno. Ancora grazie.
dubex,

1
In tal caso, stai creando la tua distribuzione di Linux e non un sistema operativo diverso. LFS è lo strumento giusto per questo. In bocca al lupo!
Alexios,

1
@Alexios, risposta molto buona e descrittiva, grazie.
0xAF,


4

Penso che la prima cosa che devi definire sia "quali sono le modifiche che desideri apportare al sistema operativo". Fino a quando non lo deciderai, non arriverai davvero da nessuna parte. Non esiste un "percorso" di apprendimento.

Inoltre, penso che dovresti definire meglio cosa intendi per SO. Una grande parte (una parte importante) del codice sorgente di Ubuntu è al di fuori di Linux. Linux è solo il kernel (a volte viene chiamato Sistema Operativo , specialmente nei circoli accademici, quindi la confusione), e quindi ha il "semplice" lavoro di:

  • gestione delle risorse.
  • comunicare con l'hardware.

Qualsiasi altra modifica avverrebbe a un livello diverso, sia che si tratti delle utility di base per l'utente (spesso definite utils ), della GUI, delle app di base di una distribuzione, ecc.

Se tuttavia, sei ancora pronto a imparare come hackerare il kernel, dovresti forse iniziare con questa domanda , la domanda più votata su questo sito;)


scusate per non essere così specifico nel porre domande ... ma in realtà non ho idea di tutto questo in dettaglio. In realtà voglio un certo tipo di animazione (con audio) sullo schermo quando linux (diciamo ubuntu) si avvia ... per favore, mi dia un'idea di esplorare tutti questi campi e come spostarsi ulteriormente in qualsiasi campo specifico (diciamo gui con la comunicazione con l'hardware ) ...
dubex,

@dubex inizia con plymouth e guarda le librerie Linux per la riproduzione del suono. SDL_mixer potrebbe essere facile.
sourcejedi,

2

Questo potrebbe essere un po 'fuori dal punto, ma se desideri conoscere il kernel Linux e iniziare a svilupparlo, dovresti davvero esaminare i neofiti del kernel . È un sito che ti dà un'idea della meccanica del kernel (come ha fatto Alexios in modo eccellente), ma ti consente anche di scegliere un piccolo compito da gestire (essere un cosiddetto bidello del kernel). È un ottimo modo per imparare e lo consiglio vivamente!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.