Δημιουργούμε το δικό μας λειτουργικό σύστημα βασισμένο σε Linux.

Παιδικά είδη 10.08.2019

Στην ερώτηση Πώς να δημιουργήσετε το δικό σας λειτουργικό σύστημα; δίνεται από τον συγγραφέα ερώτησηη καλύτερη απάντηση είναι Η ιδέα είναι αξιέπαινη.
Πρώτα απ 'όλα, πρέπει να γνωρίζετε το σύστημα εντολών του μηχανήματος για το οποίο σκοπεύετε να γράψετε ένα λειτουργικό σύστημα.
Το σύστημα εντολών αντικατοπτρίζεται άμεσα στη γλώσσα assembly.
Επομένως, πρώτα απ 'όλα, πρέπει να δημιουργήσετε τη δική σας γλώσσα συναρμολόγησης και να γράψετε ένα πρόγραμμα για αυτήν (assembler) που να μεταφράζει αλφαριθμητικά σύμβολα σε γλώσσα μηχανής
κώδικας.
Αν σας ενδιαφέρει, μπορείτε να δείτε τι απαιτήσεις πρέπει να έχει ένα νέο (ιδανικό) λειτουργικό σύστημα.
Ορισμένα τέτοια χαρακτηριστικά παρατίθενται εδώ:
.ru/D_OS/OS-PolyM.html#IdealOS
Είναι απαραίτητο να μελετηθούν υλικά από τοποθεσίες ανάπτυξης μικροεπεξεργαστών. Για παράδειγμα, Intel και AMD.
Μπορεί να σας φανεί χρήσιμο το μάθημα βιντεοδιάλεξης για το λειτουργικό σύστημα, το οποίο παρουσιάζεται εδώ:
.ru/D_OS/OS_General.html
ΥΓ: Μην ακούς τους απαισιόδοξους. Βασισμένο στην ιδεολογία ενός κόκορα που κυνηγά ένα κοτόπουλο:
«Δεν θα προλάβω, τουλάχιστον θα ζεσταθώ».
Πηγή: Ιστότοπος "Χρησιμοποιήστε τον υπολογιστή σας σωστά!"

Απάντηση από I-beam[αρχάριος]
Φυσικά) Εδώ κάθονται μόνο πύλες) Ρωτήστε τη Microsoft)



Απάντηση από Συσκευή[αρχάριος]
Πάρτε όλα τα λειτουργικά συστήματα και στριμώξτε τα σε ένα


Απάντηση από Αλεξάντερ Τούντσοφ[γκουρού]
Εξοικειωθείτε με το Linux OS, μάθετε προγραμματισμό και πηγαίνετε


Απάντηση από ~Στις φλόγες~[γκουρού]
Μάθετε προγραμματισμό στο υψηλότερο επίπεδο, συγκεντρώστε ένα ολόκληρο πλήθος από τις ίδιες ιδιοφυίες υπολογιστών και μετά μπορείτε να το κάνετε.


Απάντηση από Ρασούλ Μαγκομέντοφ[γκουρού]
Ξεκινήστε δημιουργώντας μια διασκεδαστική ταπετσαρία


Απάντηση από Captain Google[γκουρού]
Μην ακούτε «10 χρόνια για να μάθετε τα βασικά» ο Torvalds έγραψε την πρώτη έκδοση του Linux σε ηλικία 22 ετών και πήρε έναν υπολογιστή στα 12. Όπως καταλαβαίνετε, δεν σπούδασε μόνο τα βασικά.
Ξεκινήστε μελετώντας ό,τι ήδη υπάρχει - αφενός, "Modern Operating Systems" του Tannenbaum, αφετέρου, δημιουργήστε το Linux From Scratch, από την τρίτη, μάθετε Assembly, C, C++. Τα πάντα για τα πάντα μπορούν να γίνουν σε 3-4 χρόνια. Μετά από αυτό, μπορείτε να αρχίσετε να αναπτύσσετε το σύστημά σας... αν θέλετε ακόμα.


Απάντηση από Yoanya Semenov[γκουρού]
ξέρεις τι έκανε ο Γκέιτς; δοκιμάστε το ίδιο, λένε ότι βγαίνει κερδοφόρο..
Όταν οι γονείς του τον τιμώρησαν, εκείνος, χωρίς να έχει τίποτα καλύτερο να κάνει, άρχισε να χοροπηδά στο πληκτρολόγιο και μετά το πούλησε, αποκαλώντας αυτό που πήρε "παράθυρα"
ps και αν είναι αληθινό, γράψε πρώτα "Hello World" σε C++ και θα καταλάβεις αμέσως ότι η ιδέα είναι παρανοϊκή


Απάντηση από Κωσταφέι[γκουρού]
Για ποιο λόγο; Τι δυσαρεστεί ουσιαστικά τα υπάρχοντα; Δεν υπάρχει πραγματικά κανένα που να ικανοποιεί τουλάχιστον εν μέρει τις απαιτήσεις του λειτουργικού σας συστήματος; Ίσως είναι καλύτερα να συμμετάσχετε στην ομάδα ανάπτυξης; Θα υπάρχει 100500 φορές περισσότερη αίσθηση.
Και τότε, θα εγκαταλείψετε αυτή την ιδέα για άλλο 0,(0)1% της υλοποίησής της.


Απάντηση από Evgeniy Lomega[γκουρού]
E. Tanenbaum "Λειτουργικά συστήματα: ανάπτυξη και υλοποίηση"
Καλή τύχη
Υ.Γ. Δυστυχώς, είναι απίθανο να πετύχετε όπως έκανε ο Μπιλ Γκέιτς. Η μητέρα του είναι μια κουλ τραπεζίτης, είναι η δική σου;


Απάντηση από Krab Bark[γκουρού]
Μπορείτε να γράψετε μόνοι σας ένα απλό λειτουργικό σύστημα, αλλά ποτέ δεν θα μπορέσει να ανταγωνιστεί ένα λειτουργικό σύστημα όπως τα Windows, το MAC OS ή το Linux, στο οποίο εκατοντάδες ή χιλιάδες προγραμματιστές έχουν εργαστεί για τουλάχιστον δέκα χρόνια. Εξάλλου, το ΛΣ είναι μόνο το θεμέλιο. Είναι απαραίτητο οι προγραμματιστές υλικού να γράφουν τα δικά τους προγράμματα οδήγησης για αυτό το λειτουργικό σύστημα, οι προγραμματιστές προγραμμάτων εφαρμογών γράφουν συντάκτες, παίκτες, προγράμματα περιήγησης, παιχνίδια για αυτό, ο διάβολος σε ένα κονίαμα... Και χωρίς αυτό, το λειτουργικό σύστημα θα παραμείνει ένα άχρηστο θεμέλιο για ένα σπίτι που κανείς δεν θα χτίσει.


Απάντηση από Βαντίμ Σταχάνοφ[ενεργός]
Θα ήταν καλύτερα να πήγαινα να σπουδάσω φιλόλογος. Και μετά φώναζε «Δωρεάν ταμειακή μηχανή!»


Απάντηση από =Σερζ=[γκουρού]
Ζήτω! Τέλος, ερώτηση 58 στον ιστότοπο σχετικά με τη δημιουργία του "δικού σας" λειτουργικού συστήματος))
Ακολουθούν οι ερωτήσεις σχετικά με τη "γραφή του δικού σας λειτουργικού συστήματος" - υπάρχουν μόνο 34 από αυτές))
Διαβάστε...92 ερωτήσεις*10 απαντήσεις = περίπου 920 απαντήσεις))
Ταυτόχρονα, πιθανότατα θα καταλάβετε τι σημαίνει «μη βαρετή ταπετσαρία»).


Απάντηση από Μη αναπαραγώγιμη[γκουρού]
άλλος Denis Popov με άλλο BolgenOS;


Απάντηση από Ιβάν Τατάρχουκ[αρχάριος]
εκκινήστε το σημειωματάριο, κατεβάστε τον μεταγλωττιστή toadscript και ξεκινήστε να πηδάτε στο πληκτρολόγιο
μεταγλωττίστε σε 60 λεπτά και αυτό είναι
η οσκα σου ειναι ετοιμη

Πρώτα, μάθετε προγραμματισμό.Απαιτείται γνώση assembler. Συνιστάται επίσης ιδιαίτερα η κατανόηση άλλων πρόσθετων γλωσσών προγραμματισμού χαμηλότερου επιπέδου, όπως η C.

Αποφασίστε σε ποια συσκευή θέλετε να φορτώσετε το λειτουργικό σύστημα.Αυτό μπορεί να είναι ένα CD, DVD, συσκευή μνήμης flash, σκληρός δίσκος ή άλλος υπολογιστής.

Αποφασίστε πώς θέλετε να μοιάζει το λειτουργικό σας σύστημα.Θα πρέπει να είναι ένα πλήρες λειτουργικό σύστημα με γραφικό περιβάλλον χρήστη (GUI) ή ίσως κάτι πιο μινιμαλιστικό; Πρέπει να ξέρετε ποια κατεύθυνση να ακολουθήσετε πριν ξεκινήσετε τη διαδικασία.

Ελέγξτε ποια πλατφόρμα επεξεργαστή θα υποστηρίζει το λειτουργικό σας σύστημα.Το AI-32 και το x86_64 είναι οι δύο πιο κοινές εκδόσεις για προσωπικούς υπολογιστές, επομένως μπορούν να θεωρηθούν η καλύτερη επιλογή.

Αποφασίστε αν προτιμάτε να κάνετε τα πάντα μόνοι σας από την αρχή ή αν υπάρχουν πυρήνες βάσει των οποίων θα θέλατε να χτίσετε το σύστημα. Το Linux από την αρχή είναι ένα έργο για όσους θέλουν, για παράδειγμα, να δημιουργήσουν τη δική τους διανομή Linux.

Επιλέξτε εάν πρόκειται να χρησιμοποιήσετε τον δικό σας bootloader ή τον προ-ενσωματωμένο Grand Unified Bootloader (GRUB). Επειδή η κωδικοποίηση του δικού σας προγράμματος εκκίνησης απαιτεί εκτεταμένη γνώση του υλικού του υπολογιστή και του BIOS, μπορεί να ωθήσει πίσω το πρόγραμμα προγραμματισμού για τον ζωντανό πυρήνα.

Πάρτε μια απόφαση σχετικά με τη γλώσσα προγραμματισμού που πρόκειται να χρησιμοποιήσετε.Φυσικά, είναι πολύ πιθανό να αναπτυχθεί ένα λειτουργικό σύστημα σε μια γλώσσα όπως η Pascal ή η BASIC, αλλά είναι προτιμότερο να γραφτεί σε C ή γλώσσα assembly. Η γλώσσα assembly είναι απολύτως απαραίτητη, καθώς ορισμένα σημαντικά μέρη του λειτουργικού συστήματος απαιτούν γνώση της συγκεκριμένης γλώσσας. Η C++, από την άλλη πλευρά, περιέχει τις λέξεις-κλειδιά που απαιτούνται για την εκτέλεση της πλήρους έκδοσης του λειτουργικού συστήματος.

  • Για να δημιουργήσετε ένα λειτουργικό σύστημα χρησιμοποιώντας κώδικα C ή C++, φυσικά θα χρησιμοποιήσετε τον ένα μεταγλωττιστή ή τον άλλο. Αυτό σημαίνει ότι πρέπει να διαβάσετε το εγχειρίδιο/οδηγίες/τεκμηρίωση για τον επιλεγμένο μεταγλωττιστή C/C++ που παρέχεται μαζί με το λογισμικό ή είναι διαθέσιμος στον ιστότοπο του διανομέα. Θα πρέπει να μάθετε πολλά περίπλοκα πράγματα για τον μεταγλωττιστή, εκτός από το να μάθετε τη σχεδίασή του και το ABI για να βελτιώσετε τη C++. Αναμένεται να κατανοήσετε τις διάφορες μορφές εργασιών εκτέλεσης (ELF, PE, COFF, κανονικό δυαδικό, κ.λπ.) και θα σημειώσετε ότι η εγγενής μορφή PE των Windows (.exe) προστατεύεται από πνευματικά δικαιώματα.
  • Επιλέξτε Application Programming Interface (API).Μια επιλογή από καλά API είναι το POSIX, όπως είναι καλά τεκμηριωμένο. Όλα τα συστήματα Unix έχουν τουλάχιστον μερική υποστήριξη για το POSIX, επομένως θα ήταν ασήμαντο να ομαδοποιήσετε προγράμματα Unix στο λειτουργικό σας σύστημα.

    Αποφασίστε για ένα σχέδιο.Υπάρχουν μονολιθικοί πυρήνες και μικροπυρήνες. Οι μονολιθικοί πυρήνες εκτελούν όλες τις υπηρεσίες στον πυρήνα, ενώ οι μικροπυρήνες έχουν έναν μικρό πυρήνα σε συνδυασμό με μια προσαρμοσμένη υλοποίηση υπηρεσιών. Γενικά, οι μονολιθικοί πυρήνες είναι πιο γρήγοροι, αλλά οι μικροπυρήνες έχουν καλύτερη απομόνωση και προστασία από πιθανά σφάλματα.

    Σκεφτείτε την ανάπτυξη και την ομαδική εργασία.Με αυτόν τον τρόπο, θα ξοδεύετε λιγότερο χρόνο στην επίλυση μεγάλων προβλημάτων, επιτρέποντάς σας να δημιουργήσετε ένα καλύτερο λειτουργικό σύστημα σε λιγότερο χρόνο.

    Μην σκουπίζετε εντελώς τον σκληρό σας δίσκο.Θυμηθείτε, η μορφοποίηση του δίσκου θα διαγράψει οριστικά όλα τα δεδομένα σας! Χρησιμοποιήστε το GRUB ή άλλο διαχειριστή για να κάνετε διπλότυπη εκκίνηση του υπολογιστή σας από άλλο λειτουργικό σύστημα έως ότου η έκδοσή σας είναι πλήρως λειτουργικά έτοιμη.

    Ξεκινήστε από μικρό.Δώστε προσοχή στα μικρά πράγματα πρώτα, όπως η εμφάνιση κειμένου και οι διακοπές, προτού προχωρήσετε σε πολύπλοκα στοιχεία όπως η διαχείριση μνήμης και η εκτέλεση πολλαπλών εργασιών.

    Διατηρήστε ένα αντίγραφο ασφαλείας της τελευταίας έκδοσης που λειτουργεί.Αυτό παρέχει λίγη ηρεμία σε περίπτωση που κάτι πάει στραβά στην τρέχουσα έκδοση του λειτουργικού σας λειτουργικού συστήματος ή σε επόμενες προσθήκες. Εάν ο υπολογιστής σας χαλάσει και δεν μπορεί να εκκινήσει, όπως καταλαβαίνετε οι ίδιοι, η ύπαρξη ενός δεύτερου αντιγράφου για εργασία θα είναι μια εξαιρετική ευκαιρία, ώστε να μπορείτε να διορθώσετε τα υπάρχοντα προβλήματα.

    Δοκιμάστε το νέο σας λειτουργικό σύστημα σε μια εικονική μηχανή.Αντί να κάνετε επανεκκίνηση του υπολογιστή σας κάθε φορά που κάνετε αλλαγές ή μεταφέρετε αρχεία από τον υπολογιστή παραγωγής σας στη δοκιμαστική μηχανή, μπορείτε να χρησιμοποιήσετε μια εφαρμογή για να εκτελέσετε το λειτουργικό σύστημα σε μια εικονική μηχανή ενώ το τρέχον λειτουργικό σύστημα συνεχίζει να εκτελείται. Οι εφαρμογές VM περιλαμβάνουν το VMWare (το οποίο διαθέτει επίσης δωρεάν διακομιστή), εναλλακτικό ανοιχτού κώδικα, Bochs, Microsoft Virtual PC (μη συμβατό με Linux) και XVM VirtualBox.

    Κυκλοφόρησε μια έκδοση έκδοσης.Αυτό θα επιτρέψει στους χρήστες να σας ενημερώσουν για πιθανά ελαττώματα στο λειτουργικό σας σύστημα.

  • Το λειτουργικό σύστημα θα πρέπει επίσης να είναι φιλικό προς το χρήστη, επομένως φροντίστε να προσθέσετε χρήσιμες λειτουργίες που γίνονται αναπόσπαστο μέρος του σχεδιασμού σας.

    • Μόλις ολοκληρωθεί η ανάπτυξη, σκεφτείτε εάν θέλετε να κάνετε τον κώδικα δημόσια διαθέσιμο ή να τον κάνετε ιδιωτικό.
    • Βεβαιωθείτε ότι έχετε θέσει τις λειτουργίες ασφαλείας στην πρώτη σας προτεραιότητα, εάν θέλετε το σύστημά σας να είναι βιώσιμο.
    • Μην ξεκινήσετε ένα έργο ανάπτυξης λειτουργικού συστήματος με στόχο να μάθετε να προγραμματίζετε. Εάν δεν γνωρίζετε C, C++, Pascal ή οποιαδήποτε από τις άλλες σχετικές γλώσσες και χαρακτηριστικά, συμπεριλαμβανομένων των τύπων δείκτη, των λειτουργιών bit χαμηλού επιπέδου, της εναλλαγής bit, της ενσωματωμένης συναρμολόγησης κ.λπ., τότε δεν είστε ακόμα έτοιμοι για τη δημιουργία ΛΣ.
    • Περιηγηθείτε σε πύλες όπως το OSDev και το OSDever για να σας βοηθήσουν να βελτιώσετε το δικό σας λειτουργικό σύστημα. Λάβετε ιδιαίτερα υπόψη σας ότι για τα περισσότερα ζητήματα, η κοινότητα του OSDev.org προτιμά να συμβουλεύεστε μόνοι σας το περιεχόμενο του ιστότοπου αντί να συμμετέχετε σε ένα φόρουμ. Εάν παρόλα αυτά αποφασίσετε να ενταχθείτε στις τάξεις των μελών του φόρουμ, πρέπει να υπάρχουν ορισμένες προϋποθέσεις για αυτό. Πρέπει να έχετε άριστη γνώση της γλώσσας assembly C ή C++ και x86. Θα πρέπει επίσης να κατανοήσετε γενικές και σύνθετες έννοιες στον προγραμματισμό, όπως Συνδεδεμένες λίστες, Ουρές κ.λπ. Η κοινότητα OSDev δηλώνει ρητά στους κανόνες της ότι κανείς δεν πρόκειται να κάνει babysit νέους προγραμματιστές. Εάν προσπαθείτε να αναπτύξετε ένα λειτουργικό σύστημα, είναι αυτονόητο ότι είστε θεός προγραμματισμού. Πρέπει επίσης να διαβάσετε το εγχειρίδιο του επεξεργαστή σχετικά με την αρχιτεκτονική του επεξεργαστή που επιλέγετε. για παράδειγμα x86 (Intel), ARM, MIPS, PPC κ.λπ. Ένα τέτοιο βιβλίο αναφοράς για τη δομή του επεξεργαστή μπορεί να βρεθεί εύκολα με αναζήτηση στο Google ("Intel Manuals", "ARM manuals" κ.λπ.). Μην εγγραφείτε στο φόρουμ του OSDev.org για να κάνετε προφανείς ερωτήσεις. Αυτό θα οδηγήσει απλώς σε απαντήσεις όπως "Διαβάστε το εγχειρίδιο f***ing". Αρχικά, θα πρέπει να δοκιμάσετε να διαβάσετε τη Wikipedia, εγχειρίδια για τα διάφορα εργαλεία που πρόκειται να χρησιμοποιήσετε.
    • Ελέγξτε για πιθανά νεκρά σημεία και άλλα σφάλματα. Κενά, αδιέξοδα και άλλα προβλήματα μπορεί να επηρεάσουν τη σχεδίαση του λειτουργικού σας συστήματος.
    • Εάν θέλετε μια απλούστερη μέθοδο, σκεφτείτε τις διανομές Linux όπως το Fedora Revisor, το Custom Nimble X, το Puppy Remaster, το PCLinuxOS mklivecd ή το SUSE Studio και το SUSE KIWI. Ωστόσο, το λειτουργικό σύστημα που δημιουργείται ανήκει στην εταιρεία που εισήγαγε για πρώτη φορά αυτήν την υπηρεσία (αν και έχετε το δικαίωμα να το διανέμετε ελεύθερα, να το αλλάζετε και να το εκτελείτε όπως θέλετε σύμφωνα με την GPL).
    • Μια καλή λύση θα ήταν η δημιουργία ενός εντελώς νέου διαμερίσματος για το λειτουργικό σύστημα που αναπτύσσεται.

    Προειδοποιήσεις

    • Η απρόσεκτη αντιγραφή του λειτουργικού συστήματος στον σκληρό δίσκο μπορεί να τον καταστρέψει εντελώς. πρόσεχε
    • Δεν θα έχετε ένα πλήρως ολοκληρωμένο σύστημα σε δύο εβδομάδες. Ξεκινήστε με ένα λειτουργικό σύστημα με δυνατότητα εκκίνησης και μετά προχωρήστε σε πιο ενδιαφέροντα πράγματα.
    • Εάν κάνετε κάτι απερίσκεπτο, όπως να γράψετε τυχαία byte σε τυχαίες θύρες εισόδου/εξόδου, θα καταστρέψετε το λειτουργικό σας σύστημα και θα μπορούσατε (θεωρητικά) να τηγανίσετε το υλικό σας.
    • Μην περιμένετε να είναι εύκολο να δημιουργήσετε ένα ποιοτικό λειτουργικό σύστημα. Υπάρχουν πολλές σύνθετες αλληλεξαρτήσεις. Για παράδειγμα, για να μπορεί το λειτουργικό σύστημα να χειρίζεται πολλούς επεξεργαστές, ο διαχειριστής μνήμης πρέπει να διαθέτει μηχανισμούς "κλειδώματος" για να αποτρέπει την πρόσβαση επιπλέον επεξεργαστών στον ίδιο πόρο ταυτόχρονα. Τα "μπλοκ" που χρησιμοποιούνται περιλαμβάνουν έναν προγραμματιστή για να διασφαλιστεί ότι μόνο ένας επεξεργαστής έχει πρόσβαση σε έναν κρίσιμο πόρο ανά πάσα στιγμή, ενώ όλοι οι άλλοι είναι αδρανείς. Ωστόσο, η λειτουργία του προγραμματιστή εξαρτάται από την παρουσία του διαχειριστή μνήμης. Αυτό είναι ένα παράδειγμα εξάρτησης από αδιέξοδο. Δεν υπάρχει τυπικός τρόπος επίλυσης προβλημάτων όπως αυτό. Κάθε δημιουργός λειτουργικού συστήματος αναμένεται να είναι αρκετά ικανός για να βρει τη δική του λύση.

    Πηγές

    Τι θα χρειαστείτε

    • Υπολογιστή
    • Ο επεξεργαστής στον οποίο θα βασιστείτε
    • Επαρκής μνήμη τυχαίας πρόσβασης (RAM) για την εικονική μηχανή
    • Κύριο λειτουργικό σύστημα (χρησιμοποιείται για την ανάπτυξη πηγαίου κώδικα συναρμολόγησης (κ.λπ.) και τη συναρμολόγηση και τη συσκευασία στα αρχικά στάδια της εργασίας· τελικά το δικό σας λειτουργικό σύστημα θα γίνει κύριο)
    • Επεξεργαστής χρωματικού κώδικα σύνταξης (χρησιμοποιείται ελλείψει του ενσωματωμένου περιβάλλοντος ανάπτυξης)
    • Μεταγλωττιστής
    • Μονάδα CD/DVD
  • Αυτή η σειρά άρθρων είναι αφιερωμένη στον προγραμματισμό χαμηλού επιπέδου, δηλαδή στην αρχιτεκτονική υπολογιστών, τη σχεδίαση λειτουργικών συστημάτων, τον προγραμματισμό γλώσσας συναρμολόγησης και συναφείς τομείς. Μέχρι στιγμής, δύο habrausers γράφουν - ο iley και ο pehat. Για πολλούς μαθητές γυμνασίου, φοιτητές, ακόμη και επαγγελματίες προγραμματιστές, αυτά τα θέματα αποδεικνύονται πολύ δύσκολα στην εκμάθηση. Υπάρχει πολλή βιβλιογραφία και μαθήματα αφιερωμένα στον προγραμματισμό χαμηλού επιπέδου, αλλά είναι δύσκολο να αποκτήσετε μια πλήρη και ολοκληρωμένη εικόνα. Είναι δύσκολο, μετά την ανάγνωση ενός ή δύο βιβλίων για τη γλώσσα συναρμολόγησης και τα λειτουργικά συστήματα, να φανταστεί κανείς τουλάχιστον γενικά πώς λειτουργεί πραγματικά αυτό το περίπλοκο σύστημα από σίδηρο, πυρίτιο και πολλά προγράμματα - έναν υπολογιστή.

    Ο καθένας λύνει το μαθησιακό πρόβλημα με τον δικό του τρόπο. Μερικοί άνθρωποι διαβάζουν πολλή λογοτεχνία, κάποιοι προσπαθούν να προχωρήσουν γρήγορα στην εξάσκηση και να το καταλάβουν καθώς προχωρούν, άλλοι προσπαθούν να εξηγήσουν στους φίλους τους όλα όσα μελετούν. Και αποφασίσαμε να συνδυάσουμε αυτές τις προσεγγίσεις. Έτσι, σε αυτό το μάθημα άρθρων θα δείξουμε βήμα προς βήμα πώς να γράψετε ένα απλό λειτουργικό σύστημα. Τα άρθρα θα έχουν χαρακτήρα ανασκόπησης, δηλαδή δεν θα περιέχουν εξαντλητικές θεωρητικές πληροφορίες, αλλά θα προσπαθούμε πάντα να παρέχουμε συνδέσμους σε καλό θεωρητικό υλικό και να απαντάμε σε όλες τις ερωτήσεις που προκύπτουν. Δεν έχουμε ξεκάθαρο σχέδιο, τόσο πολλές σημαντικές αποφάσεις θα ληφθούν στην πορεία, λαμβάνοντας υπόψη τα σχόλιά σας.

    Ενδέχεται να εμποδίσουμε σκόπιμα τη διαδικασία ανάπτυξης για να επιτρέψουμε σε εσάς και τους εαυτούς μας να κατανοήσουμε πλήρως τις συνέπειες μιας κακής απόφασης, καθώς και να βελτιώσουμε ορισμένες τεχνικές δεξιότητες σε αυτήν. Επομένως, δεν πρέπει να αντιλαμβάνεστε τις αποφάσεις μας ως τις μόνες σωστές και να μας πιστεύετε τυφλά. Ας τονίσουμε για άλλη μια φορά ότι αναμένουμε από τους αναγνώστες να είναι ενεργοί στη συζήτηση άρθρων, κάτι που θα επηρεάσει σε μεγάλο βαθμό τη συνολική διαδικασία ανάπτυξης και συγγραφής επόμενων άρθρων. Ιδανικά, με την πάροδο του χρόνου, θα ήθελα μερικοί από τους αναγνώστες να συμμετάσχουν στην ανάπτυξη του συστήματος.

    Θα υποθέσουμε ότι ο αναγνώστης είναι ήδη εξοικειωμένος με τις βασικές αρχές της συναρμολόγησης και των γλωσσών C, καθώς και τις στοιχειώδεις έννοιες της αρχιτεκτονικής υπολογιστών. Δηλαδή, δεν θα εξηγήσουμε τι είναι ένας καταχωρητής ή, ας πούμε, η RAM. Εάν δεν έχετε αρκετές γνώσεις, μπορείτε πάντα να στραφείτε σε πρόσθετη βιβλιογραφία. Μια σύντομη λίστα αναφορών και συνδέσμων σε ιστότοπους με καλά άρθρα βρίσκεται στο τέλος του άρθρου. Συνιστάται επίσης να γνωρίζετε πώς να χρησιμοποιείτε το Linux, καθώς όλες οι οδηγίες μεταγλώττισης θα δοθούν ειδικά για αυτό το σύστημα.

    Και τώρα - πιο κοντά στο θέμα. Στο υπόλοιπο άρθρο, θα γράψουμε το κλασικό πρόγραμμα «Hello World». Το Helloworld μας θα είναι λίγο συγκεκριμένο. Δεν θα κυκλοφορήσει από κανένα λειτουργικό σύστημα, αλλά απευθείας, θα λέγαμε, «σε γυμνό μέταλλο». Πριν ξεκινήσουμε να γράφουμε τον κώδικα, ας καταλάβουμε πώς ακριβώς προσπαθούμε να το κάνουμε αυτό. Και για αυτό πρέπει να εξετάσουμε τη διαδικασία εκκίνησης του υπολογιστή.

    Πάρτε, λοιπόν, τον αγαπημένο σας υπολογιστή και πατήστε το μεγαλύτερο κουμπί στη μονάδα συστήματος. Βλέπουμε μια χαρούμενη προφύλαξη οθόνης, η μονάδα συστήματος ακούγεται χαρούμενα με το ηχείο της και μετά από κάποιο χρονικό διάστημα φορτώνεται το λειτουργικό σύστημα. Όπως καταλαβαίνετε, το λειτουργικό σύστημα είναι αποθηκευμένο σε έναν σκληρό δίσκο και εδώ τίθεται το ερώτημα: πώς το λειτουργικό σύστημα φορτώθηκε ως δια μαγείας στη μνήμη RAM και άρχισε να εκτελείται;

    Γνωρίστε το εξής: το σύστημα που βρίσκεται σε οποιονδήποτε υπολογιστή είναι υπεύθυνο για αυτό, και το όνομά του - όχι, όχι Windows, αγνοείτε τη γλώσσα σας - ονομάζεται BIOS. Το όνομά του σημαίνει Basic Input-Output System, δηλαδή ένα βασικό σύστημα εισόδου-εξόδου. Το BIOS βρίσκεται σε ένα μικρό τσιπ στη μητρική πλακέτα και ξεκινά αμέσως μετά το πάτημα του μεγάλου κουμπιού ON. Το BIOS έχει τρεις κύριες εργασίες:

    1. Εντοπίστε όλες τις συνδεδεμένες συσκευές (επεξεργαστή, πληκτρολόγιο, οθόνη, RAM, κάρτα βίντεο, κεφάλι, χέρια, φτερά, πόδια και ουρές...) και ελέγξτε τη λειτουργικότητά τους. Το πρόγραμμα POST (Power On Self Test) είναι υπεύθυνο για αυτό. Εάν δεν εντοπιστεί ζωτικό υλικό, τότε κανένα λογισμικό δεν θα μπορεί να βοηθήσει και σε αυτό το σημείο το ηχείο του συστήματος θα τρίζει κάτι δυσοίωνο και το λειτουργικό σύστημα δεν θα φτάσει καθόλου στο σημείο. Ας μην μιλάμε για θλιβερά πράγματα, ας υποθέσουμε ότι έχουμε έναν υπολογιστή που λειτουργεί πλήρως, ας χαρούμε και ας προχωρήσουμε στην εξέταση της δεύτερης λειτουργίας του BIOS:
    2. Παροχή στο λειτουργικό σύστημα με ένα βασικό σύνολο λειτουργιών για εργασία με υλικό. Για παράδειγμα, μέσω των λειτουργιών του BIOS μπορείτε να εμφανίσετε κείμενο στην οθόνη ή να διαβάσετε δεδομένα από το πληκτρολόγιο. Γι' αυτό ονομάζεται βασικό σύστημα εισόδου/εξόδου. Συνήθως το λειτουργικό σύστημα έχει πρόσβαση σε αυτές τις λειτουργίες μέσω διακοπών.
    3. Εκκίνηση του φορτωτή του λειτουργικού συστήματος. Σε αυτήν την περίπτωση, κατά κανόνα, διαβάζεται ο τομέας εκκίνησης - ο πρώτος τομέας του μέσου αποθήκευσης (δισκέτα, σκληρός δίσκος, CD, μονάδα flash). Η σειρά ψηφοφορίας μέσων μπορεί να οριστεί στο BIOS SETUP. Ο τομέας εκκίνησης περιέχει ένα πρόγραμμα που μερικές φορές ονομάζεται κύριος φορτωτής εκκίνησης. Σε γενικές γραμμές, η δουλειά του bootloader είναι να ξεκινήσει το λειτουργικό σύστημα. Η διαδικασία φόρτωσης ενός λειτουργικού συστήματος μπορεί να είναι πολύ συγκεκριμένη και να εξαρτάται σε μεγάλο βαθμό από τα χαρακτηριστικά του. Επομένως, ο κύριος φορτωτής εκκίνησης γράφεται απευθείας από τους προγραμματιστές του λειτουργικού συστήματος και γράφεται στον τομέα εκκίνησης κατά την εγκατάσταση. Όταν ξεκινά ο bootloader, ο επεξεργαστής βρίσκεται σε πραγματική λειτουργία.
    Τα θλιβερά νέα είναι ότι ο bootloader θα πρέπει να έχει μέγεθος μόνο 512 byte. Γιατί τόσο λίγοι; Για να γίνει αυτό, πρέπει να εξοικειωθούμε με τη δομή της δισκέτας. Εδώ είναι μια ενημερωτική εικόνα:

    Η εικόνα δείχνει την επιφάνεια μιας μονάδας δίσκου. Μια δισκέτα έχει 2 επιφάνειες. Κάθε επιφάνεια έχει δακτυλιοειδή μονοπάτια (ίχνη). Κάθε κομμάτι χωρίζεται σε μικρά κομμάτια σε σχήμα τόξου που ονομάζονται τομείς. Έτσι, ιστορικά, ένας τομέας δισκέτας έχει μέγεθος 512 byte. Ο πρώτος τομέας στο δίσκο, ο τομέας εκκίνησης, διαβάζεται από το BIOS στο τμήμα μηδενικής μνήμης στο offset 0x7C00 και στη συνέχεια ο έλεγχος μεταφέρεται σε αυτή τη διεύθυνση αποθηκευμένο στο δίσκο, αλλά για κάποιο λόγο (πιθανότατα, αυτός ο λόγος είναι το μέγεθος) δεν ταιριάζει σε έναν τομέα Και δεδομένου ότι προς το παρόν τον ρόλο του λειτουργικού μας συστήματος παίζει ένα κοινόχρηστο Helloworld, ο κύριος στόχος μας είναι να φτιάξουμε τον υπολογιστή. πιστέψτε στην ύπαρξη του λειτουργικού μας λειτουργικού συστήματος, έστω και μόνο σε έναν τομέα, και ξεκινήστε το.

    Πώς είναι δομημένος ο τομέας εκκίνησης; Σε έναν υπολογιστή, η μόνη απαίτηση για τον τομέα εκκίνησης είναι τα δύο τελευταία του byte να περιέχουν τις τιμές 0x55 και 0xAA - την υπογραφή του τομέα εκκίνησης. Έτσι, είναι ήδη λίγο-πολύ σαφές τι πρέπει να κάνουμε. Ας γράψουμε κώδικα! Ο κωδικός που δίνεται είναι γραμμένος για τον συναρμολογητή yasm.

    Ενότητα. κείμενο

    χρήση16

    org 0x7C00 ; Το πρόγραμμά μας φορτώνεται στη διεύθυνση 0x7C00

    αρχή:

    mov ax , cs

    mov ds, ax ; επιλέξτε ένα τμήμα δεδομένων



    mov si , μήνυμα

    cld ; κατεύθυνση για εντολές συμβολοσειράς

    mov ah , 0x0E ; Αριθμός δυνατότητας BIOS

    mov bh , 0x00 ; σελίδα μνήμης βίντεο

    puts_loop:

    lodsb ; φορτώστε το επόμενο σύμβολο στο al

    δοκιμή al, al ; ο μηδενικός χαρακτήρας σημαίνει το τέλος της γραμμής

    jz puts_loop_exit

    int 0x10 ; καλέστε τη λειτουργία BIOS

    jmp puts_loop

    puts_loop_exit:

    jmp$; αιώνιος κύκλος



    μήνυμα:

    db "Hello World!" , 0

    φινίρισμα:

    φορές 0x1FE - τερματισμός+ έναρξη db 0

    db 0x55, 0xAA ; υπογραφή τομέα εκκίνησης

    Αυτό το σύντομο πρόγραμμα απαιτεί μερικές σημαντικές εξηγήσεις. Η γραμμή org 0x7C00 είναι απαραίτητη έτσι ώστε ο assembler (εννοεί το πρόγραμμα, όχι τη γλώσσα) να υπολογίζει σωστά τις διευθύνσεις για ετικέτες και μεταβλητές (puts_loop, puts_loop_exit, μήνυμα). Έτσι τον ενημερώνουμε ότι το πρόγραμμα θα φορτωθεί στη μνήμη στη διεύθυνση 0x7C00.
    Σε γραμμές
    mov ax, cs

    mov ds, ax
    το τμήμα δεδομένων (ds) ορίζεται ίσο με το τμήμα κώδικα (cs), αφού στο πρόγραμμά μας τόσο τα δεδομένα όσο και ο κώδικας αποθηκεύονται στο ίδιο τμήμα.

    Στη συνέχεια, στον βρόχο, εμφανίζεται το μήνυμα "Hello World!" Για το σκοπό αυτό χρησιμοποιείται η συνάρτηση 0x0E της διακοπής 0x10. Έχει τις εξής παραμέτρους:
    AH = 0x0E (αριθμός συνάρτησης)
    BH = αριθμός σελίδας βίντεο (μην ασχολείστε ακόμα, υποδείξτε 0)
    AL = κωδικός χαρακτήρων ASCII

    Στη γραμμή "jmp$" το πρόγραμμα παγώνει. Και δικαίως, δεν χρειάζεται να εκτελέσει επιπλέον κώδικα. Ωστόσο, για να λειτουργήσει ξανά ο υπολογιστής, θα πρέπει να κάνετε επανεκκίνηση.

    Στη γραμμή "times 0x1FE-finish+start db 0" ο υπόλοιπος κώδικας του προγράμματος (εκτός από τα δύο τελευταία byte) συμπληρώνεται με μηδενικά. Αυτό γίνεται έτσι ώστε μετά τη μεταγλώττιση, τα δύο τελευταία byte του προγράμματος να περιέχουν την υπογραφή του τομέα εκκίνησης.

    Φαίνεται ότι έχουμε τακτοποιήσει τον κώδικα του προγράμματος, ας προσπαθήσουμε τώρα να μεταγλωττίσουμε αυτήν την ευτυχία. Για τη μεταγλώττιση χρειαζόμαστε, αυστηρά, έναν assembler - αυτόν που αναφέραμε παραπάνω

    Αργά ή γρήγορα, κάθε χρήστης Linux σκέφτεται να δημιουργήσει τη δική του διανομή. Κάποιοι υποστηρίζουν ότι μπορείτε να «προσαρμόσετε τα πάντα για τον εαυτό σας». Άλλοι παραπονιούνται ότι μεταξύ των κιτ διανομής που έχουν ήδη παρουσιαστεί στη Vetka δεν υπάρχει το ιδανικό. Και υποτίθεται ότι έχουν υπερ-εννοιολογικές ιδέες για το δικό τους σύστημα. Γιατί ξεκίνησα όλη αυτή την ψυχολογία; Για να κόψει αμέσως το οξυγόνο στους αρχάριους που παίζουν με Linux που δεν έχουν καμία σχέση. Εάν σκέφτεστε ήδη να δημιουργήσετε ένα λειτουργικό σύστημα, σκεφτείτε μέχρι το τέλος. Ετσι,

    Θέλω να δημιουργήσω ένα λειτουργικό σύστημα βασισμένο σε Linux.
    Σας προειδοποιώ αμέσως: αν ήταν ο 18ος αιώνας, θα κρέμονταν όλοι όσοι επιλέγουν μια άλλη ανεπτυγμένη διανομή (και, Θεός φυλάξοι, λαϊκή...) ως βάση για το μελλοντικό τους σύστημα. Η ανάρτηση αφορά τη δημιουργία ενός συστήματος από την αρχή, πράγμα που σημαίνει ότι δεν θα αγγίξουμε όλα τα είδη Slax και Linux Mint.

    Βήμα 1: Επιλέξτε μέσα
    Υπάρχουν λίγες επιλογές: είτε το λειτουργικό σας σύστημα εκτελείται από LiveCD, είτε από σκληρό δίσκο ή από συσκευή flash. Θα κάνω μια κράτηση αμέσως: Δεν θα πω λέξη για τον σκληρό δίσκο σε αυτήν την ανάρτηση, επειδή είναι πολύ πιο βολικό να δημιουργήσετε ένα ευέλικτο κιτ διανομής από τη σειρά "Μεταφέρω τα πάντα μαζί μου" ή μια κλειδωμένη διανομή κιτ σε οπτικό δίσκο. Εάν μάθετε πώς να δημιουργείτε ένα σύστημα LiveCD ή LiveUSB, δεν θα υπάρχουν προβλήματα με την εγκατάσταση στον σκληρό σας δίσκο.

    Για κάθε περίπτωση, ετοιμάστε μια καθαρή μονάδα flash, CD και, τέλος, εγκαταστήστε το Virtualbox.

    Βήμα 2. Μεταγλώττιση του πυρήνα
    Όσον αφορά την κυκλοφορία του τρίτου πυρήνα Linux, αυτό το βήμα ενθαρρύνει περαιτέρω ανάπτυξη... Χρειαζόμαστε λοιπόν τις πηγές του πυρήνα. Κάθε χρήστης γνωρίζει ότι μπορεί να τα αποκτήσει στον ιστότοπο kernel.org. Σε καμία περίπτωση, δεν ακούτε;, μην επισυνάψετε ποτέ στο σύστημά σας έναν ξένο πυρήνα που δεν έχει μεταγλωττιστεί από εσάς!

    Επειδή η τεμπελιά μου ήταν εκτός κλίμακας, δημιούργησα τον φάκελο /linuxkernel και ξεσυσκευάστηκα το αρχείο με τις πηγές εκεί. Έχω συνδεθεί ως root, έκανα τα εξής:

    cd /linuxkernel
    make menuconfig

    Κατ 'αρχήν, ο πυρήνας μπορεί να ρυθμιστεί με τρεις τρόπους: make config (διαμόρφωση συνομιλίας), make menuconfig (ψευδογραφική διαμόρφωση μέσω ncurses) και xconfig (γραφική διαμόρφωση). Η ουσία είναι ότι το make config θα καταστρέψει τη διάθεσή σας για μεγάλο χρονικό διάστημα, επειδή... θα κάνει όλες τις πιθανές ερωτήσεις για όλες τις πτυχές όλων των θεμάτων. Το πρόβλημα με το make xconfig δεν εμφανίζεται σε όλους, αλλά το έχω αντιμετωπίσει και συνεχίζω να το αντιμετωπίζω. Αν θέλετε να το κάνετε μέσω του Χ, καταλάβετε το μόνοι σας. Η καλύτερη επιλογή είναι το make menuconfig. Αυτό το πράγμα θα ανοίξει μια ψευδο-γραφική διεπαφή μέσω της οποίας μπορείτε να προσαρμόσετε τον πυρήνα με τον δικό σας τρόπο. Το πράγμα απαιτεί τη βιβλιοθήκη ncurses, η οποία είναι εύκολη στην εγκατάσταση.

    Βασικά, αν ο εγκέφαλός σας καταλαβαίνει καθόλου το Linux, θα καταλάβετε τη διαμόρφωση. Η διαδικασία είναι ενδιαφέρουσα, υπάρχουν πραγματικά πολλές επιλογές και η βοήθεια, αν και στα αγγλικά, εξακολουθεί να ευχαριστεί την προσβασιμότητα και την απλότητά της.

    Ωστόσο, θα πρέπει ακόμα να κατευθυνθείτε. Πηγαίνετε στο File Systems ---> και βάλτε τους απαιτούμενους αστερίσκους. Το γράμμα M σημαίνει ότι η υποστήριξη για ένα συγκεκριμένο πρόγραμμα οδήγησης πραγματοποιείται συνδέοντας μια εξωτερική μονάδα στον πυρήνα (τα μισώ!). Θα χρειαστούμε επίσης υποστήριξη isofs για την ανάγνωση δίσκων. Συστήματα αρχείων ---> Συστήματα αρχείων CD-ROM/DVD ---> Υποστήριξη συστήματος αρχείων CDROM ISO 9660. Μπορείτε επίσης να υποστηρίξετε αρχαία συστήματα Dos.

    Οι άθλιοι προγραμματιστές Mandriva ξέχασαν να επιτρέψουν στα συστήματα αρχείων ---> DOS/FAT/NT Filesystems ---> NTFS υποστήριξη εγγραφής, και σε μια από τις διανομές τους δυσκολεύτηκα με την πρόσβαση στο διαμέρισμα των Παλιών Windows.

    Κοιτάξτε τον τύπο και τις δυνατότητες επεξεργαστή ---> Οικογένεια επεξεργαστών, μου προτάθηκε να επιλέξω Pentium-MMX.

    Επίσης, ρίξτε μια ματιά στα προγράμματα οδήγησης συσκευών, είναι χρήσιμο. Για πλάκα, μπορείτε να επιλέξετε τα πάντα εκεί και να μεταγλωττίσετε έναν πυρήνα με βάρος > 50 MB.

    Περαιτέρω. Ο πυρήνας, αφού φορτώσει ο ίδιος, πρέπει να φορτώσει το ίδιο το σύστημα. Είτε από μεταγλωττισμένα αρχεία (που χρησιμοποιούνται σε ενσωματωμένα συστήματα), είτε από ένα αρχείο CPIO που συμπιέζεται από κάτι, είτε από το Initrd. Αυτό δεν είναι DOS, εδώ δεν θα μπορείτε να ανατρέξετε αμέσως σε κάποιο αρχείο init στον ριζικό κατάλογο ενός δίσκου ή μονάδας flash, στην πραγματικότητα, θα λειτουργήσει, μην ακούτε τον θείο. παρόλο που υπάρχει ήδη αρκετή συζήτηση σχετικά με αυτό στο Διαδίκτυο Θα χρησιμοποιήσουμε το initrd στο σύστημά μας, επειδή είναι βολικό και δεν θα προκαλέσει άσεμνη γλώσσα από τρίτους προγραμματιστές, σε αντίθεση με το αρχείο CPIO.

    Ω ναι, μεταγλωττίστε τον πυρήνα με την εντολή

    Εάν έχετε x86, θα το βρείτε στο /linuxkernel/arch/x86/boot/bzImage.

    Για σκληρούς προγραμματιστές του Chelyabinsk, μπορείτε να χρησιμοποιήσετε το Cross-compiling...

    Δημιουργία Ramdisk.

    Τώρα χρειαζόμαστε ένα initrd με ένα απλό κέλυφος εγκατεστημένο εκεί. Θα χρησιμοποιήσουμε το busybox, γιατί αυτό το γλυκό μπορεί να κάνει τα πάντα. Θα κλέψουμε τη μέθοδο από τον Roberto de Leo, τον δημιουργό του Movix (θα άρχιζα ακόμη και να τον σέβομαι αν δεν ήταν η απίστευτη αγάπη μου για την Perl):

    dd if=/dev/zero of=/dev/ram0 bs=1k count=5000 - Δημιουργήστε ένα Ramdisk στη μνήμη RAM του υπολογιστή μας.
    mke2fs -m0 /dev/ram0 5000 - Μορφοποίηση Ramdisk στο σύστημα Ext2
    mkdir /distro - Δημιουργία φακέλου
    mount /dev/ram0 /distro - Προσάρτηση στο φάκελο /distro

    Αυτό ήταν, τώρα έχουμε Ramdisk χωρητικότητας 5 MB. Περισσότερα είναι δυνατά, αλλά δεν είναι απαραίτητα. Σε αντίθεση με τον Thomas Matejisek, δεν πρόκειται να γεμίσω το initrd με συμπιεσμένες μονάδες με LZMA στο Squashfs. Όλα όσα χρειάζονται θα μεταγλωττιστούν με τον πυρήνα. Ναι, αυτό δεν είναι πολύ λογικό και σωστό, αλλά είναι εκατό φορές λιγότερη ταλαιπωρία. Και ειδικά για όσους καταδικάζουν αυτήν την προσέγγιση, μπορείτε να ενεργοποιήσετε την επιλογή αρθρωτής λειτουργίας στον πυρήνα: Ενεργοποίηση υποστήριξης λειτουργικής μονάδας με δυνατότητα φόρτωσης.

    Στο δικό μας Ramdisk, που είναι προσαρτημένο στο /distro, υπάρχει ένας τέτοιος φάκελος, ο οποίος έχει διαμορφωθεί στο ext2, αν και είναι απίθανο να τον διαγράψετε θα πρέπει πρώτα να εγκαταστήσω το busybox...

    Εγκατάσταση Busybox
    Γι' αυτό τέτοια κουλ έργα έχουν τόσο άθλιες ιστοσελίδες; Αν και... αυτό δεν είναι πλέον σημαντικό εάν οι πηγές ληφθούν και αποσυμπιεστούν επιτυχώς στο φάκελο /busybox.

    Μπορείτε να διαμορφώσετε το busybox με τον ίδιο τρόπο:

    cd /busybox
    make menuconfig

    Αν πάλι δεν καταλαβαίνετε τι είναι, θα σας εξηγήσω. Το Busybox αντικαθιστά τόνους εφαρμογών UNIX που είναι αποθηκευμένες στους φακέλους /bin, /sbin, /usr/bin, /usr/sbin. Αντίθετα, δημιουργείται μόνο μία εφαρμογή: /bin/busybox και δημιουργούνται μια δέσμη συνδέσμων προς αυτήν στους παραπάνω φακέλους. Εγκαταστήστε το busybox με την ακόλουθη εντολή:

    κάντε εγκατάσταση CONFIG_PREFIX=/distro

    Το Busybox θα δημιουργήσει επίσης τα αρχεία /sbin/init και για κάποιο λόγο /linuxrc ώστε το σύστημά σας να ξεκινήσει σωστά. Δεν δημιουργήθηκαν όμως όλοι οι απαραίτητοι φάκελοι. Οπότε τελειώνουμε τα πάντα με το χέρι και δημιουργούμε:

    /distro/etc
    /distro/lib
    /distro/dev
    /distro/mnt
    distro/proc
    /distro/root
    /distro/tmp
    /distro/root

    Αν ξέχασες κάτι, θυμήσου το γιατί... Είναι δύσκολο να ξεχάσεις αυτούς τους καταλόγους.

    Όλα θα ήταν καλά, αλλά το busybox απαιτεί να λειτουργούν βιβλιοθήκες, οι οποίες πρέπει να αντιγραφούν στη διανομή μας. Είναι πολύ εύκολο να μάθετε ποιες:

    ldd /distro/bin/busybox

    Το πρόγραμμα θα μας δείξει τις βιβλιοθήκες που απαιτούνται για το κέλυφός μας. Θα πω αμέσως: η πύλη linux δημιουργείται από τον πυρήνα και δεν μπορεί να αντιγραφεί.

    Όταν αντιγράφετε βιβλιοθήκες, μπορείτε να κόψετε πληροφορίες εντοπισμού σφαλμάτων (όπως συμβουλεύει ο Roberto):

    objcopy --strip-debug από πού ως πού

    Δημιουργία Linux από Linux

    Πρέπει να δημιουργήσετε πολλά αρχεία κειμένου συστήματος:

    Χρειαζόμαστε /etc/inittab. Θα σας εκπλήξω: στην αρχή της ζωής του, το σύστημα δεν ξέρει καν τι είναι το Root. Έχουμε ακόμη και έναν ανώνυμο χρήστη, αλλά το αρχείο χαρακτηριστικών χαμηλού επιπέδου σε όλο το σύστημα (ONF) πρέπει να υπάρχει. Τα πιλοτικά περιεχόμενα του αρχείου είναι τα εξής:

    # Το πρώτο αρχείο που θα ξεκινήσει, τότε /sbin/init.
    ::sysinit:/etc/rc.d/rc.S

    # Εκκινήστε ένα κέλυφος στην κονσόλα.
    ::respawn:-/bin/sh

    # Εντολές που εκτελούνται πριν από τον τερματισμό και την επανεκκίνηση.
    :: shutdown:/sbin/swapoff -a >/dev/null 2>&1
    :: shutdown:/bin/umount -a -r >/dev/null 2>&1

    Το επόμενο αρχείο είναι το /etc/fstab. Αυτός είναι ένας πίνακας που περιγράφει τι να τοποθετήσετε και πού κατά τη φόρτωση. Το πράγμα είναι άχρηστο! Πρέπει να προσαρτήσουμε το proc, διαφορετικά τίποτα δεν θα λειτουργήσει καθόλου, οπότε γράφουμε στο αρχείο:

    none /proc proc προεπιλογή 0 0

    Για προσάρτηση χρειάζεστε επίσης το αρχείο /etc/mtab. Δημιουργήστε το και αφήστε το κενό.

    Αλλά το mount θα κάνει ό,τι είναι απαραίτητο μόνο όταν του το ζητήσουμε ρητά. Και θα ρωτήσουμε στο πρώτο κιόλας αρχείο εκκίνησης /etc/rc.d/rc.S (rc.d - φάκελος). Ρωτάμε ευγενικά:

    /bin/mount -av -t nonfs

    Χρειαζόμαστε επίσης ένα αρχείο προφίλ (b)(a)sh, υπάρχει γενικά ελευθερία στη φαντασία. Δημιουργήστε ένα αρχείο /etc/profile και συμπληρώστε το με τα εξής:

    PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"
    LESS=-MM
    TERM=linux
    HOME=/root
    PS1=">"
    PS2=">"
    ignoreeof=10
    εξαγωγή PATH DISPLAY LESS TERM PS1 PS2 HOME ignoreeof

    Θα χρειαστείτε επίσης το αρχείο /etc/shell, το οποίο υποδεικνύει ότι υπάρχει ένα κέλυφος:

    /bin/sh
    /bin/στάχτη
    /bin/bash

    Αυτό είναι όλο. Μπορείτε να γράψετε το Ramdisk μας σε ένα αρχείο.

    mkdir /os - φάκελος για "έτοιμο".
    umount /dev/ram0 - αποπροσαρτήστε ένα κομμάτι μνήμης RAM.
    dd if=/dev/ram0 of=/os/initrd bs=1k count=5000 - δημιουργήστε ένα αρχείο.
    gzip /os/initrd - συμπίεση του αρχείου initrd

    Δημιουργία μονάδας flash USB με δυνατότητα εκκίνησης

    Η «τελική γραμμή» της μικρής μας εξέλιξης. Παίρνουμε μια μονάδα flash, την εισάγουμε, τη μορφοποιούμε σε vfat (μπορείτε επίσης να χρησιμοποιήσετε ext, αλλά μην ξεχνάτε ότι δεν έχουν αυτοτραβηχτεί όλοι οι χρήστες των Windows).

    Στη μονάδα flash δημιουργούμε μια εκκίνηση φακέλου, σε αυτήν υπάρχουν οι φάκελοι initrd και kernel.

    Από το φάκελο /os, αντιγράψτε το συμπιεσμένο Ramdisk στον φάκελο boot/initrd της μονάδας flash, ονομάστε τον "main.gz". Από το φάκελο με τις πηγές του πυρήνα, αντιγράψτε το bzImage στο φάκελο boot/kernel στη μονάδα flash, ονομάστε το "main.lk". Λαμβάνουμε τα αρχεία εκκίνησης Syslinux (στο Διαδίκτυο ή από άλλη διανομή: δεν έχει σημασία), δηλαδή syslinux.bin, syslinux.boot, syslinux.cfg. Τα αντιγράφουμε στον ριζικό κατάλογο της μονάδας flash μας. Στο αρχείο syslinux.cfg γράφουμε κάτι σαν αυτό:

    προεπιλογή mm
    προτροπή 1
    timeout 100
    ετικέτα mm
    πυρήνας /boot/kernel/main.lk

    ετικέτα mc
    πυρήνας /boot/kernel/main.lk

    ετικέτα cm
    πυρήνας /boot/kernel/custom.lk
    προσάρτηση initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    ετικέτα cc
    πυρήνας /boot/kernel/custom.lk
    προσάρτηση initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    ετικέτα hd
    localboot 0x80

    Έτσι, υποστηρίξαμε προσαρμοσμένο initrd και πυρήνα, τα οποία, για λόγους πειραματισμού, μπορούν να συνδεθούν με τη διανομή μας.

    Ας μάθουμε ποια συσκευή στο σύστημα είναι η μονάδα flash μας (μπορείτε να εκτελέσετε το mount χωρίς παραμέτρους και να δείτε). Αυτό είναι είτε /dev/sdb1, /dev/sdc1 ή /dev/sdd1. Αξίζει να αποσυναρμολογήσετε τη μονάδα flash πριν ξεκινήσετε την εγκατάσταση.

    Εγκαταστήστε το syslinux (εάν το πακέτο δεν βρίσκεται στο σύστημα, apt-get install syslinux):

    syslinux -d path_to_device

    Το αρχείο ldlinux.sys πρέπει να εμφανίζεται στον ριζικό κατάλογο της μονάδας flash. Εάν υπάρχει, τότε τα syslinux.bin, syslinux.boot δεν χρειάζονται πλέον.

    Δεν θα σας πω πώς να ρυθμίσετε τις παραμέτρους του BIOS για εκκίνηση από μια μονάδα flash - είναι εύκολο. Θα πω μόνο ότι είναι πολύ βολικό να δημιουργήσετε έναν φάκελο /boot/initrd/init, στον οποίο μπορείτε να προσαρτήσετε το /boot/initrd/main, για μετέπειτα εργασία μαζί του. Απλώς θυμηθείτε να το αποσυμπιέσετε και να το συμπιέσετε με gzip.

    Εντάξει όλα τελείωσαν τώρα.

    Σαν να σας είχα μόλις πει πώς να δημιουργήσετε ένα σύστημα Linux από την αρχή. Εύκολο, έτσι δεν είναι; Στη συνέχεια, μπορείτε να επεξεργαστείτε το σενάριο /sbin/init, γιατί έχετε ακόμα πολλή δουλειά να κάνετε! Θα πρέπει να γράψετε ένα σενάριο για να προσαρτήσετε τη μονάδα flash που την μεταφέρει στον ριζικό κατάλογο. Διαφορετικά, θα αναγκαστείτε να εργαστείτε με ένα διαμέρισμα ReadOnly 5 MB. Αλλά αυτό είναι μια εντελώς διαφορετική ιστορία.

    Αν φτάσουμε στην ουσία...

    Ένα λειτουργικό σύστημα είναι ένα πράγμα που υλοποιεί το multitasking (συνήθως) και διαχειρίζεται την κατανομή των πόρων μεταξύ αυτών των εργασιών και γενικά. Πρέπει να βεβαιωθείτε ότι οι εργασίες δεν μπορούν να βλάψουν η μία την άλλη και να λειτουργούν σε διαφορετικούς τομείς της μνήμης και να εργάζονται με συσκευές με τη σειρά τους, τουλάχιστον αυτό είναι. Πρέπει επίσης να παρέχετε τη δυνατότητα μετάδοσης μηνυμάτων από τη μια εργασία στην άλλη.

    Επίσης, το λειτουργικό σύστημα, εάν υπάρχει μακροπρόθεσμη μνήμη, πρέπει να παρέχει πρόσβαση σε αυτό: να παρέχει δηλαδή όλες τις λειτουργίες για την εργασία με το σύστημα αρχείων. Είναι ελάχιστο.

    Σχεδόν παντού, ο πρώτος κώδικας εκκίνησης πρέπει να είναι γραμμένος σε γλώσσα assembly - υπάρχουν πολλοί κανόνες σχετικά με το πού πρέπει να είναι, πώς πρέπει να μοιάζει, τι πρέπει να κάνει και ποιο μέγεθος δεν πρέπει να υπερβαίνει.

    Για έναν υπολογιστή, πρέπει να γράψετε ένα bootloader στο ASMA, το οποίο θα καλείται από το BIOS και το οποίο θα πρέπει, χωρίς να υπερβαίνει τα τέσσερα και μερικές εκατοντάδες byte, να κάνει κάτι και να εκκινήσει το κύριο λειτουργικό σύστημα - έλεγχος μεταφοράς στον κύριο κώδικα, ο οποίος στο το εγγύς μέλλον μπορεί να γραφτεί σε C.

    Για το ARM, πρέπει να δημιουργήσετε έναν πίνακα διακοπών στο ACMA (επαναφορά, διάφορα σφάλματα, διακοπές IRQ, FIQ κ.λπ.) και να μεταφέρετε τον έλεγχο στον κύριο κωδικό. Αν και, σε πολλά περιβάλλοντα ανάπτυξης, τέτοιος κώδικας είναι διαθέσιμος για σχεδόν κάθε ελεγκτή.

    Δηλαδή, για αυτό χρειάζεστε:

    1. Γνωρίστε τη γλώσσα assembler της πλατφόρμας προορισμού.
    2. Γνωρίστε την αρχιτεκτονική του επεξεργαστή και όλων των ειδών τις εντολές και καταχωρήσεις υπηρεσίας για να τον ρυθμίσετε ώστε να λειτουργεί στην επιθυμητή λειτουργία. Σε έναν υπολογιστή, πρόκειται για μια μετάβαση σε προστατευμένη λειτουργία, για παράδειγμα, ή σε λειτουργία 64-bit... Στο ARM, αυτό ρυθμίζει το ρολόι του πυρήνα και των περιφερειακών.
    3. Μάθετε ακριβώς πώς θα ξεκινήσει το λειτουργικό σύστημα, πού και πώς πρέπει να προωθήσετε τον κωδικό σας.
    4. Γνωρίστε τη γλώσσα C - είναι δύσκολο να γράψετε μεγάλο κώδικα στο Asma χωρίς εμπειρία, η διατήρησή του θα είναι ακόμα πιο δύσκολη. Επομένως, πρέπει να γράψετε τον πυρήνα στο C.
    5. Γνωρίστε τις αρχές λειτουργίας του ΛΣ. Λοιπόν, υπάρχουν πολλά βιβλία στα ρωσικά σχετικά με αυτό το θέμα, αν και δεν ξέρω αν είναι όλα καλά.
    6. Να έχετε πολλή υπομονή και επιμονή. Θα υπάρξουν λάθη και θα πρέπει να βρεθούν και να διορθωθούν. Θα χρειαστεί επίσης να διαβάσετε πολύ.
    7. Να έχεις πολύ και πολύ χρόνο.

    Περαιτέρω. Ας πούμε ότι έγραψες κάτι. Πρέπει να δοκιμάσουμε αυτό το πράγμα. Είτε χρειάζεστε μια φυσική συσκευή στην οποία θα πραγματοποιηθούν τα πειράματα (πίνακας εντοπισμού σφαλμάτων, δεύτερος υπολογιστής), είτε έναν εξομοιωτή για αυτήν. Το δεύτερο είναι συνήθως πιο εύκολο και γρήγορο στη χρήση. Για υπολογιστή, για παράδειγμα, VMWare.

    Υπάρχουν επίσης πολλά άρθρα σχετικά με αυτό το θέμα στο Διαδίκτυο, αν ψάξετε καλά. Υπάρχουν επίσης πολλά παραδείγματα έτοιμων λειτουργικών συστημάτων με πηγαίους κώδικες.

    Μπορείτε ακόμη, αν θέλετε πραγματικά, να δείτε τον πηγαίο κώδικα του παλιού πυρήνα των συστημάτων NT (Windows), τόσο ξεχωριστά (που δημοσιεύτηκε από τη Microsoft, με σχόλια και διάφορα είδη υλικού αναφοράς) όσο και σε συνδυασμό με τον παλιό OS (διέρρευσε).



    Συνιστούμε να διαβάσετε

    Μπλουζα