kern.sched.quantum;Καθόλου! Δείτε τη σχετική ενότητα στο Εγχειρίδιο.
Σημείωση: Ο νέος πυρήνας (kernel) θα εγκατασταθεί στον κατάλογο /boot/kernel μαζί με τα αρθρώματα του, ενώ ο παλιός πυρήνας και τα αρθρώματα του θα μεταφερθούν στον κατάλογο /boot/kernel.old. Αν κάνετε κάποιο λάθος στις ρυθμίσεις καθώς φτιάχνετε τον προσαρμοσμένο πυρήνα σας, έχετε πάντα τη δυνατότητα να εκκινήσετε με την προηγούμενη έκδοση.
8.2. Η μεταγλώττιση του πυρήνα μου αποτυγχάνει επειδή απουσιάζει το _hw_float. Πως μπορώ να λύσω αυτό το πρόβλημα;
Το πιο πιθανό είναι ότι αφαιρέσατε τη συσκευή npx0 (δείτε το npx(4)) από το αρχείο ρύθμισης του πυρήνα σας επειδή δεν έχετε μαθηματικό συνεπεξεργαστή. Η ύπαρξη της συσκευής npx0 είναι υποχρεωτική. Κάπου μέσα στο υλικό του υπολογιστή σας υπάρχει μια συσκευή που παρέχει υποστήριξη για πράξεις κινητής υποδιαστολής, ακόμα και αν δεν είναι χωριστό ολοκληρωμένο κύκλωμα όπως στις παλιές καλές μέρες του 386. Θα πρέπει οπωσδήποτε να συμπεριλάβετε τη συσκευή npx0. Ακόμα και αν καταφέρετε να δημιουργήσετε πυρήνα χωρίς αυτήν, δεν πρόκειται να κάνει εκκίνησης ούτως ή άλλως.
Το πλέον πιθανό είναι ότι μεταγλωττίσατε τον πυρήνα σας με debug mode. Οι πυρήνες με debug mode περιέχουν σύμβολα που χρησιμοποιούνται στην εκσφαλμάτωση και τα οποία αυξάνουν αρκετά το μέγεθος τους. Σημειώστε ότι δεν υπάρχουν πρακτικές επιπτώσεις στην απόδοση όταν χρησιμοποιείτε debug πυρήνα και είναι χρήσιμος σε περίπτωση κατάρρευσης του συστήματος (kernel panic).
Αν ωστόσο δεν έχετε αρκετό χώρο στο δίσκο ή απλώς δεν θέλετε να εκτελείτε πυρήνα debug, εξασφαλίστε ότι ισχύουν και οι δύο παρακάτω προυποθέσεις:
Δεν υπάρχει γραμμή στο αρχείο ρυθμίσεων του πυρήνα σας που να γράφει:
makeoptions DEBUG=-g
Δεν εκτελείτε το config(8) με την επιλογή
-g.
Οποιαδήποτε από τις παραπάνω ρυθμίσεις θα οδηγήσει σε μεταγλώττιση πυρήνα με σύμβολα debug. Αν ακολουθήσετε τις παραπάνω οδηγίες, μπορείτε να δημιουργήσετε τον πυρήνα σας φυσιολογικά και θα διαπιστώσετε μεγάλη μείωση στο μέγεθος του. Οι περισσότερες πυρήνες καταλαμβάνουν από 1.5 MB ως 2 MB.
Όταν μεταγλωττίζω ένα πυρήνα που περιέχει κώδικα για πολλαπλές σειριακές θύρες, λαμβάνω το μήνυμα ότι η πρώτη θύρα ανιχνεύθηκε και οι υπόλοιπες παραλήφθηκαν λόγω σύγκρουσης intterupt. Πως μπορώ να διορθώσω αυτό το πρόβλημα;
Το πρόβλημα εδώ είναι ότι το FreeBSD έχει ενσωματωμένο κώδικα για να προφυλάσσει τον πυρήνα από προβλήμα που δημιουργούνται λόγω συγκρούσεων υλικού ή λογισμικού. Για να διορθώσετε το πρόβλημα θα πρέπει να παραλείψετε τη ρύθμιση του IRQ σε όλες τις θύρες εκτός από μία. Ένα παράδειγμα φαίνεται παρακάτω:
# # Multiport high-speed serial line - 16550 UARTS # device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
Υπάρχουν πολλές πιθανές αιτίες για αυτό το πρόβλημα. Τις αναφέρουμε παρακάτω, χωρίς κάποια συγκεκριμένη σειρά.
Δεν χρησιμοποιείτε τις εντολές make buildkernel και make installkernel και το δέντρο του πηγαίου σας κώδικα είναι διαφορετικό από αυτό που χρησιμοποιήθηκε για να μεταγλωττίσει το τρέχον σύστημα (για παράδειγμα, μεταγλωττίζετε το 9.0-RELEASE σε ένα 8.2-RELEASE system). Αν επιθυμείτε να προχωρήσετε σε αναβάθμιση του συστήματος σας, παρακαλούμε διαβάστε το /usr/src/UPDATING, δίνοντας ιδιαίτερη σημασία στην ενότητα «COMMON ITEMS» προς το τέλος του αρχείου.
Αν και χρησιμοποιείτε τις εντολές make buildkernel και make installkernel αλλά δεν ολοκληρώσατε την εκτέλεση της εντολής make buildworld. Η ορθή ολοκλήρωση της εντολής make buildkernel βασίζεται σε αρχεία που παράγονται από την make buildworld.
Ακόμα και αν προσπθαθείτε να μεταγλωττίσετε το FreeBSD-STABLE, είναι πιθανό να ανακτήσατε τον πηγαίο κώδικα τη χρονική στιγμή που ανανεώνονταν ή ήταν χαλασμένος για οποιοδήποτε άλλο λόγο. Δεν υπάρχει εγγύηση ότι κώδικας που δεν ανήκει σε επίσημη έκδοση (RELEASE) μπορεί να μεταγλωττιστεί ανά πάσα στιγμή, αν και τις περισσότερες φορές η μεταγλώττιση του FreeBSD-STABLE δεν παρουσιάζει προβλήματα. Αν δεν το έχετε κάνει ήδη, προσπαθήστε να ανακτήσετε ξανά το δέντρο πηγαίου κώδικα και δείτε αν αυτό λύνει το πρόβλημα. Προσπαθήστε να χρησιμοποιήσετε ένα διαφορετικό εξυπηρετητή αν αντιμετωπίζετε πρόβλημα με τον τρέχοντα.
8.6. Πως μπορώ να επιβεβαιώσω ποιος scheduler χρησιμοποιείται σε ένα σύστημα που βρίσκεται σε λειτουργία;
Ελέγξτε αν υπάρχει το sysctl kern.sched.quantum. Αν
υπάρχει θα δείτε κάτι σαν το παρακάτω:
% sysctl kern.sched.quantum kern.sched.quantum: 99960
Αν υπάρχει το kern.sched.quantum, χρησιμοποιείτε τον 4BSD
scheduler (sched_4bsd(4)). Αν δεν
υπάρχει, θα λάβετε μήνυμα λάθους από το sysctl(8) (το οποίο μπορείτε
με ασφάλεια να αγνοήσετε):
% sysctl kern.sched.quantum sysctl: unknown oid 'kern.sched.quantum'
Το όνομα του scheduler που βρίσκεται σε χρήση τη δεδομένη στιγμή, είναι άμεσα
διαθέσιμο ως τιμη του sysctl kern.sched.name:
% sysctl kern.sched.name kern.sched.name: 4BSD
Το kern.sched.quantum είναι ο μέγιστος αριθμός από ticks
που μπορεί να εκτελεστεί μια διεργασία πριν διακοπεί από μια άλλη. Το sysctl αυτό
χρησιμοποιείται μόνο από τον 4BSD scheduler, η παρουσία ή απουσία του μπορεί να
χρησιμοποιηθεί για να καθοριστεί ποιος scheduler είναι σε χρήση.
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.