Εντολή Linux / Unix: insmod

Η εντολή insmod της εντολής Linux / Unix εγκαθιστά μια φορτωτή ενότητα στον τρέχοντα πυρήνα. το insmod προσπαθεί να συνδέσει μια ενότητα στον τρέχοντα πυρήνα με την επίλυση όλων των συμβόλων από τον εξαγόμενο πίνακα συμβόλων του πυρήνα.

Εάν το όνομα αρχείου μονάδας δίνεται χωρίς καταλόγους ή επέκταση, το insmod θα αναζητήσει την ενότητα σε κάποιους κοινούς προεπιλεγμένους καταλόγους. Η μεταβλητή περιβάλλοντος MODPATH μπορεί να χρησιμοποιηθεί για την αντικατάσταση αυτής της προεπιλογής. Αν υπάρχει αρχείο ρύθμισης παραμέτρων όπως το /etc/modules.conf , αυτό θα παρακάμψει τις διαδρομές που ορίζονται στο MODPATH .

Η μεταβλητή περιβάλλοντος MODULECONF μπορεί επίσης να χρησιμοποιηθεί για την επιλογή ενός διαφορετικού αρχείου ρυθμίσεων από το προεπιλεγμένο αρχείο /etc/modules.conf/etc/conf.modules (deprecated)). Αυτή η μεταβλητή περιβάλλοντος θα αντικαταστήσει όλους τους παραπάνω ορισμούς.

Όταν η μεταβλητή περιβάλλοντος UNAME_MACHINE έχει οριστεί, το modutils θα χρησιμοποιήσει την τιμή του αντί του πεδίου του μηχανήματος από το σύμβολο uname (). Αυτό είναι κυρίως χρήσιμο όταν καταρτίζετε μονάδες 64-bit σε χώρο χρήστη 32 bit ή το αντίστροφο, ορίζετε UNAME_MACHINE στον τύπο των ενοτήτων. Τα τρέχοντα modutils δεν υποστηρίζουν πλήρη λειτουργία cross-build για τα modules, περιορίζεται στην επιλογή ανάμεσα σε εκδόσεις 32- και 64-bit της αρχιτεκτονικής υποδοχής.

Επιλογές

persist_name , -persist = persist_name

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

Ως μορφή στενογραφίας , -e " (μια κενή συμβολοσειρά) ερμηνεύεται από το insmod ως την τιμή του persistdir όπως ορίζεται στα modules.conf , ακολουθούμενη από το όνομα αρχείου της ενότητας σε σχέση με τη διαδρομή αναζήτησης της ενότητας στην οποία βρέθηκε, μείον οποιοδήποτε ακολουθώντας ".gz", ".o" ή ".mod". Εάν το modules.conf καθορίζει " persistdir = " (δηλ. Το persistdir είναι ένα κενό πεδίο), τότε αυτή η σύντομη μορφή αγνοείται σιωπηρά. (Βλ. Modules.conf (5).)

-f , --force

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

-h , --help

Εμφανίστε μια σύνοψη των επιλογών και αμέσως βγείτε.

-k , --autoclean

Ορίστε τη σημαία αυτόματου καθαρισμού στη μονάδα. Αυτή η σημαία θα χρησιμοποιηθεί από το kerneld (8) για την κατάργηση ενοτήτων που δεν έχουν χρησιμοποιηθεί σε κάποια χρονική περίοδο - συνήθως ένα λεπτό.

-L , - κλειδώματος

Χρησιμοποιήστε το κοπάδι (2) για να αποτρέψετε ταυτόχρονα φορτία της ίδιας μονάδας.

-m , --map

Εκτελέστε έναν χάρτη φόρτωσης στο stdout, διευκολύνοντας τον εντοπισμό σφαλμάτων της μονάδας σε περίπτωση πανικού πυρήνα.

-n , --noload

Ομοίωμα, εκτελέστε τα πάντα εκτός από τη φόρτωση της μονάδας στον πυρήνα. Εάν ζητηθεί από ένα -m ή -O , η εκτέλεση θα δημιουργήσει ένα αρχείο χάρτη ή μπλοκ. Δεδομένου ότι η ενότητα δεν είναι φορτωμένη, η πραγματική διεύθυνση φόρτωσης πυρήνα είναι άγνωστη, έτσι ώστε το αρχείο map και το blob βασίζονται σε μια αυθαίρετη διεύθυνση φορτίου 0x12340000.

-o όνομα_μονάδας , --name = όνομα_μονάδας

Αναφέρετε ρητώς τη λειτουργική μονάδα, αντί να εξάγετε το όνομα από το όνομα βάσης του αρχείου αντικειμένου προέλευσης.

-Obob_name , --blob = όνομα_λιθίου

Αποθηκεύστε το δυαδικό αντικείμενο στο blob_name . Το αποτέλεσμα είναι ένα δυαδικό blob (χωρίς κεφαλίδες ELF) που δείχνει ακριβώς τι φορτώνεται στον πυρήνα μετά από χειρισμό και μετεγκατάσταση τμήματος. Η επιλογή -m συνιστάται για να πάρετε έναν χάρτη του αντικειμένου.

-p , - δοκιμάστε

Δοκιμάστε την ενότητα για να δείτε εάν θα μπορούσε να φορτωθεί με επιτυχία . Αυτό περιλαμβάνει τον εντοπισμό του αρχείου αντικειμένου στη διαδρομή μονάδας, τον έλεγχο των αριθμών έκδοσης και την επίλυση συμβόλων. Δεν ελέγχει τις μετεγκαταστάσεις ούτε παράγει ένα χάρτη ή ένα αρχείο blob.

-P πρόθεμα , --prefix = πρόθεμα

Αυτή η επιλογή μπορεί να χρησιμοποιηθεί με εκδομένες μονάδες για έναν πυρήνα SMP ή bigmem, αφού αυτά τα στοιχεία έχουν ένα πρόσθετο πρόθεμα που προστίθεται στα ονόματα συμβόλων τους. Αν ο πυρήνας χτίστηκε με εκδόσεις συμβόλων τότε το insmod θα εξαγάγει αυτόματα το πρόθεμα από τον ορισμό του "get_module_symbol" ή "inter_module_get", ένας από τους οποίους πρέπει να υπάρχει σε οποιοδήποτε πυρήνα που υποστηρίζει ενότητες. Εάν ο πυρήνας δεν έχει εκδόσεις συμβόλων αλλά η μονάδα κατασκευάστηκε με εκδόσεις συμβόλων τότε ο χρήστης πρέπει να παρέχει -P .

-q , - καθαρή

Μην εκτυπώνετε μια λίστα με τυχόν ανεπίλυτα σύμβολα. Μην διαμαρτύρονται για την αναντιστοιχία των εκδόσεων. Το πρόβλημα θα αντικατοπτρίζεται μόνο στην κατάσταση εξόδου του insmod .

-r , - ρίζα

Ορισμένοι χρήστες καταρτίζουν λειτουργικές μονάδες κάτω από μη χρήστη root και στη συνέχεια εγκαθιστούν τις ενότητες ως root. Αυτή η διαδικασία μπορεί να αφήσει τις λειτουργικές μονάδες που ανήκουν στο userid μη-ρίζας, παρόλο που ο κατάλογος των ενοτήτων ανήκει στη ρίζα. Εάν το userid που δεν είναι root, ένας εισβολέας μπορεί να αντικαταστήσει τις υπάρχουσες μονάδες που ανήκουν σε αυτό το userid και να χρησιμοποιήσει αυτήν την έκθεση για να ξεκινήσει την πρόσβαση σε root.

Από προεπιλογή, το modutils θα απορρίψει τις προσπάθειες χρήσης μιας ενότητας που δεν ανήκει στη ρίζα. Ο καθορισμός του -r θα μεταβεί στον έλεγχο και θα επιτρέψει στη ρίζα να φορτώσει μονάδες που δεν ανήκουν στη ρίζα. Σημείωση: η προεπιλεγμένη τιμή για τον έλεγχο ρίζας μπορεί να αλλάξει όταν διαμορφωθεί το modutils.

Η χρήση του -r για να απενεργοποιήσετε τον έλεγχο ρίζας ή για να ορίσετε την προεπιλογή σε "χωρίς έλεγχο ρίζας" κατά τη διάρκεια της διαμόρφωσης είναι μια σημαντική έκθεση ασφαλείας και δεν συνιστάται.

-s , - syslog

Καταχωρίστε τα πάντα στο syslog (3) αντί του τερματικού.

-S , --kallsyms

Αναγκάστε τη φορτωμένη λειτουργική μονάδα να έχει δεδομένα kallsyms , ακόμη και αν ο πυρήνας δεν το υποστηρίζει. Αυτή η επιλογή είναι για μικρά συστήματα όπου ο πυρήνας είναι φορτωμένος χωρίς δεδομένα kallsyms, αλλά επιλεγμένες ενότητες χρειάζονται kallsyms για σφάλμα. Αυτή η επιλογή είναι η προεπιλογή για το Red Hat Linux.

-v , --verbose

Να είναι verbose.

-V , --version

Εμφάνιση της έκδοσης του insmod .

-X , --export ; -x , --exexport

Κάνετε και μην εξάγετε όλα τα εξωτερικά σύμβολα της μονάδας, αντίστοιχα. Η προεπιλογή είναι για τα σύμβολα που πρόκειται να εξαχθούν. Αυτή η επιλογή είναι αποτελεσματική μόνο εάν η ενότητα δεν εξάγει ρητώς τον δικό της ελεγχόμενο πίνακα συμβόλων και, ως εκ τούτου, έχει καταργηθεί.

-Y , --yyymoops ; -y , - noksymoops

Κάνετε και μην προσθέτετε σύμβολα ksymoops σε ksyms. Αυτά τα σύμβολα χρησιμοποιούνται από ksymoops για την παροχή καλύτερης αποσφαλμάτωσης εάν υπάρχει ένα στοιχείο "Ωχ" σε αυτή την ενότητα. Η προεπιλογή είναι για τα σύμβολα ksymoops που πρέπει να οριστούν. Αυτή η επιλογή είναι ανεξάρτητη από τις επιλογές -X / -x .

Τα σύμβολα ksymoops προσθέτουν περίπου 260 bytes ανά φορτωμένη μονάδα. Εάν δεν είστε πολύ κοντά στον χώρο του πυρήνα και προσπαθείτε να μειώσετε το ksyms στο ελάχιστο μέγεθος, πάρτε την προεπιλογή και λάβετε πιο ακριβείς σφαλμάτων Oops debugging. Τα σύμβολα ksymoops απαιτούνται για την αποθήκευση των επίμονων στοιχείων της μονάδας.

-N , - μόνο αριθμητική

Ελέγξτε μόνο το αριθμητικό μέρος της έκδοσης μονάδας ενάντια στην έκδοση του πυρήνα, δηλαδή αγνοήστε το EXTRAVERSION όταν αποφασίσετε εάν μια ενότητα ανήκει σε έναν πυρήνα. Αυτή η σημαία ρυθμίζεται αυτόματα για τον πυρήνα 2.5 και μετά, είναι προαιρετική για προηγούμενους πυρήνες.

Παράμετροι μονάδας

Ορισμένες ενότητες δέχονται παραμέτρους χρόνου φόρτωσης για να προσαρμόσουν τη λειτουργία τους. Αυτές οι παράμετροι είναι συχνά αριθμοί εισόδου / εξόδου και IRQ που διαφέρουν από μηχάνημα σε μηχανή και δεν μπορούν να προσδιοριστούν από το υλικό.

Σε μονάδες που έχουν κατασκευαστεί για πυρήνες σειρών 2.0, οποιοδήποτε σύμβολο ακέραιου ή χαρακτήρα δείκτη μπορεί να αντιμετωπιστεί ως παράμετρος και να τροποποιηθεί. Αρχίζοντας στους πυρήνες των σειρών 2.1, τα σύμβολα επισημαίνονται ρητά ως παράμετροι, ώστε να μπορούν να αλλάξουν μόνο συγκεκριμένες τιμές. Επιπλέον, παρέχονται πληροφορίες τύπου για τον έλεγχο των τιμών που παρέχονται κατά το χρόνο φόρτωσης.

Στην περίπτωση ακέραιων αριθμών, όλες οι τιμές μπορεί να είναι δεκαδικά, οκταδικά ή δεκαεξαδικά a la C: 17, 021 ή 0x11. Τα στοιχεία συστοιχίας καθορίζονται ακολουθία διαχωρισμένη με κόμματα. Τα στοιχεία μπορούν να παραληφθούν παραλείποντας την τιμή.

Σε δομοστοιχεία σειράς 2.0, αξίες που δεν ξεκινούν με έναν αριθμό θεωρούνται συμβολοσειρές. Αρχίζοντας από το 2.1, οι πληροφορίες τύπου της παραμέτρου δείχνουν αν θα ερμηνεύσει την τιμή ως συμβολοσειρά. Εάν η τιμή ξεκινάει με διπλά εισαγωγικά ( " ), η συμβολοσειρά ερμηνεύεται όπως στο C, ακολουθίες διαφυγής και όλα. Σημειώστε ότι από την προτροπή κελύφους, οι ίδιες οι προσφορές ίσως χρειαστεί να προστατευτούν από την ερμηνεία του κελύφους.

GPL Αδειοδοτημένες Ενότητες και Σύμβολα

Ξεκινώντας με τον πυρήνα 2.4.10, οι ενότητες θα πρέπει να έχουν μια συμβολοσειρά αδειών, η οποία ορίζεται με τη χρήση MODULE_LICENSE () . Πολλές χορδές αναγνωρίζονται ως συμβατές με GPL. οποιαδήποτε άλλη συμβολοσειρά άδειας χρήσης ή καμία άδεια δεν σημαίνει ότι η ενότητα θεωρείται ιδιόκτητη.

Εάν ο πυρήνας υποστηρίζει τη σημαία / proc / sys / kernel / tainted, τότε insmod θα OR ή τη σημαία που έχει μολυνθεί με '1' κατά τη φόρτωση μιας μονάδας χωρίς άδεια GPL. Εμφανίζεται μια προειδοποίηση εάν ο πυρήνας υποστηρίζει τη φθορά και μια μονάδα φορτώνεται χωρίς άδεια. Μια προειδοποίηση εκδίδεται πάντοτε για ενότητες που έχουν MODULE_LICENSE () που δεν είναι συμβατές με GPL, ακόμη και σε παλαιότερους πυρήνες που δεν υποστηρίζουν αλλοιώσεις. Αυτό ελαχιστοποιεί τις προειδοποιήσεις όταν χρησιμοποιείται ένα νέο modutils σε παλαιότερους πυρήνες.

η λειτουργία insmod -f (δύναμη) θα OR ή η σημαία που έχει μολυνθεί με το '2' στους πυρήνες που υποστηρίζουν τη φθορά. Εκδίδει πάντα μια προειδοποίηση.

Ορισμένοι προγραμματιστές του πυρήνα απαιτούν τα σύμβολα που εξάγονται από τον κώδικα τους να χρησιμοποιούνται μόνο από ενότητες με άδεια συμβατή με GPL. Αυτά τα σύμβολα εξάγονται από το EXPORT_SYMBOL_GPL αντί για το κανονικό EXPORT_SYMBOL . Τα σύμβολα που χρησιμοποιούνται αποκλειστικά από το GPL και εξάγονται από τον πυρήνα και από άλλες ενότητες είναι ορατά μόνο σε ενότητες με άδεια συμβατή με GPL. Αυτά τα σύμβολα εμφανίζονται στο / proc / ksyms με πρόθεμα " GPLONLY_ ". το insmod αγνοεί το πρόθεμα GPLONLY_ στα σύμβολα κατά τη φόρτωση μιας ενότητας με άδεια GPL, επομένως η ενότητα αναφέρεται απλώς στο κανονικό όνομα συμβόλου χωρίς το πρόθεμα. Τα σύμβολα αποκλειστικά για GPL δεν διατίθενται σε ενότητες χωρίς άδεια GPL συμβατή, αλλά περιλαμβάνουν και ενότητες χωρίς άδεια.

Ksymoops Βοήθεια

Για να βοηθήσετε στην αποκατάσταση του σφάλματος του πυρήνα Ωχ, όταν χρησιμοποιείτε ενότητες, ενεργοποιήστε την προεπιλογή για να προσθέσετε μερικά σύμβολα στα ksyms, δείτε την επιλογή -Y . Αυτά τα σύμβολα αρχίζουν με __insmod_modulename_ . Το modulename απαιτείται να κάνει τα σύμβολα μοναδικά. Είναι νόμιμο να φορτώνετε το ίδιο αντικείμενο περισσότερες από μία φορές κάτω από διαφορετικά ονόματα μονάδων. Επί του παρόντος, τα καθορισμένα σύμβολα είναι:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

το αντικείμενο αντικειμενοφόρου είναι το όνομα του αρχείου από το οποίο φορτώθηκε το αντικείμενο. Αυτό εξασφαλίζει ότι οι ksymoops μπορούν να αντιστοιχίσουν τον κώδικα στο σωστό αντικείμενο. mtime είναι η τελευταία τροποποιημένη χρονική σφραγίδα σε αυτό το αρχείο σε hex, μηδέν αν το stat απέτυχε. έκδοση είναι η έκδοση του πυρήνα για την οποία έχει κατασκευαστεί η ενότητα, -1 αν δεν υπάρχει διαθέσιμη έκδοση. Το σύμβολο _O έχει την ίδια διεύθυνση έναρξης με την επικεφαλίδα της μονάδας.

__insmod_modulename_Session name_Llength

Αυτό το σύμβολο εμφανίζεται στην αρχή των επιλεγμένων ενοτήτων ELF, επί του παρόντος .text, .rodata, .data, .bss και .sbss. Εμφανίζεται μόνο αν η ενότητα έχει μη μηδενικό μέγεθος. Το sectionname είναι το όνομα του τμήματος ELF, το μήκος είναι το μήκος του τμήματος στο δεκαδικό. Αυτά τα σύμβολα βοηθούν το ksymoops να διευθύνει τις διευθύνσεις σε τμήματα όταν δεν υπάρχουν σύμβολα.

__insmod_modulename_Ppersistent_filename

Δημιουργείται μόνο από το insmod εάν η ενότητα έχει μία ή περισσότερες παραμέτρους που έχουν επισημανθεί ως επίμονα δεδομένα και είναι διαθέσιμο ένα όνομα αρχείου για την αποθήκευση επίμονων δεδομένων (βλ. -e , παραπάνω).

Το άλλο πρόβλημα με τον πυρήνα εντοπισμού σφαλμάτων. Ωχ στην ενότητα είναι ότι τα περιεχόμενα των / proc / ksyms και / proc / modules μπορούν να αλλάξουν μεταξύ του Oops και κατά την επεξεργασία του αρχείου καταγραφής. Για να ξεπεραστεί αυτό το πρόβλημα, αν ο κατάλογος / var / log / ksymoops υπάρχει, τότε τα insmod και rmmod θα αντιγράψουν αυτόματα / proc / ksyms και / proc / modules στο / var / log / ksymoops με πρόθεμα ` % d% Η% Μ% S '. Ο διαχειριστής του συστήματος μπορεί να πει στο ksymoops ποια αρχεία στιγμιότυπων πρέπει να χρησιμοποιήσουν κατά το σφάλμα ενός Oops. Δεν υπάρχει διακόπτης για να απενεργοποιήσετε αυτό το αυτόματο αντίγραφο. Αν δεν θέλετε να συμβεί, μην δημιουργείτε / var / log / ksymoops . Αν αυτός ο κατάλογος υπάρχει, πρέπει να ανήκει σε root και να είναι 644 ή 600 και θα πρέπει να τρέχετε αυτό το σενάριο κάθε μέρα ή έτσι. Το παρακάτω σενάριο είναι εγκατεστημένο ως insmod_ksymoops_clean .

Βασικές πληροφορίες που πρέπει να γνωρίζετε

ΟΝΟΜΑ

insmod - να εγκαταστήσετε τη λειτουργική μονάδα του πυρήνα με δυνατότητα φόρτωσης

ΣΥΝΟΨΗ

insmod [-fhkLmnpqrsSvVxXyYN] [-ε persist_name ] [ -όνομα_μονάδας ] [-O blob_name ] [-P πρόθεμα ] [ σύμβολο = τιμή ...]