155 γραμμές
15 KiB
Markdown
155 γραμμές
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/).
|
||
|