
Re: How is made ... in Linux
Despre ... "insmod"insmod este un utilitar Linux de nivel scăzut care încarcă un modul de kernel
(
fișier .ko) în kernelul în execuție prin copierea fișierului binar ELF în memoria
kernelului, rezolvarea adreselor de simboluri, aplicarea parametrilor și apoi
transferarea controlului către rutina de inițializare a modulului, ceea ce îl face
o modalitate directă, dar de bază, de a extinde funcționalitatea kernelului
pentru lucruri precum
driverele, comanda este adesea utilizată atunci când
gestionarea automată a dependențelor de către
modprobe nu este necesară.
Cum funcționează insmod - Totul incepe cu o cerere în spațiul utilizatorului, executați ...
Code:
insmod /path-to-module/module.ko [opțiuni]
- Aceasta genereaza un apel de sistem:
insmod utilizează un apel
de sistem pentru kernel pentru a spune kernelului să încarce ceva.
- Preluarea controlului de către kernel: nucleul primește cererea și începe
procesul de încărcare.
- Memorie și copiere: alocă memorie temporară, copiază fișierul binar al
modulului (
fișier.ko) din spațiul utilizatorului în memoria kernelului și verifică
structura fișierului ELF.
- Legături și corecții: nucleul rezolvă referințele, simbolurile din cadrul
modulului, la funcții/date exportate de kernel (de exemplu, printk), corectand
codul modulului acolo unde este necesar.
- Gestionarea parametrilor: formatează orice opțiuni furnizate în linia de
comandă și le face disponibile modulului.
- Inițializare: in final, kernelul apelează funcția
module_init() a modulului,
rulând codul său de configurare.
Erori: Majoritatea erorilor sunt raportate de kernel si vizibile cu
"dmesg".
Caracteristici cheie- Nivel scăzut: este mai simplu decât
modprobe și nu gestionează
automat dependențele modulului.
- Încărcare directă: incarcă un singur fișier specificat din orice locație.
- Sarcina kernelului: legăturile și configurarea propriu-zise au loc în
interiorul kernelului.
- "dmesg" pentru detalii: Verificați dmesg pentru erori detaliate.
Comentarii- textul face o referinta implicita la existenta a doua spatii ... spatiul Kernel
si spatiul User , comunicarea intre cele doua este realizata prin apeluri sistem
-
module.ko este o portiune din codul driverului , compilata impreuna cu
acesta versiune de Kernel ! si incarcata prin
insmod- daca dispozitivul este unul compus , asa cum sunt tunerele interne sau
de cablu , trebuie incarcate prin comenzi distincte toate componentele
- intr-un receptor Enigma2 , aceste module
".ko" , compilate impreuna cu
Kernelul se gasesc la
/lib/modules/kernel-version/nume.ko