THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Software => Topic started by: nmpampal on August 10, 2020, 23:38:42 pm



Title: Ξέρει κανείς να γράφει bootloaders για x86? Γιατί κόλλησα...
Post by: nmpampal on August 10, 2020, 23:38:42 pm
PS: Ποιος καθηγητής κάνει το μάθημα για operating systems?;Έρχομαι από άλλη σχολή για αυτό ρωτά, το πέρασα στην Κρήτη αυτό το μάθημα.
Θα με βοηθούσε αν του έστελνα ένα email η θα με γράψει στα τέτοια του;


Επειδή έχω ένα παλιό pc αυτήν την στιγμή και δυσκολεύεται πολύ όταν δουλεύεις με web apps και android
και έτσι κάθομαι και μαθαίνω πως να φτιάξω ένα os από το μηδέν.

Τώρα έχω κολλήσει σε μια έννοια που ονομάζεται segments initialization και πρέπει όταν φορτώνεται ο boot loader να
κάνω initialize τους registers ds, es, ss και τους registers bp και sp.

Ένας εύκολος τρόπος είναι να δηλώσεις το directive [org 0x7c00] για τον nasm assembler και να κάνεις   es, ss = 0 και στην συνέχεια να βάλεις τους bp = sp = με μια διεύθηνση που
είναι ελέυθερη. Στο github repo που θα σας δώσω παρακάτω, αυτό το κάνω στο master branch.

Ο δεύτερος τρόπος, είναι να βάλεις τον ds = 0x7c0 το οποίο νομίζω είναι αυτό που κάνει αυτόματα το directive του assembler nasm [org 0x7c00].

To θέμα είναι ότι όταν χρησιμοποιώ τoν δεύτερο τρόπο κάτι παθαίνει το stack μου και δεν δουλεύει τίποτα.

Εδω: babaliaris/bootloader (https://github.com/babaliaris/bootloader) μπορείτε να δείτε και να κάνετε clone. Ο κώδικας είναι πολύ μικρός.

Υπάρχουν 3 branches: master, noorg-50kb και noorg-50bytes
Στο  master χρησιμοποιώ τον πρώτο τρόπο για segment initialization, ενώ στα άλλα 2 τον δεύτερο.
Το 3ο branch είναι ακριβώς το ίδιο με το noorg-50kb , αλλά κάνει allocate στο stack λιγότερα bytes (50bytes αντί 50kb)

1) Το master δουλεύει μια χαρα και ως output θα πρέπει να δείτε: 0xabcd. Hello World! Disk Error!
2) To noorg-50kb δεν δουλεύει σωστά, εμφανίζει άκυρους χαρακτήρες που λογικά σημαίνει ότι κάτι δεν πάει καλά με το stack, γιατι οι print ρουτίνες μου χρησιμοποιούν το stack.
3) To noorg-50bytes δουλεύει, εμφανίζει το output όπως και στο master, με την διαφορά ότι έχω κάνει λιγότερο allocation στο stack.

Αλλά δεν μπορώ να βγάλω άκρη. Γιατι η μέθοδος 3) δουλεύει ενώ η 2) όχι;

Στην 1) όσο stack και να κάνω allocate, ακόμα και αν πέφτει πάνω στην μνήμη που είναι φορτωμένο το bios πάλι δουλεύει που με κάνει να κοπανάω το κεφάλι μου, εκτός και αν τυχαίνει να κάνω
override την μνήμη του bios που δεν χρησιμοποιώ. Χρησιμοποιώ μόνο τα interupts 0x10 (γράψε ένα χαρακτήρα στην οθόνη) και 0x13 για manipulation του hard drive.

Στο noorg-50kb θα δείτε κάτι περίεργο.


Title: Re: Ξέρει κανείς να γράφει bootloaders για x86? Γιατί κόλλησα...
Post by: koumanas on August 11, 2020, 19:23:06 pm
Νομίζω ο Καλογιάννης μπορεί να σε βοηθήσει. http://users.auth.gr/gkalogiannis/


Title: Re: Ξέρει κανείς να γράφει bootloaders για x86? Γιατί κόλλησα...
Post by: nmpampal on August 11, 2020, 23:36:15 pm
Νομίζω ο Καλογιάννης μπορεί να σε βοηθήσει. http://users.auth.gr/gkalogiannis/

Καθηγητής στην σχολή μας είνα;


Title: Re: Ξέρει κανείς να γράφει bootloaders για x86? Γιατί κόλλησα...
Post by: koumanas on November 01, 2020, 18:14:32 pm
Καθηγητής στην σχολή μας είνα;

Υπ. Διδ.


Title: Re: Ξέρει κανείς να γράφει bootloaders για x86? Γιατί κόλλησα...
Post by: Σοκοφρέτας on November 18, 2020, 03:51:00 am
μπες στο slack του μαθήματος "λειτουργικά συστήματα " και μίλα με όποιον θες (σε προσωπικό μήνυμα θα πρότεινα)
sent from mTHMMY (https://play.google.com/store/apps/details?id=gr.thmmy.mthmmy)