Customizing the Kernel tutorial - Welcome to the Dark Side

...το μέρος για να ξεκινήσετε!

Συντονιστής: adem1

Κανόνες Δ. Συζήτησης
Παρακαλώ να επιλέξετε, με προσοχή, την άδεια που θέλετε να έχουν οι οδηγοί που συγγράφετε.
Πληροφορίες για τις άδειες μπορείτε να βρείτε εδώ.
Άμα επιθυμείτε κάποια άλλη άδεια επικοινωνήστε με κάποιο Διαχειριστή είτε Συντονιστή.

Σημαντικό είναι να χρησιμοποιήσετε την υπηρεσία http://imagebin.ubuntu-gr.org για τις εικόνες.

Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό Nisok » 04 Μάιος 2009, 03:24

Spoiler: show
Ο οδηγός είναι λίγο παλιός, χρειάζεται ανανέωση. Παιδιά ... λίγη προσοχή!


Εισαγωγή
Σκοπός του οδηγού αυτού είναι η επεξεργασία του πυρήνα των linux, το οποίο είναι το πρώτο βήμα προς τη dark side των Linux. Δεν είναι απλή διαδικασία ούτε μπορεί να μπει απλά σε ένα οδηγό. Το πιο σημαντικό στην όλη υπόθεση είναι η προσωπική ενασχόληση, ενημέρωση και γενικά το μεράκι για τους υπολογιστές.
Απλές γνώσεις προγραμματισμού δεν είναι απαραίτητες αλλά είναι καλό να υπάρχουν γιατί δημιουργούν μια εξοικείωση με το τρόπο που δουλεύουν οι υπολογιστές. Υπάρχουν πολλοί οδηγοί, στο διαδίκτυο, που μπορείτε να χρησιμοποιήσετε, προτείνω script γιατί είναι η βάση των πάντων στα συστήματα UNIX και C γιατί μπορεί να θελήσετε να επέμβεται σε κάποιο module.
Σε αυτό τον οδηγό θα γίνει μια εισαγωγή στο τρόπο επεξεργασίας, ρύθμισης και εγκατάσταση κάποιου kernel. Υπάρχουν δεκάδες διαφορετικοί τρόποι να γίνουν όλα αυτά. Δεν είναι σκοπός μου να σας τους παρουσιάσω όλους, είτε τους καλύτερους αλλά να σας δείξω ότι μπορείτε να κάνετε κάποια πράγματα. Φυσικά και δεν θα γίνουν όλα τέλεια με την πρώτη αλλά είναι σημαντικό να ξεκινήσετε κάποια προσπάθεια.
Χρυσοί κανόνες

    1.Δεν θα κάνετε τίποτα ως superuser.
    2.Δεν θα κάνετε τίποτα ως superuser. Τίποτα!
    3.Δεν θα κάνετε τίποτα στο φάκελο /usr/src και ειδικά στο /usr/src/linux. Είναι οι φάκελοι στους οποίους βρίσκετε το τωρινό σας kernel. (Μαξιλαράκι)
    4.Γενικά καλό είναι να μάθετε στο PC της γιαγιά σας και μετά με το δικό σας.
    5.Αν η γιαγιά σας δεν έχει PC χαλάστε το PC του φίλου σας, αν είναι καλός θα σας συγχωρέσει...

Έλεγχοι και προαπαιτούμενα
Εαν ακολουθήσετε τα βήματα σε περίπτωση λάθους η διαδικασία μπορεί να είναι αναστρέψιμη. Ότι και να γίνει μην αντικαταστήσετε τον πυρήνα που σας προσφέρουν από το ubuntu γιατί πάντα θα είναι μια σίγουρη επιλογή σε περίπτωση που όλα πάνε στραβά.
Τι θα χρησιμοποιήσουμε:
    1.Σίγουρα χρειαζόμαστε ένα compiler. Αν δεν ξέρετε τι είναι αυτό απλά google it. Επειδή είναι απλά ένας οδηγός και όχι ο μαγικός κύβος Knorr με γεύση πιγκουίνου, το google θα είναι η μόνη παραπομπή. Υπάρχουν διάφοροι free αλλά ο καλυτερος είναι ο gcc. Σχεδόν σίγουρα τον έχετε ήδη αλλά για να είμαστε σίγουροι σε ένα τερματικό δώστε την εντολή:

    Κώδικας: Επιλογή όλων
    gcc -v


    Αν δεν τον έχετε η καλύτερη λύση είναι να εγκαταστήσετε το πακέτο build essentials. Το οποίο θα σας βάλει ένα πακέτο με καλούδια.
    2.Ένα linker τοποίο μπορείτε να βρείτε στο πακέτο binutils. Ο compiler κάνει τη μεταγλώττιση αλλά χρειάζονται και άλλα προγράμματα που κάνουν τo assembling των πηγαίων αρχείων. Δίνουμε στη κονσόλα:

    Κώδικας: Επιλογή όλων
    ld -v


    3.Make. Με απλά λόγια είναι ένα πρόγραμμα που ψάχνει μέσα σε φακέλους να βρεί αρχεία που πρέπει να γίνουν compile. Είναι από τα must εργαλεία οποιουδήποτε χρήστη linux. Πάλι

    Κώδικας: Επιλογή όλων
    make –-version

Αν και η έκδοση του kernel που τρέχετε δεν επηρεάζει γενικά τις εφαρμογές σας υπάρχει ένας μικρός αριθμός, σημαντικών, εφαρμογών που επηρεάζεται. Αν αναβαθμίσετε σε κάποια έκδοση ανώτερη από αυτή που έχετε ήδη πρέπει να ελέγξετε τη συμβατότητα και να τα αναβαθμίσετε αναλόγως.
    1.Util-Linux είναι ένα πακέτο με εφαρμογές που μπορούν να κάνουν ένα σωρό δουλειές. Τα τρέχετε από το πρωί μέχρι το βράδυ. Χωρίς να το ξέρετε. Ιδιαίτερα όταν μιλάτε για partitions. Για να δούμε την τρέχουσα έκδοση δίνουμε:

    Κώδικας: Επιλογή όλων
    fdformat –-version


    2.Module-Init-Tools. Τα modules είναι κομμάτια κώδικα που φορτώνεται στο kernel. Στο forum χάριν συμβατότητας τα λέμε drivers. Είναι αυτά που ψάχνουμε σαν τρελοί για να ενεργοποιήσουμε τα desktop effects και να χαρούμε.
    Για να κάνουμε μια διάκριση, οι drivers, ως έννοια υπάρχουν, απλά μπορούμε να τους έχουμε σε δύο μορφές. Είτε να φορτώνουν από default με τον kernel, built in ώστε να έχουμε γενικά την μέγιστη συμβατότητα, χαμηλώνοντας τις επιδόσεις του συστήματος. Είτε να είναι ως modules και να ενεργοποιούνται μόνο με παρουσία του συγκεκριμένου H/Y, αλλά μειώνοντας τις επιδόσεις με το συγκεκριμένο H/Y.
    Εδώ βλέπουμε και ένα από τους βασικότερους λόγους γιατί να κάνουμε recompile του πυρήνα. Γιατί το σύστημά μας είναι ένα και μοναδικό. Δεν τα χρειαζόμαστε όλα αυτά που μας δίνουν. Άρα γιατί να τα έχουμε?? Αλλά θα μιλήσουμε πιο αναλυτικά στο τελος.
    Για να δείτε την έκδοση των init-tools γράφετε:

    Κώδικας: Επιλογή όλων
    depmod -V


    3.Εργαλεία που έχουν να κάνουν με το filesystem. Υποθέτω ότι έχετε ext3 είτε ext4 άρα δεν θα έχετε κανένα πρόβλημα. Κάνουμε skip προς το παρόν αλλά θα επανέλθουμε με άλλο οδηγό.
    4.Udev. Είναι ένα πρόγραμμα που επιτρέπει στο linux να ελέγχουν το φάκελο /dev στον οποίο καταγράφονται όλες οι συσκευές του συστήματος. Είναι ένα απαραίτητο εργαλείο για την εκκίνηση του συστήματος. Μια πολύ καλή συμβουλή είναι να χρησιμοποιήσετε την έκδοση του udev που έρχετε με το distro σας καθώς μπορεί να επηρεάσει πάρα πολλές λειτουργίες. Για να δείτε την έκδοση που έχετε:

    Κώδικας: Επιλογή όλων
    udevd -v


    Στο Jaunty τρέχω την έκδοση 141, και στην ιστοσελίδα του λέει ότι είναι συμβατό με τους περισσότερους kernels 2.6. Άρα λογικά δεν θα έχετε πρόβλημα για πολύ καιρό ακόμα.
    5.Process tools. Είναι ένα πακέτο που περιέχει τις γνωστές εντολές ps και top. Όπως και άλλες χρήσιμες εντολές για το monitoring του συστήματος.

    Κώδικας: Επιλογή όλων
    ps --version


    6.PCMCIA tools. Είναι ένα πακέτο για να μπορείτε να χρησιμοποιήσετε συσκευές PCMCIA. Η εντολή είναι

    Κώδικας: Επιλογή όλων
    pccardctl -V

Κλείνοντας αυτό το μέρος να σας πω ότι πρέπει να ελέγξετε κάθε ένα από τα παραπάνω και να ΜΗΝ αφήσετε τα πράγματα στη τύχη.

Επιλογή πυρήνα
Όταν φτιάχνετε το δικό σας πυρήνα, θα θέλετε να έχετε την τελευταία πιο σταθερή έκδοση. στο ubuntu μας δίνουν μια πολύ κοντά στη τελευταία αλλά δεν είναι η τελευταία. Και θα μου πείτε αυτό είναι κακό. -Όχι δεν είναι, είναι η απάντηση. Αλλά βρίσκεστε εδώ γιατί κάτι σας έτρωγε όταν ήσασταν αλλού. Θέλατε παραπάνω. Εδώ θα βρείτε το παραπάνω! Και δεν εννοώ μόνο επιδόσεις. Αλλά κυρίως γνώσεις. Θα δείτε πως δουλεύει το PC σας. Τι γίνεται κάτω από τραπέζι. Για αυτό προσδεθείτε και ετοιμαστείτε να διαβάσατε μερικές σελίδες ακόμα....
Στο παράδειγμά μας θα χρησιμοποιήσουμε το kernel 2.6.30.5 από το http://www.kernel.org. Στην ιστοσελίδα για το κατεβάσουμε θα πατήσουμε στο γράμμα F δίπλα από το πυρήνα. Το τι συμβαίνει στην ιστοσελίδα αυτή και πως θα το καταλάβουμε θα μας απασχολήσει σε άλλο οδηγό. Για να δείτε τη έκδοση που τρέχει αυτή τη στιγμή το σύστημά σας δώστε την εντολή:

Κώδικας: Επιλογή όλων
uname -r


Το πηγαίο κώδικα που κατεβάσαμε καλό είναι να το βάλουμε στο
Κώδικας: Επιλογή όλων
~/linux
. Δεν είναι κανόνας απλά μια παρότρυνση. Και τον αποσυμπιέζουμε εκεί πέρα. Μια συμβουλή μου είναι να το κάνετε πολλές φορές από τώρα, θα χρειαστούν.
Τώρα που επιλέξατε τον πυρήνα και τον εγκαταστήσατε σε ένα φάκελο, μπορείτε να το κάνετε compile. Δηλαδή να τον μεταγλωττίσετε σε γλώσσα μηχανής (αυτά τα 0 και 1 που κανένας φυσιολογικός άνθρωπος δεν καταλαβαίνει).

Προεργασία
Από την προσωπική μου εμπειρία είναι καλό να ακολουθήσουμε τα παρακάτω βήματα. Αρχικά αφαιρούμε τους κλειστούς drivers της κάρτας γραφικών και γενικά όλους τους κλειστούς οδηγούς. Αν φυσικά έχουμε. Αν δεν έχουμε nvidia να δώσουμε την εντολή
Κώδικας: Επιλογή όλων
sudo apt-get purge nvidia-common

Αυτό γιατί στην εγκατάσταση του νέου kernel θα έχουμε πρόβλημα με το postinstall script.
Ο λόγος που αφαιρούμε τους κλειστούς οδηγούς είναι γιατί περιέχονται στα πακέτα linux-restricted modules. Τα οποία δημιουργούνται από την ομάδα του ubuntu για κάθε πυρήνα ξεχωριστά.
Επίσης μια καλή πρακτική, ακόμα και σε επίσημους πυρήνες, είναι να αφαιρούμε τελείως όλα τα πακέτα restricted modules. Δυστυχώς επειδή τα έχω ήδη αφαιρέσει δεν μπορώ να περιγράψω αναλυτικά την διαδικασία. Αυτό που πρέπει να γίνει είναι να αφαιρείτε τα πακέτα σταδιακά λύνοντας τις εξαρτήσεις.

Configure
Το πρώτο βήμα είναι να παραμετροποιήσουμε το πυρήνα ώστε να “ταιριάζει” στο σύστημα μας. Η διαδικασία αυτή είναι γνωστή ως “configure”. Μπορούμε να κάνουμε τη διαδικασία με την εντολή make. Οι παράμετροι του πυρήνα βρίσκονται σε ένα αρχείο στη ρίζα των φακέλων αυτού του kernel, το .config. Στη περίπτωσή μας που μόλις κατεβάσαμε το κώδικα δεν υπάρχει αυτό το αρχείο και άρα πρέπει να το φτιάξουμε. Μπορούμε να το δημιουργήσουμε από την αρχή με βάση το kernel που τρέχει αυτή τη στιγμή, είτε να βασιστούμε στο configuration του πυρήνα της διανομής που τρέχουμε. Μερικές επιλογές είναι οι εξής:

Κώδικας: Επιλογή όλων
make config


Αν είσαστε αρκετά γενναίοι να το ξεκινήσετε από scratch, βρείτε άλλο οδηγό είτε περιμένετε να ανεβάσω κάποιον. Οι πυρήνες έχουν πάνω από 2000 (!!!!) ρυθμίσεις στις οποίες πρέπει να απαντήσετε... Και το “δεν γνωρίζω, δεν απαντώ” ΔΕΝ είναι επιλογή.

Κώδικας: Επιλογή όλων
make defconfig


Αν δεν είστε αρκετά γενναίοι συνεχίστε εδώ... Κάθε πυρήνας όταν έρχεται από τον Linus, έχει μια σειρά από ρυθμίσεις που αυτοί (η ομάδα του) νομίζουν ότι είναι οι καλύτερες ώστε γενικά να καλύπτουν ένα μεγάλο φάσμα χρηστών, για κάθε αρχιτεκτονική. Στη πραγματικότητα είναι σχεδόν οι ρυθμίσεις που χρησιμοποιούν οι ίδιοι <:-P.

Κώδικας: Επιλογή όλων
make oldconfig


Άλλη μια πολύ χρήσιμη εντολή καθώς φτιάχνει το .config με βάση το αρχείο που τρέχουμε ήδη. Στη περίπτωση πάλι που αναβαθμίζουμε θα μας ρωτήσει μόνο για τις καινούριες εντολές.
Αν έχετε 64bit σύστημα πρέπει να δώσετε αυτό

Κώδικας: Επιλογή όλων
make ARCH=x86_64 ***config



Οι εντολές:

Κώδικας: Επιλογή όλων
make menuconfig / xconfig / gconfig


Είναι οι επιλογές που θα χρησιμοποιήσουμε για να επεξεργαστούμε τις λεπτομέρειες του συστήματος μας. Οι παραλλαγές είναι περισσότερο επιλογές αισθητικής. Με λίγο φαντασία από τα ονομάτά τους καταλαβαίνετε τι κάνουν.
Μέσα στο ***config θα βρείτε τα ΑΠΑΝΤΑ. Από συσκευές έως πρωτόκολλα. Γενικά μέχρι τώρα εσκεμμένα απέφευγα να απαντάω, στο forum, σε θέματα για H/Y γιατί περίμενα να τελειώσω αυτό το οδηγό. Τώρα μπορεί ο καθένας να βρεί τη συσκευή του και να την ενεργοποιήσει. Η λίστα είναι ατελείωτη: κάμερες, modem, κάρτες δικτύου, οθόνες usb, ποντίκια... Μπορεί να μην βρείτε το όνομα της συσκευής σας αλλά μια παρεμφερή είτε μια generic, είναι και αυτό μια αρχή. Αλλά επίσης μπορεί και να απενεργοποιήσετε πολλές συσκευές που ποτέ δεν πρόκειται να χρησιμοποιήσετε. Για μην σας μείνει η εντύπωση ότι όλα είναι ρόδινα θα πρέπει να προσέχετε να μην απενεργοποιείτε πράγματα που δεν ξέρετε τι είναι. Γιατί μπορεί να μην οδηγούν σε άμεσα προβλήματα, αλλά στο μέλλον σε κάποια φάση που θα κάνετε κάτι σημαντικό μπορεί να έχετε πρόβλημα και να ψάχνεστε άσχημα!

Κώδικας: Επιλογή όλων
make mrproper


Είναι η εντολή που χρησιμοποιούμε για να καθαρίσουμε το .config, αρχείο και να τα πιάσουμε από την αρχή.

Μodifes>>>
Αφού τα εγκαταστήσαμε και τα φέραμε στα μέτρα μας αρχίζουμε τις modifies. Καλούμε την make gconfig από gnome και xconfig από KDE (Υπ' όψιν qt3!) είτε menuconfig από οπουδήποτε. Εμένα μου αρέσει το menuconfig, είναι πιο retro... . Χρειάζεται όμως να κάνετε εγκατάσταση το πατέτο ncurses-dev.
Ο πυρήνας χωρίζετε σε παραγράφους. Κάθε παράγραφος ομαδοποιεί κοινές ρυθμίσεις. Μέσα στις παραγράφους μπορούμε να βρούμε υποπαραγράφους και ούτο καθ' εξής.
Για παράδειγμα αναφέρουμε ότι όλοι οι drivers βρίσκονται στο menu DEVICE DRIVERS. Γενικά η πλοήγηση δεν είναι ιδιαίτερη σπαζοκεφαλιά. Σε ότι επιλέγουμε με το SPACE μπαίνει ένα αστεράκι [*]. Μέσα στα < > μπορούμε να επιλέξουμε αν θα το χτίσουμε μέσα στο kernel <Υ> , ως module <Μ> είτε καθόλου <n>. Όποτε τελειώνουμε πατά ESC για να πάμε πίσω.
Καλό είναι να έχουμε το νου μας όταν λέει ότι μια επιλογή είναι depressiated γιατί πάει να πεί ότι μάλλον σε μια από τις επόμενες εκδόσεις θα την κόψουν τελείως. Οι new γενικά είναι καλό να επιλέγονται καθώς είναι τα νέα stable κομμάτια του πυρήνα. Προσοχή θέλουν, φυσικά, και οι experimental εδώ δεν ξέρω τι να σας πώ...
Ένα από τα πιο δύσκολα πράγματα στην όλη υπόθεση είναι να καταλάβουμε τι χρειαζόμαστε και τι όχι. Σε αυτό δυστυχώς δεν υπάρχει Πανάκεια λύση. Εδώ είναι το σημείο που θα φάμε τα μούτρα μας. Θα προσπαθήσω να σας περιγράψω μια διαδικασία, γενική και με ερωταπαντήσεις θα βρούμε τι ακριβώς χρειάζεται ο καθένας.
Πριν όταν είπαμε ότι με τη χρήση του ήδη υπάρχοντος .config είτε με το καθολικό .config γλιτώνουμε πολύ πόνο, σε αυτά ακριβώς αναφερόμασταν. Είναι πολύ πιο εύκολο να βρούμε τι, και αν, το χρειαζόμαστε αν το έχουμε ήδη, είτε αν μας λείπουν ένα – δύο πράγματα και όχι τα πάντα...
Το παλιό .config στο Jaunty βρίσκεται στο:

Κώδικας: Επιλογή όλων
/usr/src/kernel_version/


Κάντε το copy paste το φάκελο με το δικό σας kernel. Πλέον μπορείτε να προχωρήσετε με το καινούριο kernel ξέροντας, ότι έχετε κάτι που δουλεύει, τουλάχιστον.
Όμως με το .config από τους πάνω (β.λ. Ubuntu team) θα έχουμε πάλι ένα σύστημα, γενικό. Ας δούμε σιγά σιγά πως θα το εξειδικεύσουμε. Αν τώρα έχουμε κάποια περιφερειακά που δεν είναι πάνω στο laptop όλη την ώρα τα κάνουμε modules. Γενικά θέλει προσοχή γιατί πολλές συσκευές τρέχουν με drivers από άλλες γιατί οι original κατασκευαστές είναι κοινοί, είτε γιατί χρησιμοποιούν το ίδιο interface.
Υπάρχουν πολλές τοποθεσίες στο σύστημα που περιέχουν πληροφορίες για το H/Y ίσος η πιο σημαντική είναι το sysfs (google it). Το sysfs βρίσκεται πάντα στο /sys. Γενικά σε αυτό το σημείο βρισκόμαστε στο μάτι του κυκλώνα. Πάρα πολλές από τις αλλαγές και τις βελτιώσεις στο developing των linux γίνονται εδώ. Μπορεί τώρα να τα δούμε με μια μορφή και σε 1 χρόνο όλα να είναι τούμπα... Αλλά έτσι είναι τα πράγματα...

Παραδείγματα
Κάρτα δικτύου
Ας δούμε για πρώτο παράδειγμα πως βάζουμε μια κάρτα δικτύου:

Κώδικας: Επιλογή όλων
ls /sys/class/net


Στην εντολή αυτή θα εμφανιστούν τα ονόματα των δικτύων, όπως και μια διεύθυνση lo, η οποία αντιστοιχεί στη συσκευή loopbak (google it) και όχι σε κάποια κάρτα. Στο δικό μου laptop το απότέλεσμα είναι:

Κώδικας: Επιλογή όλων
eth0 lo pan0 vboxnet0 wlan0 wmaster0


Για περαιτέρω πληροφορίες για κάθε ένα απο αυτά τα δίκτυα δίνουμε:

Κώδικας: Επιλογή όλων
ifconfig -a


Ας υποθέσουμε ότι δουλεύει το wlan0, το οποίο μπορούμε να το διαπιστώσουμε από την ύπαρξη κάποιου IP. Τότε δίνουμε την εντολή:

Κώδικας: Επιλογή όλων
ls /sys/class/net/wlan0/device/driver/module/drivers/


Και το αποτέλεσμα είναι

Κώδικας: Επιλογή όλων
pci:iwlagn


Το κομμάτι που μας ενδιαφέρει είναι το iwlagn. Το πρώτο μέρος δηλώνει τη φύση της κάρτας. Και πηγαίνουμε στη κλασσική διεύθυνση στο root του νέου kernel και δίνουμε την εντολή (google it):

Κώδικας: Επιλογή όλων
find -type f -name Makefile | xargs grep iwlagn


Έξοδος:

Κώδικας: Επιλογή όλων
./drivers/net/wireless/iwlwifi/Makefile:obj-#(CONFIG_IWLAGN) += iwlagn.o
./drivers/net/wireless/iwlwifi/Makefile:iwlagn-objs := iwl-agn.o iwl-agn-rs.o iwl-agn-hcmd-check.o
./drivers/net/wireless/iwlwifi/Makefile:iwlagn-#(CONFIG_IWL4965) += iwl-4965.o
./drivers/net/wireless/iwlwifi/Makefile:iwlagn-#(CONFIG_IWL5000) += iwl-5000.o


Αυτή ήταν μια πετυχημένη προσθήκη. Θα μου πείτε τώρα ότι ήταν ήδη μέσα. ΟΚ έχετε δίκιο αλλά είδατε πως ψάχνουμε για drivers, πως τους βρίσκουμε και τι κάνουμε στη συνέχεια. Προφανώς και όλες τις άλλες pci κάρτες δικτύου, που υποστηρίζει ο kernel, δεν πρόκειται να τις χρησιμοποιήσω ποτέ, άρα τις αφαιρώ.
Εναλλακτικά, ας πούμε, από το το menuconfig μπορείτε με πιο gui συνθήκες να κάνετε αναζήτηση και να βρείτε τον συγκεκριμένο οδηγό. Όπως έχουμε ήδη πει το menuconfig δεν είναι κάποια σπαζοκεφαλιά, βρείτε τις λεπτομέρειες μόνοι σας.
Δεύτερο παράδειγμα τα πονεμένα USB....
Πολλές φορές βλέπω στο forum, ότι υπάρχει πρόβλημα με συσκευές USB, όπως οθόνες, ποντίκια, κάρτες δικτύου κ.α. Ο καλύτερο τρόπος να δείτε αν πρόκειται να δουλέψει αυτή η συσκευή είναι να πάτε με το menuconfig στις συσκευές USB, και να δείτε τι υπάρχει εκεί. Η λίστα είναι πολύ μεγάλη και τα περισσότερα είναι φυσικά απενεργοποιημένα.
Ας δούμε τι θα κάνουμε με ένα FPGA της Xilinx, το οποίο χρησιμοποιούμε στο εργαστήριο μου. Το FPGA αυτό έχει το quickUSB interface από την Bitwise. Αρχικά, αφού το συνδέσω δίνω την εντολή:

Κώδικας: Επιλογή όλων
lsusb


Για να δω που το έχει βάλει. Επειδή το USB είναι ένα δομημένο πρωτόκολλο είναι καλό να διαβάσετε (google it) πώς είναι στημένο. Δεν είναι κάτι απλό αλλά δεν χρειάζεται να εντρυφίσετε. Από το αποτέλεσμα της εντολή βλέπω ότι είναι στο Bus 2 η τρίτη συσκευή. Άρα:

Κώδικας: Επιλογή όλων
cd /sys/class/usb_endpoint/usbdev2.3_ep00/


Εδώ μπορούμε να δούμε ΌΛΕΣ τις πληροφορίες για τη συσκευή μας. Το πρώτο πράγμα που πρέπει να κάνουμε είναι να πάμε στο κατάλογο

Κώδικας: Επιλογή όλων
cd device
nano manufacturer


Με αποτέλεσμα Bitwise.... Και

Κώδικας: Επιλογή όλων
nano product


Με αποτέλεσμα QuickUSB....
Πλέον είμαστε σίγουροι ότι αυτή είναι η συσκευή μας.

Κώδικας: Επιλογή όλων
nano uevent


Και βλέπουμε ότι ο driver είναι ο USB. Οπότε άμα ενεργοποιήσουμε το γενικό driver για USB είμαστε εντάξει. Λόγω του είδους των συσκευών USB συστήνω να τις ενεργοποιήσετε όλες, τουλάχιστον ως modules. Το ίδιο συστήνω και για firewire (IEEE 1394) και άλλα πρωτόκολλα που χρησιμοποιούνται σε τέτοιου είδους συσκευές.
Ένα ΠΟΛΥ καλό reference για USB drivers είναι αυτή η ιστοσελίδα http://www.qbik.ch/usb/devices/index.php στην οποία μπορούμε να βρούμε γενικά τι υποστηρίζεται και αν υπάρχουν προβλήματα.
Και τώρα θα πείτε, -καλά, για τις συσκευές που ξέρω ότι δουλεύουν από μόνες τους πρέπει να το κάνω αυτό κάθε φορά??. Η απάντηση είναι -Όχι. Επειδή είστε στο κόσμο του UNIX μπορείτε να φτιάξετε ένα script να κάνει την βρομοδουλειά για εσάς. Παρακάτω είναι ένα παράδειγμα που βρήκα στο internet:
Κώδικας: Επιλογή όλων
Κώδικας: Επιλογή όλων
#!/bin/bash
#
#find_all_mod.sh
#
for i in `find /sys/ -name modalias -exec cat {} \;`;do
/sbin/modprobe –config /dev/null –show-depends #i ;
done | rev | cut -f 1 -d | rev | sort -u



O δημιουργός λέει ότι μπορούν να εμφανιστούν μερικά errors. Όπως

Κώδικας: Επιλογή όλων
FATAL: Module pci:XXXXXXX not found


Που σημαίνει ότι οι drivers για αυτό το module δεν είναι διαθέσιμοι στο kernel.

Building deb και Εγκατάσταση
Απο τη στιγμή που το ubuntu είναι βασισμένα στα debian, μπορούμε να εκμεταλλευτούμε και τα καλούδια τους . Η χρήση της εντολής

Κώδικας: Επιλογή όλων
make-kpkg


Αντικαθιστά την χρήση των
Κώδικας: Επιλογή όλων
make dep, make clean, make bzimage, make modules
Που θα δούμε πιο αναλυτικά στη συνέχεια. Η εντολή αυτή βρίσκεται στο πακέτο kernel-package. Και για να χτίσουμε το πυρήνα μας ακολουθούμε τις παρακάτω εντολές:

Κώδικας: Επιλογή όλων
make-kpkg clean
fakeroot make-kpkg - -initrd - -append-to-version=-custom1 kernel_image kernel_headers


Μέχρι να τελειώσει μπορείτε να πάτε μια μικρή βόλτα, να δείτε μια ταινία είτε να πάτε να φάτε κάτι. Στο laptop μου κάνει ~30min.
Καλό είναι να χρησιμοποιούμε διακριτικά ονόματα, όπως custom, είτε fast-boot, είτε max-compatibility. Ανάλογα με τις ιδιότητες που έχει ο κάθε πυρήνας. Αλλά να αποφεύγουμε ονόματα τύπο -sparc, είτε -x86. Πλέον που κάναμε deb το πυρήνα μας μπορούμε να το κάνουμε εγκατάσταση με τον πιο εύκολο τρόπο, αφού πάμε ένα φάκελο πάνω:

Κώδικας: Επιλογή όλων
sudo dpkg -i kernel-headers-2.6.29.Custom1.deb
sudo dpkg -i kernel-image-2.6.29.Custom1.deb


Αν θέλουμε να κάνουμε την εγκατάσταση με το κλασσικό τρόπο (τον οποίο και ΔΕΝ συνιστώ) ακολουθούμε τα παρακάτω βήματα:

Κώδικας: Επιλογή όλων
sudo make
sudo make modules

sudo make modules_install
sudo make install

sudo cp arch/XXXX/boot/bzImage /boot/bzImage<Version>
sudo cp -s /boot/System.map-<version> /boot/System.map

sudo mkinitramfs -o /boot/initrd-<version>.img <version>


Στο
Κώδικας: Επιλογή όλων
/boot/grub/menu.lst
προθέτουμε την παρακάτω παράγραφο τροποποιώντας την κατάλληλα για τα δεδομένα του δίσκου μας.

Κώδικας: Επιλογή όλων
title           Ubuntu Custom
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.30.4 root=/dev/sda1 ro quiet splash
initrd          /boot/initrd.img-2.6.30.4


και δίνουμε την εντολή

Κώδικας: Επιλογή όλων
update-grub


Πλέον τις αναβαθμίσεις του kernel θα τις κάνετε μόνοι σας. Όσοι περίεργο και να σας ακούγετε για αυτό βάλατε Linux. Είστε πλέον άρχοντες του συστήματός σας, είτε κοντεύετε να γίνεται. Αυτούς τους νεοτερισμούς τύπου MS δεν τους καταλαβαίνω. Αν θέλατε official υποστήριξη στη μαμά MS.
Πάραυτα δεν είναι κάτι δύσκολο. Δεν χρειάζεται να τα κάνετε όλα από την αρχή.
    1.Κατεβάζεται το εν' λόγω patch, από την ιστοσελίδα των kernels.
    2.Το κάνετε copy paste στα σημεία που πρέπει.
    3.Κάνετε reconfigure με βάση το ήδη υπάρχον .config
    4.Build, η εντολή make θα δεί πια αρχεία έχουν μεταβληθεί και θα κάνει compile μόνο αυτά. Αυτό είναι καλό πάτημα για να σας περιγράψω μια μικρή στρατηγική. Μπορείτε να απενεργοποιείτε συσκευές που δεν ξέρετε αν τις χρειάζεστε σε μικρά πακέτα, τα οποία όμως σημειώνετε κάπου και να κάνετε compile μόνο αυτά. Έτσι αν κάτι πάει λάθος μπορείτε πολύ εύκολα να γυρίσετε πίσω.
    5.Install
    6.Έτοιμοι.
Δεν είναι το πιο δύσκολο πράγμα, αλλά εντάξει ούτε και το πιο εύκολο. Θέλει λίγο προσοχή μόνο να κατεβάσετε το σωστό patch. Θα το συζητήσουμε εν' καιρώ... Υπάρχει και μια εναλλακτική μέθοδος το ketchup, αλλά όλα στην ώρα τους.

Αυτά προς το παρών. Δεν έχω καλύψει όλα τα θέματα και όλες τις οπτικές γωνίες ( και ούτε ξέρω να το κάνω). Ήταν απλά ένας εισαγωγικός οδηγός και τίποτα παραπάνω. Ελπίζω να βοήθησε αρκετούς από εσάς να δείτε τι είναι αυτό που κάνατε εγκατάσταση στο PC σας, αλλά περισσότερο να σας παρουσιάσει την κύρια διαφορά μεταξύ των windows και των Linux.
Προσπάθησα να περιγράψω, έστω και ονομαστικά, εναλλακτικές διαδικασίες ώστε να προσεγγίσω την γενικότητα. Ελπίζω αυτό να μην σας μπέρδεψε.

Ευχαριστώ για το ενδιαφέρον σας και περιμένω σχόλια και απορίες.
Ζητάω συγνώμη για πιθανά λάθη.

Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Μη εμπορική χρήση-Παρόμοια διανομή 3.0 Ελλάδα
Τελευταία επεξεργασία από Nisok και 05 Μάιος 2009, 00:09, έχει επεξεργασθεί 7 φορά/ες συνολικά
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό ilpara » 04 Μάιος 2009, 10:18

...άφωνος, συγχαρητήρια :!: :D
*Oδηγίες προς Nεοεισερχόμενους*ΟδηγοίLive chat (IRC)
⇛ Linux: Μέτριο ┃ Προγραμματισμός: Όχι ┃ Αγγλικά: Καλά
⇛ Ubuntu 12.04 32bit
⇛ Dell M4300: T7500 (2.2GHZ 4MB) ┃ 2GB ┃ NVIDIA Quadro FX 360M (256MB) ┃ Intel 4965 ┃ 15.4" WUXGA
Άβαταρ μέλους
ilpara
powerTUX
powerTUX
 
Δημοσιεύσεις: 2250
Εγγραφή: 11 Μάιος 2008, 11:43
Τοποθεσία: Αθήνα-Βύρωνας
IRC: ilpara
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό koukouvaou » 04 Μάιος 2009, 10:55

ilpara έγραψε:...άφωνος, συγχαρητήρια :!: :D
Και λιγα λες.........
Spoiler: show
Επίπεδο Γνώσεων: Linux: Κατι εχω μαθει.../ Προγραμματισμός: Όχι/ Αγγλικά: Καλά
Λειτουργικό ubuntu 9.10 32bit
Η/Υ&Μοντέλο: intel E5200/ μνημη: 2 gb/ Καρτα γραφων: Intel 3100/ Οθόνη & Ανάλυση:asus 19" wide/camera cyper snipa
# 28271

Ελεύθερο λογισμικό για Ελεύθερους ανθρώπους.
pirateparty.gr
Άβαταρ μέλους
koukouvaou
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 533
Εγγραφή: 29 Αύγ 2008, 22:02
Τοποθεσία: Μεταμορφωση Αττικης (Koυκουβαουνες)
IRC: koukouvaou
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό atermon » 04 Μάιος 2009, 11:21

Εξαιρετικός οδηγός, προτρέπει για ενασχόληση. Μπράβο!
<Οδηγίες προς νεοεισερχόμενους> | <Οδηγοί χρήσης>
DEBIAN "Sid" 32bit σε Sony VAIO VGN-FE11S
Intel T2400(1,83 GHz) │ 2GB DDR2 │ NVIDIA GeForce Go 7400 │Intel 3945ABG │Intel 82801G(ICH7 Family) │ TFT 15.4" WXGA
Άβαταρ μέλους
atermon
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 711
Εγγραφή: 13 Μάιος 2008, 20:31
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό logari81 » 04 Μάιος 2009, 11:45

@Nisok έδωσες ρέστα, δεν εχω βρει τοσο αναλυτικό οδηγό ουτε στα αγγλικά.

Off topic:
Μόνο μια παρατηρηση:
να απενεργοποιήσετε απο το jokey τους drivers της κάρτας

θα μπορουσε να αντικατασταθεί με
να απενεργοποιήσετε απο το jokey τυχόν κλειστούς drivers της κάρτας γραφικών που πιθανόν να χρησιμοποιείτε


Γενικά στο jockey δεν εγκαθιστας "ΤΟΥΣ drivers της κάρτας γραφικών", εγκαθιστάς "ΚΑΠΟΙΟΥΣ drivers της καρτας γραφικών" και συγκεκριμένα "ΚΛΕΙΣΤΟΥΣ drivers της καρτας γραφικών". Το τονίζω γιατι έχει δημιουργηθεί μια λαθος νοοτροπια driver-μανία που οδηγεί ακομη και χρήστες καρτών Ιντελ να αναζητούν απελπισμενα drivers στο διαδικτυο.
https://bugs.launchpad.net/ubuntu/+sour ... bug/202267
http://opensourceecology.org/


Λειτουργικό: Ubuntu 10.04 lucid 64-bitΠροδιαγραφές: 4x Intel Core i5 CPU M 450 2.40GHz ‖ RAM 3696 MiB ‖ Lenovo KL3 - LENOVO IdeaPad Y560
Κάρτα γραφικών: ATI Device [1002:68c0]Ασύρματο: wlan0: Atheros Inc. AR928X Wireless Network Adapter (PCI-Express) [168c:002a] (rev 01)
logari81
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 6074
Εγγραφή: 14 Μάιος 2008, 10:40
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό gourgi » 04 Μάιος 2009, 11:57

Πολύ ωραίος!
Καλή αρχή στην σειρά οδηγών για τον πυρήνα, αναμένουμε και την συνέχεια :D

Μερικές παρατηρήσεις στο κείμενο (τις τονίζω με κόκκινο) :
1) Σίγουρα χρειαζόμαστε ένα compiler. Αν δεν ξέρετε τι είναι αυτό απλά google it. Επειδή είναι απλά ένας οδηγός και όχι ο μαγικός κύβος Knorr με γεύση πιγκουίνου, το google θα είναι η μόνη παραπομπή. Υπάρχουν διάφοροι free αλλά ο καλύτερος είναι ο gcc.
2) Ας υποθέσουμε ότι δουλεύει το wlan0, το οποίο μπορούμε να το διαπιστώσουμε από την ύπαρξη κάποιου IP. Τότε δίνουμε την εντολή:
3) Που σημαίνει ότι οι drivers για αυτό το module δεν είναι διαθέσιμοι στο kernel. Προσωπικά δεν το έχω χρησιμοποιήσει αυτό το script γιατί ??? αλλά δεν φαίνεται να έχει τίποτα στραβό.
Όσο ζω ... μαθαίνω!
Desktop:stable9.04 i386|testing9.10 i386|Opteron Amd64 1.8GHz|RAM 2GB|Nvidia 6600GT|Msi K8N Platinum|Live! 24bit 5.1|Pixelview Playtv Pro BT878+rev.9d
Asus EEE 1000h9.04 i386|N270|RAM 2GB|945GME|RT2860|82801G
Oδηγίες προς νεοεισερχόμενους σε forum ή linux
Άβαταρ μέλους
gourgi
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 681
Εγγραφή: 02 Ιουν 2008, 14:45
Τοποθεσία: Ξάνθη - Πτελεός
IRC: gourgi
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό Dimitris » 04 Μάιος 2009, 12:16

Φανταστικός οδηγός! Συγχαρητήρια Nisok!!!

Μια ιδέα για πειραματισμούς αν δεν έχει η γιαγιά υπολογιστή είναι να γίνουν οι δοκιμές σε εικονική μηχανή. (Ή κάνω λάθος;) Γι'αυτό άλλωστε υπάρχει για να πειραματιζόμαστε και όχι να εγκαθιστούμε windows.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό Nisok » 04 Μάιος 2009, 12:23

Παιδιά σας ευχαριστώ πολύ αρχικά για το ενδιαφέρον και τις διορθώσεις και στη συνέχεια για τα κοπλιμέντα σας. :D :D

Μερικές απαντήσεις διευκρινήσεις:
@gourgi
Δεν έχω χρησιμοποιήσει το script γιατί απλά το βρήκα μέσα στο ΣΚ που έγραφα τον οδηγό. Αν το έβρισκα όταν έφτιαχνα το πυρήνα μου θα το χρησιμοποιούσα :-)

@Dimitris
Αν φτιάξεις το πυρήνα σε virtualbox τότε δεν είναι σίγουρο ότι θα μπορείς να το χρησιμοποιήσεις στο "κανονικό" σου PC. Ενώ αν το φτιάξεις στο "κανονικό" σου PC, απλά με προσοχή στα σημεία που αναφέρω, θα είσαι μια χαρά!!!!
Άβαταρ μέλους
Nisok
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 2637
Εγγραφή: 25 Ιαν 2009, 15:00
Τοποθεσία: /home
IRC: nisok
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό medigeek » 04 Μάιος 2009, 13:37

Από την άλλη, όποιος θέλει να δοκιμάσει τα deb πακέτα με το καινούργιο kernel:
http://kernel.ubuntu.com/~kernel-ppa/mainline/

Have fun! ;)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Customizing the Kernel tutorial - Welcome to the Dark Side

Δημοσίευσηαπό ftso » 04 Μάιος 2009, 14:34

Ευχαριστούμε πολύ για τον οδηγό. Μπράβο σου. :)


ΥΓ: Αν πρόκειται να τον συνεχίσεις καλό είναι να τον κάνεις επεξεργασία και να γράψεις απο κάτω για να είναι όλα μαζεμένα
Άβαταρ μέλους
ftso
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 6409
Εγγραφή: 12 Μάιος 2008, 13:40
Τοποθεσία: Αθήνα
IRC: ftso
Εκτύπωση

Επόμενο

Επιστροφή στο Οδηγοί - How to - Tutorials