+++
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/).

