156 γραμμές
15 KiB
Markdown
156 γραμμές
15 KiB
Markdown
|
+++
|
|||
|
title = 'KERNEL COMPILE'
|
|||
|
date = '1999-02-01T00:00:00Z'
|
|||
|
description = ''
|
|||
|
author = 'Γεωργάτος Φώτης < gef@hellug.gr(mailto:gef@hellug.gr?subject=Kernel-compile)>'
|
|||
|
issue = ['Magaz 12']
|
|||
|
issue_weight = 5
|
|||
|
+++
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
*Με την άφιξη της νέας γενιάς πυρήνων 2.2.0, οι απορίες και τα προβλήματα σχετικά με τον πυρήνα του Linux πληθαίνουν. Ας δούμε μερικές βασικές γνώσεις που
|
|||
|
πρέπει να έχει κανείς για να στήσει έναν νέο πυρήνα στο σύστημά του.*
|
|||
|
|
|||
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
Στο Linux τον πυρήνα μπορεί κανείς να τον φτιάξει ο ίδιος, με μια διαδικασία που λέγεται compile. Αν και είναι δυνατόν να δουλέψει καποιος με έναν έτοιμο, είναι
|
|||
|
καλή ιδέα να φτιάξει έναν πυρήνα προσαρμοσμένο στο σύστημά του, ιδιαίτερα εάν θέλει εξειδικευμένες δυνατότητες. Η διαδικασία συνιστάται ιδιαίτερα σε αυτούς που
|
|||
|
θέλουν να μπλέξουν με τα ενδότερα του λειτουργικού συστήματος.
|
|||
|
|
|||
|
Υποθέτουμε ότι έχετε κάποιες στοιχειώδεις γνώσεις γύρω από τα λειτουργικά συστήματα και το Internet. Εάν όχι δείτε αυτό:
|
|||
|
[Unix-Internet-Fundamentals-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Unix-Internet-Fundamentals-HOWTO.html).
|
|||
|
|
|||
|
**1. Τι είναι ο πυρήνας;**
|
|||
|
---------------------------------------------------
|
|||
|
|
|||
|
**2. Πώς τον εγκαθιστώ στο σύστημά μου;**
|
|||
|
------------------------------------------------------------------
|
|||
|
|
|||
|
- [2.1 Βάλετε τον πυρήνα σε source μορφή στον δίσκο σας](#ss2.1)
|
|||
|
- [2.2 Επιλέξτε τι θέλετε να περιλαμβάνει](#ss2.2)
|
|||
|
- [2.3 Κάνετε την μεταγλώττισή του πυρήνα](#ss2.3)
|
|||
|
- [2.4 Εγκαταστήστε τον και ενημερώστε το Lilo](#ss2.4)
|
|||
|
- [2.5 Κάνετε reboot για να δείτε την διαφορά :-)](#ss2.5)
|
|||
|
|
|||
|
**3. Που αλλού θα βρείτε πληροφορίες**
|
|||
|
---------------------------------------------------------------
|
|||
|
|
|||
|
**4. Τι είναι το SIG11**
|
|||
|
-------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
### [1. Τι είναι ο πυρήνας;]{#s1}
|
|||
|
|
|||
|
Σε ένα πολυεπεξεργαστικό (multitasking) λειτουργικό σύστημα, υπάρχει ένα σημαντικό τμήμα κώδικα που λέγεται πυρήνας (kernel) και αναλαμβάνει την διανομή της
|
|||
|
μνήμης μεταξύ των εφαρμογών (memory management) & την διανομή του χρόνου μεταξύ των διεργασιών (scheduling). Προαιρετικά μπορεί να περιλαμβάνει οδηγούς συσκευών
|
|||
|
(device drivers) για δίσκους, κάρτες δικτύου, σειριακές θύρες κλπ, τα διάφορα πρωτόκολλα επικοινωνίας, υποστήριξη filesystems και λοιπό κώδικα για την
|
|||
|
διαχείρησή τους.
|
|||
|
|
|||
|
Ο πυρήνας στο Linux είναι το σημαντικότερο χαρακτηριστικό του, καθώς εκτός από το λειτουργικό σύστημα περιλαμβάνει και τους οδηγούς συσκευών (device drivers)
|
|||
|
και πλήθος υλοποιήσεις πρωτοκόλλων και συστημάτων αρχείων. Αποτελείται από 700.000 γραμμές κώδικα C, γραμμένες από πολλούς προγραμματιστές και συντηρούμενες απο
|
|||
|
μια ομάδα περίπου 200 μελών με επίβλεψη του Linus Torvalds, ο οποίος ξεκίνησε τον πυρήνα το 1991, καθώς και του Alan Cox.
|
|||
|
|
|||
|
Κάθε πυρήνας ακολουθεί ένα ιδιότυπο σύστημα αρίθμησης του τύπου **x.y.z**, όπου x είναι η γενιά του (είμαστε στην 2, κάθε γενιά θέλει χρόνια για να αλλάξει), y
|
|||
|
ο τύπος του και z η έκδοσή του. Ειδικά το y παίζει ένα πολύ σημαντικό ρόλο: δείχνει εάν είναι άρτιος πχ 2.0.z ότι ο πυρήνας είναι σταθερός, ή εάν είναι περιττός
|
|||
|
πχ 2.1.z ότι είναι πειραματικός (όχι απαραίτητα και ασταθής βέβαια). Θα ανακαλύψετε γρήγορα ότι οι \"ασταθείς\" πυρήνες του Linux είναι κατά κανόνα πιο σταθεροί
|
|||
|
από άλλα γνωστά λειτουργικά συστήματα, παρ\' όλα αυτά χρησιμοποιείστε τους με σύνεση.
|
|||
|
|
|||
|
Αυτή την στιγμή είμαστε στον σταθερό πυρήνα 2.0.36 και στον πειραματικό 2.1.132. Από τον 2.1.132 προέκυψαν οι 2.2.0pre1-4, δηλαδή είμαστε λίγο καιρό πριν τον
|
|||
|
2.2.0. Από τον 2.2.0 θα προκύψουν πάλι δύο κλάδοι: ο 2.2.z και ο 2.3.0 με τις γνωστές ιδιότητες.
|
|||
|
|
|||
|
**ΤΕΛΕΥΤΑΙΑ ΝΕΑ: Βγήκε ήδη ο πυρήνας 2.2.0, 2.2.1 καθώς και ο 2.3.0.** Όσοι τον αλλάξετε, να έχετε υπ\' όψιν σας ότι υπάρχουν κάποιες λειτουργικές διαφορές με
|
|||
|
την προηγούμενη ομάδα 2.0.χ, και κάποια πράγματα δεν δουλεύουν όπως πριν. Τα ελληνικά πχ (greekconsole), έχουν πρόβλημα.
|
|||
|
|
|||
|
Ένα σημαντικό χαρακτηριστικό του είναι τα modules, δηλαδή τμήματα του πυρήνα δεν περιλαμβάνονται στον βασικό τμήμα του (δεν είναι statically compiled όπως
|
|||
|
λέμε), αλλά φορτώνονται κατά απαίτηση - on demand, από ένα ειδικό process τον kerneld. Δηλαδή εάν πχ κάνετε mount το cdrom και υπάρξει ανάγκη για το iso9660
|
|||
|
filesystem που είναι module, αυτόματα ο kerneld το φορτώνει, τρέξτε lsmod για να το δείτε.
|
|||
|
|
|||
|
Ο πυρήνας είναι προστατευμένος από ανεξέλεγκτη αντιγραφή χάρις στην άδεια GPL. Η άδεια General Public License συνοπτικά, επιτρέπει την διάδοση του κώδικα είτε
|
|||
|
σε source είτε σε compiled μορφή, επιβάλει όμως την ίδια νομική άδεια χωρίς περιορισμούς και στα αντίγραφα, κάτι το οποίο έχει παίξει σοβαρό ρόλο στην διάδοση
|
|||
|
του Linux.
|
|||
|
|
|||
|
|
|||
|
### [2. Πώς τον εγκαθιστώ στο σύστημά μου;]{#s2}
|
|||
|
|
|||
|
### [2.1 Βάλετε τον πυρήνα σε source μορφή στον δίσκο σας]{#ss2.1}
|
|||
|
|
|||
|
Βρείτε καταρχήν τον πυρήνα που σας ενδιαφέρει σε rpm, tar.gz, ή bz2 (αυτό είναι καινούριο format, όχι ιδιαίτερα διαδεδομένο), πρέπει να έχει μέγεθος γύρω στα
|
|||
|
10MB-15MB. Τον τελευταίο πυρήνα μπορεί κανείς να προμηθευτεί από το [www.kernel.org](http://www.kernel.org) και τα mirror sites του, στην περίπτωσή μας το
|
|||
|
[ftp.gr.kernel.org](ftp://ftp.gr.kernel.org/pub/linux/kernel/)
|
|||
|
|
|||
|
Για να μαθαίνετε ποιός είναι ο τελευταίος πυρήνας μπορείτε να ελέγχετε τακτικά το [www.linuxhq.com](http://www.linuxhq.com), το
|
|||
|
[slashdot.org](http://slashdot.org) ή το [freshmeat.net](http://freshmeat.net).
|
|||
|
|
|||
|
Ενδεχομένως, έχετε ήδη έναν πυρήνα πρόσφατο στα CD της διανομής που αγοράσατε. Εγκαταστήστε τον (θα βρίσκεται στον υποκατάλογο /usr/src/linux), πιάνει περίπου
|
|||
|
30MB αποσυμπιεσμένος.
|
|||
|
|
|||
|
### [2.2 Επιλέξτε τι θέλετε να περιλαμβάνει]{#ss2.2}
|
|||
|
|
|||
|
Τρέξτε **make config** ή **make menuconfig** ή **make xconfig**, από τερματικό, κονσόλα ή Xwindows αντίστοιχα. Οι πιο πολλοί θα προτιμήσουν από κονσόλα το
|
|||
|
menuconfig. Μπορείτε να διαλέξετε τον κώδικα θέλετε να υπάρχει στον πυρήνα σας, με τα πλήκτρα Y, N, Module, Help, δηλαδή να περιληφθεί, να μην, να γίνει module
|
|||
|
(θα φορτώνεται δυναμικά, την στιγμή ακριβώς που χρειάζεται), και βοήθεια σχετικά με κάποια επιλογή.
|
|||
|
|
|||
|
Συνήθως περιττές επιλογές δεν δημιουργούν προβλήματα, απλά ο πυρήνας είναι μεγαλύτερος και βγάζει πρόσθετα μυνήματα στην εκκίνηση. Μερικά πράγματα
|
|||
|
περιλαμβάνονται υποχρεωτικά στατικά, πχ scsi, scsi disk support σε σύστημα με scsi bootable δίσκο (αλλιώς, θα φορτωθεί μεν ο πυρήνας, αλλά δεν θα μπορεί να
|
|||
|
διαβάσει το filsystem και τα υπόλοιπα που χρειάζονται στην εκκίνηση). Επίσης το filesystem ext2 είναι πάντα Y, ή εάν ξέρετε γιατί το βγάζετε, άδικα διαβάζετε
|
|||
|
αυτό το κείμενο. Εάν είναι η πρώτη φορά που φτιάχνετε πυρήνα, κάντε τις κάρτες ήχου modules ή αποφύγετε τις εντελώς, γιατί οι ιδιοτροπίες τους (irq, addresses,
|
|||
|
dma) και το γεγονός ότι κάποιες είναι plug-n-play, κάνουν την κατάσταση πολύπλοκη.
|
|||
|
|
|||
|
### [2.3 Κάνετε την μεταγλώττισή του πυρήνα]{#ss2.3}
|
|||
|
|
|||
|
cd /usr/src/linux # Τρέξτε du για να δείτε πόσο χώρο πιάνει.
|
|||
|
make config # ή make menuconfig ή make xconfig, έχει πολύ χρήσιμο help!
|
|||
|
make dep # αυτό είναι απαραίτητο κάθε φορά που τρέχετε make config
|
|||
|
make clean # Σβήνει τυχόν προηγούμενα compiles, υποχρεώνει το πλήρες compile
|
|||
|
make zImage # μετά από αυτό, υπάρχει ο πυρήνας στο /usr/src/linux/arch/i386/boot/zImage
|
|||
|
make modules # Τα modules κανονικά φτιάχνονται πριν αρχίσει η διαδικασία εγκατάστασης
|
|||
|
|
|||
|
### [2.4 Εγκαταστήστε τον και ενημερώστε το Lilo]{#ss2.4}
|
|||
|
|
|||
|
make modules_install # Τα modules αντιγράφονται στο /lib/modules/x.y.z/
|
|||
|
make install # προσοχή να υπάρχουν οι σωστές ρυθμίσεις στο /etc/lilo.conf
|
|||
|
|
|||
|
Η τελευταία εντολή είναι αυτή που θα στήσει τον πυρήνα (συνήθως στο /vmlinuz), συνδέοντάς τον με τον boot loader LILO. Ένα reboot, θα βάλει τον νέο πυρήνα σε
|
|||
|
χρήση\... (μόλις βρήκατε τον μοναδικό λόγο που κάνει κανείς reboot με linux).
|
|||
|
|
|||
|
Πρέπει το αρχείο **/etc/lilo.conf**, να περιλαμβάνει την εντολή **image=/vmlinuz**, εάν τρέξετε την εντολή make install Επίσης, εάν κάνετε πρώτη φορά την
|
|||
|
ρύθμιση αυτή, να έχετε την εντολή install=/dev/fd0 στο /etc/lilo.conf.
|
|||
|
|
|||
|
### [2.5 Κάνετε reboot για να δείτε την διαφορά :-)]{#ss2.5}
|
|||
|
|
|||
|
Γενικά, θα πρέπει να είναι και η μοναδική φορά που κάνετε reboot στο σύστημά σας όταν τρέχετε Linux.
|
|||
|
|
|||
|
Αλλιώς μάλλον κάτι δεν πάει ή δεν κάνετε καλά: Έχετε αξιόπιστο hardware; Ή μήπως κάνετε reboot ενώ θα μπορείτε να το αποφύγετε; Πολλοί κάνουν reboot πχ μόνο και
|
|||
|
μόνο για αλλαγές στο υποσύστημα δικτύου. Δεν είναι απαραίτητο: απλά μπείτε σε Single User mode (συνήθως init S) και ξαναβγείτε (συνήθως init 2).
|
|||
|
|
|||
|
|
|||
|
### [3. Που αλλού θα βρείτε πληροφορίες]{#s3}
|
|||
|
|
|||
|
Υπάρχουν αρκετά σχετικά HOWTO στο Linux Documentation Project:
|
|||
|
|
|||
|
- [Kernel-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html)
|
|||
|
- [Kerneld-mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/Kerneld.html)
|
|||
|
- [Modules-mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/Modules.html)
|
|||
|
|
|||
|
Επίσης, αυτά μπορεί να είναι χρήσιμα
|
|||
|
|
|||
|
- [Hardware-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Hardware-HOWTO.html): overview of supported hardware
|
|||
|
- [Sound-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Sound-HOWTO.html): sound cards and utilities
|
|||
|
- [PCMCIA-HOWTO](http://metalab.unc.edu/LDP/HOWTO/PCMCIA-HOWTO.html): about the drivers for your notebook
|
|||
|
- [NET-3-HOWTO](http://metalab.unc.edu/LDP/HOWTO/NET-3-HOWTO.html): networking
|
|||
|
- [PPP-HOWTO](http://metalab.unc.edu/LDP/HOWTO/PPP-HOWTO.html): PPP networking in particular
|
|||
|
- [ELF-HOWTO](http://metalab.unc.edu/LDP/HOWTO/ELF-HOWTO.html): ELF: what it is, converting..
|
|||
|
- [BogoMips mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/BogoMips.html): in case you were wondering
|
|||
|
|
|||
|
|
|||
|
### [4. Τι είναι το SIG11]{#s4}
|
|||
|
|
|||
|
Το SIG11 (ή SIG13) είναι ουσιαστικά ένα σφάλμα προστασίας (Protection Fault). Είναι αρκετά πιθανό να συμβεί την ώρα που φτιάχνουμε πυρήνα και η αιτία είναι ότι
|
|||
|
το σύστημα εκείνη την ώρα ζορίζεται.
|
|||
|
|
|||
|
**ΔΗΛΑΔΗ: Πολλά και διαφορετικά SIG11 σημαίνουν κακό υλικό ή προβλήματα συμβατότητας με την μνήμη, τον επεξεργαστή, την μητρική.**
|
|||
|
|
|||
|
Για περισσότερες πληροφορίες, δείτε: [http://www.bitwizard.nl/sig11](http://www.bitwizard.nl/sig11/).
|
|||
|
|