Skip to main content

Alles over de opdracht Linux / Unix: insmod

sudo command not found fix in Linux (Debian 9 GNU/Linux ) (Juni- 2026)

sudo command not found fix in Linux (Debian 9 GNU/Linux ) (Juni- 2026)
Anonim

De opdracht Linux / Unix insmod installeert een laadbare module in de draaiende kernel.insmod probeert een module te koppelen aan de actieve kernel door alle symbolen uit de geëxporteerde symbolentabel van de kernel op te lossen.

Als de bestandsnaam van de module wordt gegeven zonder mappen of extensie,insmod zal naar de module zoeken in een aantal gebruikelijke standaarddirectory's. De omgevingsvariabeleMODPATH kan worden gebruikt om deze standaard te negeren. Als een moduleconfiguratiebestand zoals/etc/modules.conf bestaat, overschrijft het de paden die zijn gedefinieerd inMODPATH.

De omgevingsvariabeleMODULECONF kan ook worden gebruikt om een ​​ander configuratiebestand uit de standaard te selecteren/etc/modules.conf (of/etc/conf.modules (verouderd)). Deze omgevingsvariabele heeft voorrang boven alle bovenstaande definities.

Wanneer omgevingsvariabeleUNAME_MACHINE is ingesteld, modutils gebruikt de waarde ervan in plaats van het machineveld uit de syscriptnaam (). Dit is vooral handig wanneer u 64-bits modules in 32-bits gebruikersruimte compileert of vice versaUNAME_MACHINE naar het type modules. Huidige modutils ondersteunen niet de volledige cross-buildmodus voor modules, het is beperkt tot het kiezen tussen 32- en 64-bitversies van de hostarchitectuur.

opties

-e persist_name , --persist= persist_name

Geeft aan waar persistente gegevens voor de module worden gelezen tijdens laden en schrijven tot wanneer deze instantiatie van de module wordt verwijderd. Deze optie wordt genegeerd als de module geen persistente gegevens bevat. Persistente gegevens worden alleen gelezen doorinsmod als deze optie standaard aanwezig isinsmod verwerkt geen persistente gegevens.

Als een steno-formulier,-e "" (een lege tekenreeks) wordt geïnterpreteerd doorinsmod als de waarde vanpersistdir zoals gedefinieerd inmodules.conf, gevolgd door de bestandsnaam van de module ten opzichte van het zoekpad van de module waarin het zich bevond, minus een achterliggend ".gz", ".o" of ".mod". Alsmodules.conf specificeert "persistdir ="(i.e.persistdir is een leeg veld) dan wordt deze stenografische vorm stilzwijgend genegeerd. (Zienmodules.conf (5).)

-f, --dwingen

Poging om de module te laden, zelfs als de versie van de draaiende kernel en de versie van de kernel waarvoor de module werd gecompileerd, niet overeenkomen. Dit overschrijft alleen de kernelversiecontrole, het heeft geen effect op symboolnaamcontroles. Als de symboolnamen in de module niet overeenkomen met de kernel, kan er niet worden geforceerdinsmod om de module te laden.

-h, --helpen

Geef een overzicht van opties weer en sluit onmiddellijk af.

-k, --automatische schoonmaak

Stel de vlag automatisch opschonen op de module in. Deze vlag wordt gebruikt doorkerneld(8) om modules te verwijderen die gedurende een bepaalde tijd niet zijn gebruikt - meestal één minuut.

-L, --slot

Gebruikkudde(2) om gelijktijdige belastingen van dezelfde module te voorkomen.

-m, --kaart

Uitvoeren van een loadmap op stdout, waardoor het eenvoudiger wordt om de module te debuggen in het geval van een kernelpanic.

-n, --geen lading

Dummy run, doe alles behalve laad de module in de kernel. Op verzoek van een-m of-O, de run produceert een kaart- of blobbestand. Omdat de module niet is geladen, is het echte kernel-laadadres onbekend, dus het kaart- en blob-bestand is gebaseerd op een willekeurig laadadres van 0x12340000.

-O module naam , --naam= module naam

Geef de module expliciet een naam in plaats van de naam af te leiden van de basisnaam van het bronobjectbestand.

-O blob_name , --blob= blob_name

Sla het binaire object op blob_name . Het resultaat is een binaire blob (geen ELF-headers) die exact laat zien wat er in de kernel is geladen na manipulatie en verplaatsing van de sectie. Keuze-m wordt aanbevolen om een ​​kaart van het object te krijgen.

-p, --sonde

Probe de module om te zien of deze succesvol kan worden geladen. Dit omvat het lokaliseren van het objectbestand in het modulepad, het controleren van versienummers en het oplossen van symbolen. Het controleert de verhuizingen niet en produceert ook geen kaart- of blobbestand.

-P voorvoegsel , --voorvoegsel= voorvoegsel

Deze optie kan worden gebruikt met versie-modules voor een SMP- of bigmem-kernel, omdat aan dergelijke modules een extra voorvoegsel is toegevoegd in hun symboolnamen. Als de kernel dan is gebouwd met symboolversiesinsmod zal het voorvoegsel automatisch extraheren uit de definitie van "get_module_symbol" of "inter_module_get", waarvan er één moet bestaan ​​in elke kernel die modules ondersteunt. Als de kernel geen symboolversies heeft maar de module werd gebouwd met symboolversies, dan moet de gebruiker leveren-P.

-q, --stil

Druk geen lijst met niet-opgeloste symbolen af. Klacht niet over verkeerde versie van de versie. Het probleem zal alleen worden weerspiegeld in de exit-status vaninsmod.

-r, --wortel

Sommige gebruikers compileren modules onder een niet-rootgebruikersid en installeren de modules vervolgens als root. Dit proces kan de modules verlaten die eigendom zijn van de niet-rootgebruikersid, ook al is de directory van de module eigendom van root. Als de niet-root userid gecompromitteerd is, kan een indringer bestaande modules die eigendom zijn van die userid overschrijven en deze blootstelling aan bootstrap tot root-toegang gebruiken.

Modutils weigert standaard pogingen om een ​​module te gebruiken die niet het eigendom is van root. opgeven -r schakelt de controle in en staat root toe modules te laden die niet het eigendom zijn van root.

Notitie: De standaardwaarde voor rootcontrole kan worden gewijzigd wanneer modutils is geconfigureerd.Het gebruik van -r om rootcontrole uit te schakelen of de standaardinstelling in te stellen op "geen rootcheck" tijdens de configuratie, is een belangrijke beveiligingsbelichting en wordt niet aanbevolen.

-s, --syslog

Alles uitvoeren naarsyslog(3) in plaats van de terminal.

-S, --kallsyms

Dwing de geladen module om te hebbenkallsyms gegevens, zelfs als de kernel dit niet ondersteunt. Deze optie is voor kleine systemen waarbij de kernel zonder wordt geladenkallsyms gegevens maar geselecteerde modules nodig hebbenkallsyms voor foutopsporing. Deze optie is de standaard op Red Hat Linux.

-v, --verbose

Wees breedsprakig.

-V, --versie

Toon de versie vaninsmod.

-X, --exporteren; -X, --noexport

Voer en exporteer niet alle externe symbolen van de module. De standaardwaarde is voor de symbolen die moeten worden geëxporteerd. Deze optie is alleen effectief als de module zijn eigen gecontroleerde symbooltabel niet expliciet exporteert en dus is verouderd.

Y, --ksymoops; -y, --noksymoops

Wel en niet toevoegenksymoops symbolen voor ksyms. Deze symbolen worden gebruikt doorksymoops om betere foutopsporing te bieden als er een Oeps in deze module is. De standaard is voor deksymoopssymbolen die moeten worden gedefinieerd. Deze optie is onafhankelijk van de-X/-X opties.

ksymoops symbolen voegen ongeveer 260 bytes per geladen module toe. Tenzij je een tekort hebt aan kernelruimte en ksyms tot zijn minimale grootte wilt reduceren, neem dan de standaardinstelling en krijg meer accurate Oops-foutopsporing.ksymoops symbolen zijn vereist om persistente modulegegevens op te slaan.

-N, --numeric-only

Controleer alleen het numerieke deel van de module-versie tegen de kernelversie, d.w.z. negeer EXTRAVERSION om te beslissen of een module tot een kernel behoort. Deze vlag wordt automatisch ingesteld voor kernel 2.5 en is optioneel voor oudere kernels.

Moduleparameters

Sommige modules accepteren laadtijdparameters om hun werking aan te passen. Deze parameters zijn vaak I / O-poort- en IRQ-nummers die van machine tot machine verschillen en niet via de hardware kunnen worden bepaald.

In modules die zijn gebouwd voor kerncels uit de 2.0-serie, kan elk symbool voor een geheel getal of tekenaanwijzer als een parameter worden behandeld en worden gewijzigd. Vanaf de 2.1-kernels worden symbolen expliciet als parameters gemarkeerd, zodat alleen specifieke waarden kunnen worden gewijzigd. Verder is er typegegevens beschikbaar voor het controleren van de waarden die tijdens het laden zijn opgegeven.

In het geval van gehele getallen kunnen alle waarden in decimaal, octaal of hexadecimaal a la C: 17, 021 of 0x11 zijn. Array-elementen zijn opgegeven reeks gescheiden door komma's. Elementen kunnen worden overgeslagen door de waarde weg te laten.

In modules uit de 2.0-serie worden waarden die niet met een cijfer beginnen, beschouwd als tekenreeksen. Vanaf 2.1 geeft de parameterinformatie van de parameter aan of de waarde moet worden geïnterpreteerd als een tekenreeks. Als de waarde begint met dubbele aanhalingstekens ('), wordt de string geïnterpreteerd als in C, escape sequences en alles. Houd er rekening mee dat vanaf de shellprompt de koersen zelf mogelijk moeten worden beschermd tegen shell-interpretatie.

GPL gelicentieerde modules en symbolen

Vanaf kernel 2.4.10 moeten modules een licentiereeks hebben die is gedefinieerd metMODULE_LICENSE (). Verschillende strings worden herkend als GPL-compatibel; een andere licentiestring of geen enkele licentie betekent dat de module als propriëtair wordt behandeld.

Als de kernel de ondersteunt/ Proc / sys / kernel / bedorven vlag daninsmod will OF de bedorven vlag met '1' bij het laden van een module zonder een GPL-licentie. Er wordt een waarschuwing gegeven als de kernel tainting ondersteunt en een module zonder licentie wordt geladen. Een waarschuwing wordt altijd gegeven voor modules met eenMODULE_LICENSE () dat is niet GPL-compatibel, zelfs niet op oudere kernels die geen bederf hebben. Dit minimaliseert waarschuwingen wanneer een nieuwe modutils wordt gebruikt op oudere kernels.

insmod -f (kracht) modus zal OF de bedorven vlag met '2' op pitten die het bedekken ondersteunen. Het geeft altijd een waarschuwing.

Sommige kernelontwikkelaars vereisen dat symbolen die worden geëxporteerd met hun code alleen mogen worden gebruikt door modules met een GPL-compatibele licentie. Deze symbolen worden geëxporteerd doorEXPORT_SYMBOL_GPL in plaats van normaalEXPORT_SYMBOL. GPL-only-symbolen die worden geëxporteerd door de kernel en door andere modules zijn alleen zichtbaar voor modules met een GPL-compatibele licentie, deze symbolen verschijnen in/ Proc / ksyms met een voorvoegsel van 'GPLONLY_'. insmod negeert deGPLONLY_ voorvoegsel op symbolen tijdens het laden van een met GPL gelicentieerde module, zodat de module alleen naar de normale symboolnaam verwijst, zonder het voorvoegsel. GPL-symbolen worden niet beschikbaar gesteld aan modules zonder een GPL-compatibele licentie, dit omvat modules zonder enige licentie.

Ksymoops Assistance

Om te helpen bij het debuggen van kernel Oeps bij het gebruik van modules,insmod standaard een aantal symbolen aan ksyms toe te voegen, zie deY keuze. Deze symbolen beginnen met__insmod_ module naam_ . De module naam is nodig om de symbolen uniek te maken. Het is legaal om hetzelfde object meer dan eens onder verschillende modulenamen te laden. Momenteel zijn gedefinieerde symbolen:

__insmod_ module naam _ Oobjectfile _ Mmtime _ vVERSION

objectfile is de naam van het bestand waaruit het object is geladen. Dit zorgt ervoor dat ksymoops de code kunnen koppelen aan het juiste object. mtime is de laatst gewijzigde tijdstempel in dat bestand in hex, nul als stat mislukt. versie is de kernelversie waarvoor de module is gecompileerd, -1 als er geen versie beschikbaar is. De_O symbool heeft hetzelfde startadres als de moduleheader.

__insmod_ module naam _ Ssectionname _ Llength

Dit symbool verschijnt aan het begin van geselecteerde ELF-secties, momenteel .text, .rodata, .data, .bss en .sbss. Het verschijnt alleen als de sectie een niet-nul-grootte heeft. sectie naam is de naam van de ELF-sectie, lengte is de lengte van de sectie in decimaal. Met deze symbolen kunnen ksymoops adressen toewijzen aan secties wanneer er geen symbolen beschikbaar zijn.

__insmod_ module naam _Ppersistent_ bestandsnaam

Alleen gemaakt doorinsmod als de module een of meer parameters heeft die zijn gemarkeerd als permanente gegevens en een bestandsnaam om persistente gegevens op te slaan (zie-e, hierboven) is beschikbaar.

Het andere probleem met het debuggen van kernel Oeps in modules is dat de inhoud van / proc / ksyms en / proc / modules kunnen veranderen tussen de Oeps en wanneer u het logbestand verwerkt. Om dit probleem te verhelpen, als de directory / var / log / ksymoops dan bestaatinsmod enrmmod zal automatisch / proc / ksyms en / proc / modules naar / var / log / ksymoops kopiëren met een voorvoegsel van `datum +% Y% m% d% H% M% S`. De systeembeheerder kan ksymoops vertellen welke snapshotbestanden moeten worden gebruikt bij het debuggen van een Oops. Er is geen switch om deze automatische kopie uit te schakelen. Als je niet wilt dat dit gebeurt, maak dan geen / var / log / ksymoops aan. Als die map bestaat, moet deze het eigendom zijn van root en modus 644 of 600 zijn en zou u dit script ongeveer elke dag moeten uitvoeren. Het onderstaande script is geïnstalleerd als insmod_ksymoops_clean.

#! / Bin / sh # Verwijder opgeslagen bestanden en modules die niet binnen 2 dagen zijn geopend als -d / var / log / ksymoops dan set -e # Zorg dat er altijd minstens één versie is d = `datum +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules find / var / log / ksymoops -type f -atime +2 -exec rm {} ; fi

Basisinformatie om te weten

NAAM

insmod - installeer de laadbare kernelmodule

KORTE INHOUD

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o module naam -O blob_name -P voorvoegsel module symbool= waarde …