Προσομοίωση Linus Torvalds: Δημιουργήστε το δικό σας λειτουργικό σύστημα από το μηδέν (I)

Πρώτα απ 'όλα, σχολιάστε ότι αυτό είναι το πρώτο μου άρθρο και ελπίζω να σας αρέσει σε όλους.

Ο Linus Torvals χαρούμενος

Σε αυτήν τη σειρά θα μιμηθούμε Ο Linus Torvalds, πρόκειται να δημιουργήσουμε το λειτουργικό μας σύστημα από το 0. Σε αυτό το πρώτο επεισόδιο θα δούμε την εκκίνηση και θα βάλουμε ένα κείμενο στην οθόνη από τον πυρήνα μας.

Στην περίπτωσή μου καλείται το λειτουργικό σύστημα NextDivel. Η πρώτη απόφαση που πρέπει να λάβουμε μόλις εξετάσουμε το λειτουργικό σύστημα είναι τι πρόκειται να είναι το bootloader;

Εδώ υπάρχουν πολλές παραλλαγές, και θα μπορούσαμε ακόμη και να δημιουργήσουμε μία από εμάς. Ωστόσο, σε αυτό το σεμινάριο πρόκειται να χρησιμοποιήσω GRUB, γιατί οι περισσότεροι γνωρίζουν λίγο πολύ κάτι γι 'αυτόν. Δημιουργούμε έναν φάκελο που θα είναι η ρίζα του λειτουργικού μας συστήματος και εκεί δημιουργούμε το φάκελο / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Εκεί δημιουργούμε το αρχείο grub.cfg ως εξής:

menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}

Σε αυτό το αρχείο έχουμε δει πώς GRUB θα φορτώσει τον πυρήνα μας, σε αυτήν την περίπτωση, στο /next/START.ELF. Τώρα πρέπει να δημιουργήσουμε τον πυρήνα μας.

Για αυτό θα χρειαστούμε GCC y GAS (ο συναρμολογητής του έργου GNU, συνήθως έρχεται με το gcc). Έτσι θα δημιουργήσουμε τον πυρήνα.

Πρώτα φτιάχνουμε ένα αρχείο που ονομάζεται kernel.asm. Αυτό το αρχείο θα περιέχει το σημείο εκκίνησης του πυρήνα μας και θα καθορίσει επίσης το multiboot (ένα χαρακτηριστικό ορισμένων bootloader όπως GRUB). Το περιεχόμενο του kernel.asm θα είναι:

.text
.globl start
start:
jmp multiboot_entry
.align 4
multiboot_header:
.long 0x1BADB002
.long 0x00000003
.long -(0x1BADB002+0x00000003)
multiboot_entry:
movl $(stack + 0x4000), %esp
call NextKernel_Main
loop: hlt
jmp loop
.section ".bss"
.comm stack,0x4000

Όλα όσα σχετίζονται με το multiboot είναι απλά να ακολουθήσετε τις προδιαγραφές. Όλα θα ξεκινήσουν στην αρχή, θα καλέσουν multiboot_entry, θα έχουμε ορίσει την κεφαλίδα multiboot στο πρώτο 4k και θα το βάλουμε (με movl)

Αργότερα καλούμε NextKernel_Main που είναι η συνάρτηση C του πυρήνα μας. Στο βρόχο σταματάμε να σταματήσουμε τον υπολογιστή. Αυτό μεταγλωττίζεται με:

as -o kernel.o -c kernel.asm

Τώρα πρόκειται να εισέλθουμε στον προγραμματισμό στο C. Θα νομίζετε ότι τώρα όλα είναι ένα κομμάτι κέικ, βάζουμε ένα Printf en κύριος και αυτό είναι, το έχουμε κάνει.

Λοιπόν όχι, από τότε Printf y κύριος είναι λειτουργίες που καθορίζονται από το λειτουργικό σύστημα, αλλά τις δημιουργούμε! Μπορούμε να χρησιμοποιήσουμε μόνο τις λειτουργίες που ορίζουμε εμείς.

Σε επόμενα κεφάλαια θα μιλήσω για το πώς να βάλουμε τη δική μας βιβλιοθήκη C (glibc, bionic, newlibc) αλλά κατά καιρούς. Μιλήσαμε ότι θέλουμε να βάλουμε κείμενο στην οθόνη, θα δούμε πώς το κάνουμε.

Υπάρχουν δύο επιλογές, μία είναι να καλέσετε το BIOS και ένα άλλο είναι η άμεση διαχείριση της μνήμης οθόνης. Θα κάνουμε το τελευταίο επειδή είναι πιο καθαρό από το C και θα μας επιτρέψει επίσης να το κάνουμε όταν μπαίνουμε σε προστατευμένη λειτουργία.

Δημιουργούμε ένα αρχείο που ονομάζεται NextKernel_Main.c με το ακόλουθο περιεχόμενο:

int NextKernel_Main()
{
char *str = "NextDivel says Hello World", *ch;
unsigned short *vidmem = (unsigned short*) 0xb8000;
unsigned i;
for (ch = str, i = 0; *ch; ch++, i++)
vidmem[i] = (unsigned char) *ch | 0x0700;
return 0;
}

Με αυτό χειριζόμαστε άμεσα τη μνήμη VGA και χαρακτήρας ανά χαρακτήρα το γράφουμε. Συντάσσουμε απενεργοποιώντας το stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

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

ENTRY(start)
SECTIONS
{
. = 0x00100000;
.multiboot_header :
{
*(.multiboot_header)
}
.text :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}

Με αυτό καθορίζουμε τη θέση κάθε ενότητας και το σημείο εισόδου, εκκίνηση, που έχουμε ορίσει στο kernel.asm. Τώρα μπορούμε να ενώσουμε όλα αυτά τα παρασκευάσματα:

gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

Τώρα αντιγράφουμε το START.ELF στο / επόμενο μέσα στο φάκελό μας που προσομοιώνει τη ρίζα του λειτουργικού μας συστήματος. Πηγαίνουμε στον ριζικό φάκελο του νέου λειτουργικού μας συστήματος με την κονσόλα και επιβεβαιώνουμε ότι υπάρχουν δύο αρχεία: ένα /boot/grub/grub.cfg και ένα άλλο /next/START.ELF.

Πηγαίνουμε στον επάνω κατάλογο και καλούμε ένα βοηθητικό πρόγραμμα δημιουργίας ISO με το όνομα GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Μόλις το κάνουμε αυτό θα έχουμε ένα ISO. Αυτό το ISO μπορεί να ανοίξει σε υπολογιστές x86 (64 bit επίσης) και εικονικές μηχανές. Για να το δοκιμάσω, θα το χρησιμοποιήσω QEMU. Καλούμε QEMU από τη γραμμή εντολών:

qemu-system-i386 nextdivel.iso

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

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

Εάν κάποιος δεν θέλει να αντιγράψει τα πάντα εδώ, έχω ένα αποθετήριο στο GitHub (πιο περίπλοκο) με το λειτουργικό σύστημα NextDivel. Εάν θέλετε να μεταγλωττίσετε NextDivel απλά πρέπει να έχεις git και cmake:

git clone https://github.com/AdrianArroyoCalle/next-divel
cd next-divel
mkdir build && cd build
cmake ..
make
make DESTDIR=next install
chmod +x iso.sh
./iso.sh
qemu-system-i386 nextdivel.iso

Σας ενθαρρύνω να συνεργαστείτε στο NextDivel εάν έχετε το χρόνο και την επιθυμία να δημιουργήσετε ένα λειτουργικό σύστημα. Ίσως ακόμη ανώτερο από το Linux ... ο χρόνος θα το πει.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Έλαβ dijo

    :O

    1.    marianogaudix dijo

      Ο Torvalds πήρε το λειτουργικό σύστημα Minix (που προέρχεται από το UNIX) στον Andrew S. Tanenbaum και το βελτίωσε.

      Ο Tanenbaum είχε έναν αγώνα με τον Linus, προσβάλλουν ο ένας τον άλλον. Ο Tanenbaum λέει ότι το Microkernel είναι το μέλλον (HURD, Minix new cone Microkernel).

      http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html

  2.   eliotime3000 dijo

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

  3.   Κάρλος Γκούντε dijo

    Εντυπωσιαστείτε

  4.   axl dijo

    Πραγματικά εντυπωσιακό !!

  5.   rhoconlinux dijo

    ΦΟΥΜΟΥΟΥΟΥΟΥΑ!
    Είναι το geekiest post που έχω δει ποτέ hehe. Συγχαρητήρια Adrian, ένα άρθρο της πόρνης! εξαιρετικά ενδιαφέρον !!! 🙂

    1.    Joaquin dijo

      Συμφωνώ. Φαντάζομαι αυτήν την κατάσταση:
      Χρήστης GNU / Linux Power (με χαρούμενο πρόσωπο):
      "Ξέρω ήδη πώς να συνθέσω το Gentoo μου"

      Nerd (περιφρονητικά): «pff, έχω δημιουργήσει τη δική μου διανομή ...»

      1.    desikoder dijo

        Ναι, μπορώ να δημιουργήσω τη δική μου διανομή linux. Στην πραγματικότητα, αναπτύσσω ένα initramfs και έναν πυρήνα για ενσωματωμένο linux. Δεν είναι το ίδιο να δημιουργείς ένα λειτουργικό σύστημα από ένα linux distro. Το πρώτο είναι πολύ πιο δύσκολο, σχεδόν αδύνατο, το δεύτερο, όπως είπατε, μπορεί να είναι οτιδήποτε, ακόμη και το Ubuntu με το λογότυπο xD άλλαξε. Έτσι θα το άφηνα έτσι:

        Χρήστης GNU / Linux (με χαρούμενο πρόσωπο)
        - Ξέρω ήδη πώς να συνθέσω το Gentoo μου

        Ημι-σπασίκλας
        - Pff, έχω ακολουθήσει ένα linux από το μηδέν και έκανα τη δική μου διανομή

        Nerd (με περιφρονητική στάση)
        - pff, επειδή έχω προγραμματίσει έναν πυρήνα στο assembler και στο C

        Saludos!

  6.   Cronos dijo

    Αυτό είναι ενδιαφέρον για μένα, εν αναμονή των ακόλουθων κεφαλαίων.

  7.   abimaelmartell dijo

    Είδα αυτό το σεμινάριο πριν από λίγο καιρό, είναι για το C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Ευχαριστώ για τον σύνδεσμο, θα το ρίξω μια ματιά.

  8.   Jose Jácome dijo

    Θα ήθελα ένα λειτουργικό σύστημα 100% συμβατό με γραφικά AMD: /

    1.    ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        χαχαχα στα Windows Catalyst δεν έχει υποστήριξη OpenGL, αν και στο Linux δεν μπορώ να χρησιμοποιήσω όλη τη γραφική ισχύ που θα περιμένω να δω τι θα συμβεί!

        1.    beny_hm dijo

          απλώς περιμένετε να εξαφανιστεί η βαλβίδα

  9.   KZKG ^ Γκάρα dijo

    Μαγική, τέλεια, εξαιρετική συνεισφορά, μοιάζει με μια μεγάλη σειρά δημοσιεύσεων 🙂

  10.   O_Pixote_O dijo

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

  11.   αυτό το όνομα είναι λάθος dijo

    Mooooooolaaa !!!!

  12.   Νορδρί dijo

    Πολύ καλό άρθρο, αλλά απλώς περίεργο γιατί δεν έχετε ακολουθήσει το έργο Linux From Scratch;

    αφορά

    1.    AdrianArroyoStreet dijo

      Λοιπόν, το Linux από το Scratch είναι εντάξει και μπορείτε να πείτε ότι είναι δικό σας, αλλά είναι πραγματικά πολύ μηχανικό:
      - Λήψη γραμματοσειρών
      -Πιτάξτε τα
      -Συντάσσω
      -Εγκαθιστώ
      -ΕΠΟΜΕΝΟ
      Εδώ, παρόλο που το αποτέλεσμα είναι χειρότερο στο τέλος, μπορείτε να πείτε ότι έχετε ελέγξει όλα τα αρχεία.

    2.    desikoder dijo

      Όπως προκύπτει από το προηγούμενο σχόλιό μου, επειδή δεν έχει το ίδιο επίπεδο πολυπλοκότητας. Επιπλέον, το linux από το μηδέν δεν είναι πραγματικά, σε αντίθεση με το όνομά του, δημιουργώντας ένα σύστημα από το μηδέν. Η δημιουργία ενός συστήματος από το μηδέν προγραμματίζει τον εαυτό σας, γράφοντας τον δικό σας πυρήνα, όχι τον πυρήνα linux, αν είναι δυνατόν ακόμη και τον δικό σας bootloader αντί grub, lilo, syslinux κ.λπ. Αν και ένα LFS δεν είναι μικρό επίτευγμα και είναι αρκετά περίπλοκο, δεν έρχεται καν κοντά στον προγραμματισμό του δικού σας πυρήνα

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

      Saludos!

  13.   κουλουράκι dijo

    uuuoooohh !! Δεν έχω καταλάβει ποτέ μια ανάρτηση όσο αυτή.
    Συνεχίστε 😀

  14.   linux_user dijo

    Δεν ξέρω τι συμβαίνει:

    σφάλμα: δεν βρέθηκε κεφαλίδα πολλαπλής εκκίνησης.
    σφάλμα πρέπει πρώτα να φορτώσετε τον πυρήνα

    1.    AdrianArroyoStreet dijo

      Αν είναι παρηγοριά, έκανα το ίδιο λάθος. Προσπαθήστε να χρησιμοποιήσετε τις πηγές που βρίσκονται στο GitHub, εκεί το πρόβλημα έχει ήδη επιλυθεί. Τέλος πάντων νομίζω ότι αν αλλάξετε τη γραμμή στο grub.cfg από "multiboot /next/START.ELF" σε "kernel /next/START.ELF" μπορεί να λειτουργήσει. Δεν γνωρίζω ακριβώς.

      1.    mcbanana dijo

        Πρώτα απ 'όλα, υπέροχη είσοδος 🙂
        Αντιμετωπίζω το ίδιο πρόβλημα με τη φόρτωση του πυρήνα από το grub. Ακόμη και χρησιμοποιώντας πηγές GitHub ή αλλάζοντας multiboot για πυρήνα ...

        σφάλμα: δεν βρέθηκε κεφαλίδα πολλαπλής εκκίνησης.
        σφάλμα: χωρίς φορτωμένο πυρήνα

        1.    AdrianArroyoStreet dijo

          Χρησιμοποιείτε το clang ως μεταγλωττιστή; Αλλάξτε το για το gcc
          Θυμηθήκατε να χρησιμοποιήσετε το σενάριο σύνδεσης; Είναι απαραίτητο για τον σύνδεσμο (ld στην περίπτωσή μας) να γνωρίζει πού στο αρχείο πρόκειται να βάλει κάθε πράγμα. Σε αυτήν την περίπτωση, η κεφαλίδα multiboot πρέπει να βρίσκεται στην αρχή.
          Χρησιμοποιείτε το σύστημα CMake; Εάν το χρησιμοποιήσετε, νομίζω ότι δεν αποτυγχάνει.
          Εάν δεν λειτουργεί για εσάς, θα προσπαθήσω να βρω άλλη λύση.

  15.   Χουρτ dijo

    [+100]
    Τέλεια !!!

  16.   αόρατο15 dijo

    Είναι πολύ ωραίο 🙂

  17.   Τανάραξ dijo

    Βγάζω το καπέλο μου. Εντυπωσιακή ανάρτηση. Συγχαρητήρια.

  18.   άνδρας dijo

    Γοχα!
    Θα ήταν υπέροχο αν μπορούσατε να ανοίξετε εφαρμογές που έγιναν σε HTML5 και Javascript χωρίς να χρειάζεται να χρησιμοποιήσετε πρόγραμμα περιήγησης, είναι αυτό δυνατό;
    Μιλάω για να είναι σαν εγγενείς εφαρμογές.
    Έτσι θα ήταν εύκολο να προγραμματίσετε αυτό το λειτουργικό σύστημα 😀

    1.    AdrianArroyoStreet dijo

      Σε αυτήν την περίπτωση δεν πρόκειται να το κάνω γιατί χρειάζεται πολύ περισσότερη δουλειά πίσω από αυτό, αλλά υπάρχει ένα λειτουργικό σύστημα που ονομάζεται "είναι" που κάνει αυτό που λέτε. Στην πραγματικότητα, η γραμμή εντολών είναι JavaScript και τα παράθυρα σχεδιάζονται χρησιμοποιώντας λειτουργίες JavaScript Canvas. Οι μηχανικοί της Nintendo το έκαναν και τώρα είναι ανοιχτού κώδικα.

      http://code.google.com/p/es-operating-system/

      1.    άνδρας dijo

        Valla, ευχαριστώ για τις πληροφορίες 😀
        θα ρίξω μια ματιά

  19.   patodx dijo

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

    1.    Miguel dijo

      Μέχρι στιγμής κανείς δεν είναι γνωστό ότι έχει φτιάξει μόνο κάτι που μπορεί να ειπωθεί ως ένα αξιοπρεπές λειτουργικό σύστημα κατασκευασμένο από το μηδέν, ούτε καν το Linux Torvalds όπως λέτε στην αρχή, καθώς αυτό ξεκίνησε από πηγές του Unix και όλα τα άλλα έχουν γραφτεί στο κοινό σε περισσότερα από ένα άτομα, η ζωή είναι πολύ σύντομη και ξεκινώντας από το μηδέν είναι αδιανόητη για οποιονδήποτε, ακόμη και αν το αντίθετο είναι επιθυμητό, ​​είναι εμφανές σε πολλά λάθη που έγιναν κατά την αντιγραφή και επικόλληση από το Linux Torvalds

      1.    σκαρμιγλιόνη dijo

        Οι πηγές unix είναι κλειστές, η χρήση του minix ... που είναι κάτι άλλο.

      2.    Φελίπε Ρομπίνα dijo

        και αυτοί που έκαναν το QDOS τι;
        βασίζονταν σε κάτι;

  20.   Τέσλα dijo

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

    Τώρα σοβαρά, πολύ ενδιαφέρον! Πολλά είναι πέρα ​​από τις περιορισμένες γνώσεις προγραμματισμού μου, αλλά θα διαβάσω τα υπόλοιπα μέρη αυτής της σειράς με αναμονή.

    Ευχαριστώ για την ανάρτηση!

  21.   Μανουέλ Ρ dijo

    Με άφησες με ένα πρόσωπο O_O ... χωρίς την πρόθεση να υποτιμήσω τις συνεισφορές κάποιου, είναι το πιο «υπέρ» που έχω δει τελευταία. Χαιρετισμοί.

  22.   aitor_cz dijo

    Πολύ καλό άρθρο, Adrián. Παρακαλώ συνέχισε…

  23.   mj dijo

    Αστειεύεστε την Ημέρα των ανόητων του Απριλίου; Μην είσαι «Εμμηνόμηση του Linus Torvalds: Δημιουργήστε το δικό σας λειτουργικό σύστημα από το μηδέν». Δεν νομίζω ότι είναι δύσκολο για όσους ακολουθούν καριέρα σε κάποιο ινστιτούτο τεχνολογίας ή πανεπιστήμιο. αλλά για μένα είμαι αρχάριος τοξότης (υπάρχουν αυτοί που μας αποκαλούν "Noob", αλλά θεωρώ τον εαυτό μου πιο Newbie κάπως τεμπέλης) που μοιάζει να μην πατάω στη γη Τέλος πάντων, ΑΥΤΟ ΤΟ ΑΡΘΡΟ ΔΗΜΙΟΥΡΓΕΙ ΕΥΘΥΝΗ ΕΝΙΣΧΥΣΗ ΚΑΙ ΧΩΡΙΣ ΔΙΠΛΗ ΕΜΠΟΡΙΑ ΚΑΙ ΣΕΒΑΝΟ ΓΙΑ ΤΟΝ ΣΥΝΕΔΡΙΟ, ΣΥΓΓΡΑΦΕΙΣ. Το πρώτο πράγμα που θα κάνω είναι να προσπαθήσω να καταλάβω τουλάχιστον λίγο από αυτό το πολύτιμο υλικό.
    ΕΥΧΑΡΙΣΤΟΥΜΕ Adrian Arroyo Calle, εξαιρετική δουλειά και ευγενική παράδοση γνώσεων.

  24.   Μπλερ Πασάλ dijo

    LEL Εξαιρετική ανάρτηση, συνεχίστε.

  25.   f3niX dijo

    Que Grandioso post, esto es lo que extrañaba de desde linux. Que maravilla.

  26.   Ruby dijo

    Υπέροχη ανάρτηση, ευχαριστώ πολύ.
    Δεν κατάλαβα τι κάνει το αρχείο link.ld, μπορεί κάποιος να το εξηγήσει;

    1.    AdrianArroyoStreet dijo

      Το αρχείο link.ld ενημερώνει τον σύνδεσμο (σε αυτήν την περίπτωση ld) όπου κάθε μέρος του κώδικα πρέπει να βρίσκεται στο αρχείο που προκύπτει. Ορίζουμε επίσης το σημείο εισόδου, καθώς καθώς δεν διαθέτουμε λειτουργικό σύστημα δεν μπορούμε να χρησιμοποιήσουμε το κύριο ως κανονικό πρόγραμμα, στην περίπτωση αυτή επιλέγουμε τη λειτουργία εκκίνησης.

  27.   Μάξι φόρεμα dijo

    Υπέροχη όλη η ανάρτησή σας! Περιμένοντας τα 7! Τι γίνεται αν έχω αμφιβολία, για παράδειγμα, εάν ήθελα μόνο να τρέξω έναν αλγόριθμο, χωρίς λειτουργικό σύστημα, πώς ξέρω τι μπορώ να χρησιμοποιήσω και τι όχι C;

    1.    AdrianArroyoStreet dijo

      Εάν το χρησιμοποιείτε έτσι, δεν θα μπορούσατε να χρησιμοποιήσετε τίποτα από το stdlib, το οποίο είναι σχεδόν αυτό που όλοι χρησιμοποιούν (χωρίς malloc, δωρεάν, printf, scanf, strcmp, κ.λπ.). Όλα πρέπει να εφαρμοστούν απευθείας από τη μνήμη ή το ASM. Ίσως σε ένα υψηλότερο κεφάλαιο να δείξω πώς να εγκαταστήσω μια βιβλιοθήκη C για το λειτουργικό σύστημα. Εάν χρησιμοποιείτε C ++ δεν μπορείτε να χρησιμοποιήσετε εξαιρέσεις και τους νέους τελεστές διαγραφής (και σίγουρα περισσότερους).

    2.    διακόπτης dijo

      Νομίζω αυτό μπορεί να σας δώσει μια καλύτερη ιδέα για το πώς να το κάνετε.

  28.   Esteban dijo

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

  29.   Johan dijo

    Αγαπητέ μου, έχω ένα σφάλμα κατά την εκτέλεση της εντολής:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 σφάλμα σύνταξης
    collect2: error: ld επέστρεψε 1 κατάσταση εξόδου

    σύνδεσμος.ld
    Ε = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    Στη γραμμή 5 δεν βλέπω το σφάλμα, κάνει κάποιος το ίδιο;

    Δουλεύω με ένα virtualized debian wheezy στο virtualbox

    1.    Εικόνα κράτησης θέσης Julian Reyes Escrigas dijo

      πρόσθεσε το ";" στο τέλος του * (. multiboot_header)

  30.   Έρικ Ορελάνα Ρομέρο dijo

    Εξαιρετική πρωτοβουλία, σίγουρα θα ακολουθήσω τα κεφάλαια αυτής της ανάρτησης, σκοπεύω να μάθω πολλά από αυτήν. Σας ευχαριστώ πολύ που αφιερώσατε χρόνο για να μας διδάξετε. Μια μοναδική λεπτομέρεια ως προς αυτό, πρέπει να σημειωθεί ότι ο Linus Torvalds δεν είναι ο δημιουργός οποιουδήποτε λειτουργικού συστήματος, δημιούργησε τον πυρήνα του συστήματος GNU / Linux (αυτό που έχει χρησιμοποιηθεί σε άλλο λειτουργικό σύστημα), το οποίο εξακολουθεί να αξίζει, αλλά είναι Είναι σημαντικό να πιστώσετε τον Richard Stallman για τη δημιουργία του περισσότερου λειτουργικού συστήματος.

    Σας ευχαριστώ πολύ για τη συμβολή και ελπίζω να λάβετε υπόψη την παρατήρησή μου.

  31.   Εικόνα κράτησης θέσης Julian Reyes Escrigas dijo

    Μου ταιριάζει με το θέμα για λίγο, με ενδιέφερε μόλις διάβασα τον τίτλο. αλλά το μήνυμα συνεχίζει

    σφάλμα: δεν βρέθηκε κεφαλίδα πολλαπλής εκκίνησης.
    σφάλμα πρέπει πρώτα να φορτώσετε τον πυρήνα

    Έχω ανεβάσει αυτό που παίρνω σε ένα ρεπό στο github https://github.com/rkmax/GenyOS

    1.    Μάρτιν Βίλμπα dijo

      Το ίδιο συμβαίνει και σε μένα. Βρήκατε τη λύση;

  32.   Κάρλος dijo

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

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: η εντολή δεν βρέθηκε

    1.    AdrianArroyoStreet dijo

      Το περιεχόμενο αυτού του περιεχομένου δεν πρέπει να εισαχθεί στη γραμμή εντολών, αλλά στο αρχείο που δημιουργείτε ονομάζεται grub.cfg

  33.   Νοδετίνο dijo

    Εξαιρετικό άρθρο, σας ευχαριστώ!

  34.   Δαβίδ dijo

    Θεαματικός…!! είναι ακριβώς όπως ο σύνδεσμος που λείπει.

  35.   r.garciag dijo

    Μου αρέσουν τα μαθήματα Emulating LInus Torvalds, αλλά υπάρχει ένα βήμα που δεν καταλαβαίνω, το εξής:
    Τώρα αντιγράφουμε το START.ELF στο / επόμενο μέσα στο φάκελό μας που προσομοιώνει τη ρίζα του λειτουργικού μας συστήματος. Πηγαίνουμε στον ριζικό φάκελο του νέου λειτουργικού μας συστήματος με την κονσόλα και επιβεβαιώνουμε ότι υπάρχουν δύο αρχεία: ένα /boot/grub/grub.cfg και ένα άλλο /next/START.ELF.

    Πηγαίνουμε στον επάνω κατάλογο και καλούμε ένα βοηθητικό πρόγραμμα για τη δημιουργία ISO με GRUB που ονομάζεται grub-mkrescue

    Θα μπορούσε κάποιος να το εξηγήσει: σ

    1.    AdrianArroyoStreet dijo

      Απλώς για να δημιουργήσουμε ένα ελάχιστο ISO που μπορεί να φορτώσει το GRUB, αντιγράφουμε τον πυρήνα στο (το / του ISO, οποιονδήποτε φάκελο) /next/START.ELF και το αρχείο ρυθμίσεων GRUB στο (το / του ISO, οποιονδήποτε φάκελο) / εκκίνηση /grub/grub.cfg. Μόλις γίνει αυτό, δεν έχουμε εγκαταστήσει ακόμα το GRUB στο ISO και υπάρχει ένα βοηθητικό πρόγραμμα που δημιουργεί το ISO από ένα φάκελο και εγκαθιστά το GRUB που ονομάζεται grub-mkrescue. Τότε τελικά θα καταλήξαμε σε ένα bootable ISO που έχει εγκατεστημένο το GRUB, το οποίο μπορεί να διαβάσει τη διαμόρφωση για να εκτελέσει αργότερα σωστά το START.ELF. Δεν ξέρω αν έχω εξηγήσει τον εαυτό μου, αλλά αυτό που κάνουμε είναι ένα είδος συστήματος ψευδών αρχείων με το οποίο δημιουργούμε ένα ISO.

  36.   Μιγκέλ Χοσέ Γκεβάρα ατένσιο dijo

    Καταπληκτική

  37.   Μιχαήλ Μορένο dijo

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

    Το άλλο πράγμα είναι ότι δεν είμαι ειδικός στον προγραμματισμό, μόνο μερικά τυροκομικά c ++ και κάποια java, θα ήταν αρκετό για μένα να δώσω στο πρόγραμμα linux kernel ένα module, να το κόβω, να το τροποποιήσω κ.λπ.

  38.   Χειμώνας στρατιώτης53 dijo

    Χωρίς αμφιβολία πρέπει να κάνω ήδη διακοπές.

  39.   Φερμίν dijo

    Αυτό είναι καλό και σε ποιο πρόγραμμα το σχεδιάζει και κωδικοποιεί;
    παρακαλώ δώσε μου την απάντηση

  40.   Darkmind dijo

    Κατά τη σύνταξη από το git σας παίρνω:

    [jmponce @ jar build] $ cmake ..
    - Δημιουργία καταλόγου NextRoot
    - Δημιουργία σεναρίου ISO
    make DESTDIR = επόμενη εγκατάσταση
    ./iso.sh
    - Βρέθηκε Doxygen: / usr / bin / doxygen (found version "1.8.9")
    - Η διαμόρφωση ολοκληρώθηκε
    - Η παραγωγή ολοκληρώθηκε
    - Τα αρχεία build έχουν γραφτεί στο: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Εξαρτήσεις σάρωσης του στόχου START.ELF
    [7%] Δημιουργία αντικειμένου ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Δημιουργία αντικειμένου CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Σύνδεση του CXX με δυνατότητα εκτέλεσης START.ELF
    / usr / bin / ld: Μη συμβατό /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a παραλείπεται κατά την αναζήτηση -lgcc
    / usr / bin / ld: δεν μπορώ να βρω -lgcc
    collect2: error: ld επέστρεψε κατάσταση εξόδου 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Αποτυχημένες οδηγίες για το στόχο 'src / START.ELF'
    make [2]: *** [src / START.ELF] Σφάλμα 1
    CMakeFiles / Makefile2: 106: Αποτυχία στις οδηγίες για τον στόχο 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Σφάλμα 2
    Makefile: 117: Αποτυχία οδηγιών για το στόχο «όλα»
    make: *** [all] Σφάλμα 2

    1.    AdrianArroyoStreet dijo

      Το σφάλμα φαίνεται να είναι ότι δεν μπορεί να βρει το llibgcc αφού έχετε την έκδοση 64-bit και προς το παρόν το σύστημα μεταγλώττισης αναγκάζεται να χρησιμοποιήσει 32-bit. Πρέπει να εγκαταστήσετε ένα πακέτο συμβατότητας στη διανομή σας ή καλύτερα, να χρησιμοποιήσετε ένα σύστημα 32-bit.

      1.    Ρονάλντο Ροντρίγκεζ dijo

        Έχω 32 bit και έχω το ίδιο σφάλμα, εννοείτε το λειτουργικό σύστημα ή την αρχιτεκτονική; το δικό μου είναι 64 Bit, αλλά χρησιμοποιώ το Ubuntu 32 bit, μην ρωτάτε, οικονομικά προβλήματα, με αυτό το λέω όλα.

  41.   Jorge dijo

    Εξαιρετικό θέμα, περιμένοντας μεγαλύτερη εμβέλεια. Στην υγειά σας

  42.   Jhon dijo

    Τέλεια ελπίζω για περισσότερα

  43.   Soid perez dijo

    Γεια σας, είμαι νέος πρεσβευτής που θέλει να δημιουργήσει ένα λειτουργικό σύστημα που υποστηρίζει όλα τα προγράμματα και τις πλατφόρμες, έτσι ώστε οι προγραμματιστές να μην χρειάζεται να διαθέτουν ισχυρά μηχανήματα ή εφαρμογές ή προγράμματα σε υπολογιστή.
    γι 'αυτό με ενδιαφέρει αυτή η ανάρτηση, αλλά όταν κατεβάζω το git σας ή προσπαθώ να το δημιουργήσω, όλα πάνε καλά μέχρι να εκτελέσω την εντολή ./iso.sh ή grub-mkrescue -o nextdivel.iso nextroot θα λάβετε αυτό το σφάλμα

    "Grub-mkrescue: προειδοποίηση: Το xorriso σας δεν υποστηρίζει" –grub2-boot-info ". Ορισμένες λειτουργίες έχουν απενεργοποιηθεί. Χρησιμοποιήστε το xorriso 1.2.9 ή μεταγενέστερη έκδοση ..
    grub-mkrescue: προειδοποίηση: Το xorriso σας δεν υποστηρίζει "–grub2-boot-info". Η εικόνα του πυρήνα σας είναι πολύ μεγάλη. Η εκκίνηση του δίσκου έχει απενεργοποιηθεί. Χρησιμοποιήστε το xorriso 1.2.9 ή μεταγενέστερη έκδοση .. »
    Πραγματικά δεν έχω ιδέα αφού γνωρίζω πολλά για εφαρμογές και ιστούς, αλλά δεν ξέρω τίποτα για το grub

    1.    AdrianArroyoStreet dijo

      Ίσως χρειαστεί να ενημερώσετε το πρόγραμμα xorriso στη διανομή σας. Τι διανομή και έκδοση χρησιμοποιείτε;

      1.    Soid perez dijo

        Χρησιμοποιώ το xubuntu 14.04lts και προσπαθώ να εκτελέσω το xorriso, αλλά το κέλυφος μου λέει ότι δεν μπορεί να το βρει και παίρνω apt-get εγκατάσταση xorriso αν και περίμενα ειλικρινά κάποια απάντηση, επειδή είχα μια κακή εμπειρία στην εγκατάσταση πραγμάτων που δεν γνωρίζω στο linux hehe. Θα το ενημερώσω τώρα και θα σας πω τι συνέβη

      2.    AdrianArroyoStreet dijo

        Στη συνέχεια, εγκαταστήστε το xorriso από το κέντρο λογισμικού ή απλώς από το τερματικό "sudo apt-get install xorriso"

      3.    Soid perez dijo

        Έχω ήδη κάνει ό, τι μου είπες και με το git και το δικό μου, παίρνω αυτό το xorriso 1.3.2: RockRidge χειριστής συστημάτων αρχείων, έργο libburnia.

        Ρεύμα οδήγησης: -outdev 'stdio: nextdivel.iso'
        Ρεύμα πολυμέσων: stdio file, overwriteable
        Κατάσταση πολυμέσων: είναι κενό
        Σύνοψη μέσων: 0 συνεδρίες, 0 μπλοκ δεδομένων, 0 δεδομένα, 1901m δωρεάν
        Προστέθηκε στην εικόνα ISO: κατάλογος '/'='/tmp/grub.OEqSzV'
        xorriso: ΕΝΗΜΕΡΩΣΗ: Προστέθηκαν 546 αρχεία σε 1 δευτερόλεπτο
        xorriso: FAILURE: Δεν είναι δυνατός ο προσδιορισμός των χαρακτηριστικών του αρχείου προέλευσης '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
        xorriso: ΕΝΗΜΕΡΩΣΗ: Προστέθηκαν 546 αρχεία σε 1 δευτερόλεπτο
        xorriso: ματαίωση: -abort_on 'FAILURE' αντιμετώπισε 'FAILURE'
        Και το κοτλέ μου δεν καταλαβαίνω ότι η δομή μου είναι /nextroot/boot/grub/grub.cfg και nextroot / next / START.ELF

      4.    Soid perez dijo

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

      5.    Erik dijo

        Με συγχωρείτε, μπορείτε να μου πείτε ποια διαδικασία εκτελέσατε αφού δεν έχω το σφάλμα να εκκινήσω: κανένα τέτοιο αρχείο ή κατάλογο

        καμία εκκινήσιμη συσκευή.

  44.   jose dijo

    Στην υγειά σας! Θα σας ζητούσα την εύνοια αν μπορούσατε να μου στείλετε ένα email με αυτό που εξηγείτε εδώ, έχω μπερδευτεί λίγο και πρέπει να συγκρίνω αυτό που έχω με αυτό που εξηγείτε, ίσως αυτό που δεν είναι σαφές για μένα είναι αν η δημιουργία του grub. cfg γίνεται στο τερματικό gcc ή πού ακριβώς; σε ευχαριστώ πολύ φίλε!

    1.    AdrianArroyoStreet dijo

      Δημιουργείτε το αρχείο grub.cfg με οποιονδήποτε επεξεργαστή κειμένου και πρέπει να το αποθηκεύσετε στο PROJECT_FOLDER / boot / grub / grub.cfg

  45.   Τζουαζάνο dijo

    Γεια σας Adrian, πρώτα απ 'όλα, σας συγχαίρω και σας ευχαριστώ για τη συμβολή σας.

    Ξέρετε ότι το κάνω αυτό για μια εξάσκηση και άρχισα να το συνδυάζω μετά την καθοδήγησή σας, αλλά μετά την έναρξη βρήκα το πρώτο σφάλμα

    $ as -o πυρήνα.o -c πυρήνας.asm
    bash: as: η εντολή δεν βρέθηκε ...
    Παρόμοιες εντολές είναι:
    'ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ'
    'μετα Χριστον'

    Δουλεύω στο fedora 20, και δεν μπορώ να βρω λύση σε αυτό το θέμα, θα εκτιμούσα την καθοδήγησή σας σχετικά με το αν πρέπει να αλλάξω κάτι σε gcc ή αέριο

    ευχαριστώ εκ των προτέρων

    1.    AdrianArroyoStreet dijo

      Πρέπει να εγκαταστήσετε το GAS για να μπορώ να δω τον κωδικό σφάλματος. Δεν έχω στη διάθεσή μου το Fedora, αλλά θεωρητικά, αν εγκαταστήσεις το gcc-c ++, θα εγκαταστήσεις ολόκληρη τη σουίτα GCC και το GNU.

  46.   Γκάστον Ράμιρες dijo

    Είμαι μαζί σας, ξέρω κάτι για το C ++, το C # (αν και αυτό το τελευταίο δεν είναι πολύ χρήσιμο σε αυτό το θέμα) το κακό είναι ότι ακόμα δεν έχω εμπειρία, δεν χειρίζομαι ποτέ τη γλώσσα C, η δημοσίευσή σας είναι υπέροχη, δεν έχω πολλά να πω, αν έχω χρόνο, βλέπω. Ευχαριστώ.

  47.   Teresita of Jesus Nah Sanchez dijo

    Σας ευχαριστώ πολύ για τη μεγάλη βοήθεια….

  48.   jky dijo

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

  49.   Rode dijo

    Γεια σας, έχω ένα σφάλμα στο grub λέει
    σφάλμα: αρχείο /next/START.ELF Δεν βρέθηκε
    σφάλμα: πρέπει πρώτα να φορτώσετε τον πυρήνα

    Θα μπορούσες να με βοηθήσεις και να κάνω googled αλλά δεν μπορώ να βρω

  50.   Έρικ Άβιλα dijo

    Σε παρακαλώ, πώς μπορώ να το δείξω το μήνυμα HELLO WORLD; Είμαι αρχάριος και ακόμα δεν ξέρω αρκετά

  51.   ΚΑΡΛΟΣ ΓΚΕΡΕΡΟ ΑΛΒΑΡΕΖ dijo

    Τα ακόλουθα συμβαίνουν σε μένα:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: μετεγκατάσταση R_X86_64_32 ενάντια στο σύμβολο "stack" δεν μπορεί να χρησιμοποιηθεί κατά τη δημιουργία ενός αντικειμένου PIE. μεταγλώττιση με -fPIE
    / usr / bin / ld: απέτυχε ο τελικός σύνδεσμος: μη αντιπροσωπεύσιμη ενότητα στην έξοδο
    collect2: error: ld επέστρεψε 1 κατάσταση εξόδου