Linux / Unix Komutu: insmod

Linux / Unix komutu insmod , çalışan çekirdeğe yüklenebilir bir modül yükler . insmod , kernel'in dışa aktarılan sembol tablosundaki tüm sembolleri çözerek bir modülü çalışan çekirdeğe bağlamaya çalışır.

Modül dosya adı dizin veya uzantı olmadan verilirse, insmod , bazı ortak varsayılan dizinlerde modülü arayacaktır. Bu varsayılanı geçersiz kılmak için MODPATH ortam değişkeni kullanılabilir. /etc/modules.conf gibi bir modül yapılandırma dosyası varsa, MODPATH'da tanımlanan yolları geçersiz kılar.

MODULECONF ortam degiskenleri de degisik bir yapilandirma dosyasini /etc/modules.conf (veya /etc/conf.modules (onaylanmamistir)) 'den seçmek için de kullanilabilir. Bu ortam değişkeni yukarıdaki tüm tanımları geçersiz kılacaktır.

UNAME_MACHINE ortam değişkeni ayarlandığında, modutils makine alanı yerine değerini uname () syscall öğesinden kullanır. Bu, esas olarak, 32 bit kullanıcı alanında 64 bit modüller derlerken veya tam tersi olduğunda, UNAME_MACHINE modüllerin türüne ayarlanır. Geçerli modutils modüller için tam çapraz oluşturma modunu desteklemez, ana mimarinin 32 ve 64-bit sürümleri arasında seçim yapmakla sınırlıdır.

Seçenekler

-e persist_name , --persist = devam_adı

Modül için herhangi bir kalıcı verinin yükte okunup yazıldığını ve bu modülün başlatılmasının ne zaman yapılacağını belirtir. Modül kalıcı veri yoksa bu seçenek sessizce göz ardı edilir. Kalıcı veriler sadece bu seçenek mevcutsa insmod tarafından okunur, varsayılan olarak insmod kalıcı verileri işlemez.

Kısa bir biçim olarak , -e "" (boş bir dize), insmod tarafından, modules.conf dosyasında tanımlandığı şekliyle, perspektifin değeri olarak yorumlanır, ardından modülün bulunduğu modül arama yoluna göre dosya adı eklenir . ".gz", ".o" veya ".mod" karakterleri. Modules.conf " persistdir = " değerini belirtirse (yani, persistdir boş bir alan), bu kısa yol formu sessizce göz ardı edilir. (Bkz. Modules.conf (5).)

-f , --force

Çalışan çekirdeğin sürümü ve modülün derlendiği çekirdeğin sürümü eşleşmiyor olsa bile, modülü yüklemeyi deneyin. Bu sadece çekirdek sürüm kontrolünü geçersiz kılar, sembol adı kontrolleri üzerinde hiçbir etkisi yoktur. Modüldeki sembol isimleri çekirdekle eşleşmiyorsa, insmod'u modüle yüklemeye zorlamanın bir yolu yoktur.

-h , --help

Seçeneklerin bir özetini görüntüleyin ve hemen çıkın.

-k , --autoclean

Modül üzerindeki otomatik temizleme bayrağını ayarlayın. Bu bayrak, bir süredir kullanılmayan modülleri çıkarmak için kerneld (8) tarafından kullanılacaktır - genellikle bir dakika.

-L , --lock

Aynı modülün aynı anda yüklenmesini önlemek için flok (2) kullanın.

-m , --map

Bir çekirdek panik durumunda modülü hata ayıklamayı kolaylaştırmak için, stdout üzerinde bir yük haritası çıkar.

-n , --noload

Kukla çalışma, modülü çekirdeğe yüklemek dışında her şeyi yapın. Bir -m veya -O tarafından istenirse, çalışma bir harita veya blob dosyası oluşturur. Modül yüklenmediğinden, gerçek çekirdek yük adresi bilinmemektedir, dolayısıyla harita ve blob dosyası 0x12340000'ün isteğe bağlı bir yükleme adresine dayanmaktadır.

-o module_name , --name = modül_name

Kaynak nesne dosyasının temel adından isim almak yerine, modülü açıkça adlandırın.

-O blob_name , --blob = blob_name

İkilik nesneyi blob_name dosyasına kaydedin . Sonuç, bölüm manipülasyonu ve yeniden yerleştirme işleminden sonra çekirdeğe yüklenen tam olarak neyin yerleştirildiğini gösteren ikili bir blob (ELF başlıkları yok). Nesnenin bir haritasını elde etmek için -m seçeneği önerilir.

-p , --probe

Modülün başarıyla yüklenip yüklenemeyeceğini kontrol edin . Bu, nesne yolunu modül yolunda bulmayı, sürüm numaralarını kontrol etmeyi ve sembolleri çözmeyi içerir. Yer değiştirmeleri kontrol etmez ve bir harita veya blob dosyası oluşturmaz.

-P öneki , --prefix = önek

Bu seçenek bir SMP veya bigmem çekirdeği için sürüm modülleri ile kullanılabilir, çünkü bu tür modüller sembol isimlerine ek bir ön ek eklenmiştir. Eğer çekirdek sembol versiyonları ile oluşturulmuşsa, insmod otomatik olarak ön eki "get_module_symbol" veya "inter_module_get" tanımından çıkarır, bunlardan biri modülleri destekleyen herhangi bir çekirdeğe sahip olmalıdır. Çekirdeğin sembol versiyonları yoksa, modül sembol versiyonları ile oluşturulmuşsa kullanıcı -P'yi sağlamalıdır.

-q , --quiet

Çözülmemiş sembollerin listesini yazdırmayın. Sürüm uyuşmazlığı hakkında şikayet etmeyin. Sorun sadece insmod'un çıkış durumuna yansıtılacaktır.

-r , - kök

Bazı kullanıcılar, kök olmayan bir kullanıcı alt yapısı altında modülleri derlerler ve daha sonra modülleri root olarak yüklerler. Bu işlem, modüller dizininin root'a ait olmasına rağmen, root olmayan userid tarafından sahip olunan modülleri bırakabilir. Kök olmayan kullanıcı kodları ele geçirilirse, bir saldırgan, o kullanıcı tarafından sahip olunan mevcut modüllerin üzerine yazabilir ve bu erişimi root erişimine kadar önyükleme için kullanabilir.

Varsayılan olarak, modutils, root tarafından sahip olunmayan bir modülü kullanma girişimlerini reddeder. -r'yi belirtmek, denetimi değiştirir ve root'un root'a ait olmayan modülleri yüklemesine izin verir. Not: Kök kontrolü için varsayılan değer, modutils yapılandırıldığında değiştirilebilir.

Kök kontrolünü devre dışı bırakmak için -r kullanımı veya yapılandırma zamanında varsayılan olarak "kök denetimi yok" ayarı büyük bir güvenlik açığına neden olur ve önerilmez.

-s , - syslog

Terminal yerine syslog (3) için her şeyi çıkış yapın.

-S , --kallsyms

Çekirdek desteklememiş olsa bile, yüklenen modülü kallsyms verisine zorlar . Bu seçenek, kernelin kallsyms verisi olmadan yüklendiği küçük sistemler içindir, ancak seçilen modüller hata ayıklama için kallsymalara ihtiyaç duyar. Bu seçenek Red Hat Linux'taki varsayılan değerdir.

-v , --verbose

Tembel ol.

-V , - dönüşüm

Insmod'un sürümünü görüntüleyin.

-X , --export ; -x , --noexport

Sırasıyla, modülün tüm harici sembollerini dışa aktarmayın ve dışa aktarmayın. Varsayılan, dışa aktarılacak semboller içindir. Bu seçenek, modül kendi kontrollü sembol tablosunu açıkça dışa aktarmıyorsa ve dolayısıyla kullanımdan kaldırılırsa etkilidir.

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

Ksymoops sembolleri ksyms'e eklemeyin ve eklemeyin. Bu semboller, bu modülde bir Oops varsa daha iyi hata ayıklama sağlamak için ksymoops tarafından kullanılır. Varsayılan ksymoops sembollerinin tanımlanması içindir. Bu seçenek -X / -x seçeneklerinden bağımsızdır.

ksymoops sembolleri, yüklü modül başına yaklaşık 260 bayt ekler. Çekirdek alanı üzerinde gerçekten kısa olmadıkça ve ksyms'i minimum boyutuna indirmeye çalışmadığınız sürece, varsayılanı alın ve Hata ayıklama işlemini daha doğru yapın. Kalıcı modül verisini kaydetmek için ksymoops sembolleri gereklidir.

-N , - sadece sayısal

Modül versiyonunun sayısal parçasını sadece çekirdek versiyonuna karşı kontrol edin, yani bir modülün bir çekirdeğe ait olup olmadığına karar verirken EXTRAVERSION'ı göz ardı edin. Bu bayrak otomatik olarak çekirdek 2.5 için ayarlanır, daha önceki çekirdekler için isteğe bağlıdır.

Modül Parametreleri

Bazı modüller, işlemlerini özelleştirmek için yükleme zamanı parametrelerini kabul eder. Bu parametreler genellikle makineden makineye değişen ve donanımdan belirlenemeyen G / Ç bağlantı noktası ve IRQ numaralarıdır.

2.0 serisi çekirdekler için oluşturulmuş modüllerde, herhangi bir tam sayı veya karakter işaretçisi sembolü bir parametre olarak ele alınabilir ve değiştirilebilir. 2.1 serisi çekirdeklerden başlayarak, semboller sadece parametreler olarak işaretlenir, böylece sadece belirli değerler değiştirilebilir. Ayrıca, yükleme süresinde sağlanan değerleri kontrol etmek için tip bilgisi sağlanır.

Tamsayı durumunda, tüm değerler ondalık, sekizli veya onaltılık bir la C: 17, 021 veya 0x11 olabilir. Dizi öğeleri, virgülle ayrılmış sırayla belirtilir. Değer ihmal edilerek elemanlar atlanabilir.

2.0 serisi modüllerde, bir sayı ile başlamayan değerler dizge olarak kabul edilir. 2.1'den itibaren, parametrenin tip bilgisi değeri bir string olarak yorumlayıp yorumlamayacağınızı gösterir. Eğer değer çift tırnak ( " ) ile başlıyorsa, dizge C, kaçış dizileri ve hepsi gibi yorumlanır. Kabuk isteminden, tırnakların kendilerinin kabuktan yorumlanmaya karşı korunmaları gerekebilir.

GPL Lisanslı Modüller ve Semboller

Çekirdek 2.4.10 ile başlayan modüller, MODULE_LICENSE () kullanılarak tanımlanmış bir lisans dizisine sahip olmalıdır. Birkaç dizi GPL uyumlu olarak kabul edilir; Diğer herhangi bir lisans dizgesi veya hiç bir lisans, modülün tescilli olarak ele alındığı anlamına gelir.

Çekirdek / proc / sys / kernel / arinted flag'ı destekliyorsa, insmod , GPL lisansı olmayan bir modülü yüklerken '1' ile renkli bayrağı ya da OR bayrağı olacaktır. Çekirdek yazdırma işlemini destekliyorsa ve bir modül lisanssız olarak yüklenirse bir uyarı verilir. Tadilatı desteklemeyen eski çekirdeklerde bile GPL uyumlu olmayan MODULE_LICENSE () olan modüller için her zaman bir uyarı verilir. Bu, eski çekirdeklerde yeni bir modutils kullanıldığında uyarıları en aza indirir.

insmod -f (force) modu VEYA, lekelenmeyi destekleyen kernellerde '2' ile lekelenmiş bayrak olacaktır. Her zaman bir uyarı verir.

Bazı çekirdek geliştiricileri, kodları tarafından dışa aktarılan sembollerin yalnızca GPL uyumlu lisanslı modüller tarafından kullanılmasını gerektirir. Bu semboller normal EXPORT_SYMBOL yerine EXPORT_SYMBOL_GPL tarafından dışa aktarılır . Yalnızca çekirdek tarafından ve diğer modüller tarafından dışa aktarılan GPL-sembolleri yalnızca GPL uyumlu bir lisansa sahip modüller tarafından görülebilir, bu semboller ' GPLONLY_ ' önekiyle / proc / ksyms içinde görünür. insmod , GPL lisanslı modülü yüklerken semboller üzerindeki GPLONLY_ önekini yok sayar, böylece modül sadece ön ek olmadan normal sembol ismine başvurur . GPL uyumlu bir lisans olmaksızın sadece GPL modülleri kullanılamaz, buna lisanssız modüller de dahildir.

Ksymoops Yardımı

Modüller kullanırken çekirdek Oops'larının hata ayıklamasında yardımcı olmak için, insmod varsayılanları, ksyms'e bazı semboller eklemek için kullanılır, -Y seçeneğine bakın. Bu semboller __insmod_modulename_ ile başlar. Sembolleri benzersiz hale getirmek için modulename gereklidir. Aynı nesneyi farklı modül adları altında birden çok kez yüklemek yasaldır. Şu anda tanımlanmış semboller:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile , nesnenin yüklendiği dosyanın adıdır. Bu, ksymoops'un kodu doğru nesneyle eşleştirmesini sağlar. mtime , bu dosyadaki en son değiştirilmiş zaman damgası, hex'te başarısız, stat başarısız olursa sıfırdır. sürüm , sürüm mevcut değilse, modülün derlendiği çekirdek sürümüdür. _O sembolü, modül başlığı ile aynı başlangıç ​​adresine sahiptir.

__insmod_modulename_Ssectionname_Llength

Bu sembol, şu anda .text, .rodata, .data, .bss ve .sbss gibi seçilen ELF bölümlerinin başlangıcında görünür. Sadece bölüm sıfır olmayan bir boyuta sahipse görünür. bölüm adı ELF bölümünün adı, uzunluk ondalık bölümün uzunluğudur. Bu semboller, semboller mevcut olmadığında ksymoops harita adreslerini bölümlere yardımcı olur.

__insmod_modulename_Ppersistent_filename

Yalnızca, modülün kalıcı veriler olarak işaretlenmiş bir veya daha fazla parametresi ve kalıcı verileri kaydetmek için bir dosya adı varsa, insmod tarafından yaratılır (bkz. -e , yukarıda).

Çekirdek Oops modüllerinde hata ayıklama ile ilgili diğer bir problem, / proc / ksyms ve / proc / modules içeriğinin Oops ve log dosyasını işlediğinizde değiştirebilmesidir. Bu sorunun üstesinden gelmeye yardımcı olmak için, eğer dizin / var / log / ksymoops varsa, insmod ve rmmod , / date /% Y% m önekiyle / proc / ksyms ve / proc / modules / var / log / ksymoops dizinlerini otomatik olarak kopyalayacaktır. % d, H%% M% s`. Sistem yöneticisi, bir Oops’ı hata ayıklaması sırasında kullanılacak anlık görüntü dosyalarını ksymoops’a söyleyebilir. Bu otomatik kopyayı devre dışı bırakmak için bir anahtar yoktur. Oluşmasını istemiyorsanız, / var / log / ksymoops oluşturmayın . Bu dizin varsa, root'a ait olmalı ve 644 veya 600 modu olmalı ve bu komut dosyasını her gün çalıştırmalısınız. Aşağıdaki betik insmod_ksymoops_clean olarak yüklenmiştir .

Bilmeniz Gereken Temel Bilgiler

ADI

insmod - yüklenebilir çekirdek modülü takın

ÖZET

insmod [-fhkLmnpqrsSvVxXyYN] [-e devam_adı ] [-o modül_adı ] [-O blob_name ] [-P öneki ] modülü [ sembol = değer ...]