Ostatnio niektórzy czytelnicy napotkali potężny kod błędu ostrzeżenia o błędzie podczas wstawiania nieprawidłowego formatu modułu. Ten problem występuje z wielu powodów. Omówmy je poniżej.
Zatwierdzono: Fortect
“Nieprawidłowy format jednostki” jest zwykle komunikatem o błędzie, jaki otrzymuje Twoja organizacja podczas próby zbudowania modułu pasującego do innego jądra (na przykład upewnij się,że moje nagłówki/źródła jądra czy osoba, która skutecznie zbudowała moduł odpowiada odmianie jądra, której możesz użyć .
Właśnie stworzyłem swój moduł pierwszej osoby, kurs World Hello zgodnie z LDD3. Przepraszamy, wystąpił ten błąd:
insmod: Błąd przetwarzania './hello.ko': -1 Nieprawidłowy format segmentu.
$ uname -r2.6.38-8 ogólne
Dlaczego dostaję uszkodzony format modułu w insmod?
Używam swojego unikalnego jądra (4.8.15-rt10) i otrzymuję moduł, który wydaje się być zainstalowany na tym samym jądrze z tym samym .config (wdrożyłem wszystko). Kiedy w pełni wykorzystam insmod do wstawienia modułu, otrzymuję kolejny błąd „Nieprawidłowy format modułu”.
sudo apt-cache szukaj linux-sourcelinux-source — odniesienie do jądra Linux z łatami dla Ubuntulinux-source-2.6.38 - jądro Linuksa dla oryginalnego 2.6.38 z łatkami Ubuntu$ sudo instaluje apt-get linux-source-2.6.38
gotówka ls / usr / src /Linux-headers-2.6.38-8 linux-source-2 .6.38 vboxguest-5.0.10Linux-headers-2.6.38-8-generic linux-source-2.6.38.tar.bz2
$ sudo clubpenguin /boot/config-2.6.38-8-generic ./. Utwórz konfigurację$ sudo menuconfig - Załaduj większość pliku .configzarobić $$ utwórz moduły
RR make -C /usr/src/linux-source-2.6.38/linux-source-2.6.38 M = `pwd` modules
obj-m: = hello.o
gotówka sudo insmod hello_world.koinsmod: Błąd podczas wstawiania hello_world.ko: -1 Nieprawidłowy format modułu
cześć: nie zgadzam się z docelową wersją module_layout
Zauważyłem również, że niektóre nagłówki Linuxa mogą być -2.26.38-generic
, a wersja źródłowa zawiera 26.38, czy to jest rodzaj problemu? ale tak naprawdę nie znalazłem mojego rozwiązania linux-source-2.26.38-generic
online.
Aktualizacja statusu:Dowiedziałem się, że initial / lib / modules / dollar (name -r) / build / Makefile wyświetla wersję jądra startowego organizacji:
WERSJA jest równa 2POZIOM ŁATY = 6POZIOM PU to 38.EKSTRAWERSJA = 0,2
Oprócz tego systemu pobieram Linux-2.6.38.2, ale nadal otrzymuję ten sam błąd.
Dlaczego Ubuntu- insmod nie pozwala im na wstawienie modułu?
Skompilowałem mój przykładowy moduł, ALE pojawiło się ostrzeżenie, które często automatycznie może być ważną wskazówką, dlaczego ta ilość nie działa. Ostrzeżenie należało do tej osoby: OSTRZEŻENIE: Brakowało zrzutu wersji symbolu podobnego do /usr/src/linux-3.0.0/Module.symvers; Mody nie mają zależności, ale są też wersje modów.
Zauważyłem również, że w -b znajduje się kolekcja:
CONFIG_VERSION_SIGNATURE = "Ubuntu / boot lub config - $ (uname 2.6.38-8.42-generic 2.6.38.2"
Czy ktoś wie, co to oznacza? Nie powinienem tego weryfikować w pliku konfiguracyjnym jądra, który robię.
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Jądro, z którego tworzysz własny segment jądra i do którego faktycznie wstawiasz element, musi mieć ten sam schemat. Jeśli nie chcesz się tym zajmować, możesz pomóc następującemu Makefile.
objâˆ''m + oznacza helloâˆ'world.oWszystko: do 'C / lib / modules lub $ (uname powłoki' r) / build M jest równy modułom $ (PWD)czysty: do 'C / lib dla każdego modułu / $ (uname powłoki 'r) / ulepszyć M = $ (PWD) clean
Często zalecam, abyś od razu został rootem, jeśli to możliwe, a także najpierw przeszedł przez linię
buck sudo cp /boot/config-2.6.38-8-generic ./.config
$ su#cp /boot/config-2.6.38-8-generic ./.config#insmod hello_world.ko
ZIEL: = hello-worldOSTRZEŻENIE: równa się -W -Wall -Wstrict-Prototypes -Wmissing-PrototypesINCLUDE: oznacza -isystem lib / modules / `uname -r` / build per includeCFLAG: = -O2 -DMODULE -D__KERNEL__ $ WARN rrr WŁĄCZCC: = gcc-3,0$ TARGET.o: $ TARGET.c.FONIA: czystaczysty: rm -rf $ TARGET.o
Twój moduł jest zintegrowany z jądrem historii (właśnie zaktualizowany).
Pamiętaj o ponownym uruchomieniu, aby upewnić się, że używasz najnowszego jądra.
Upewnij się, że bardzo działające jądro i zainstalowana wersja kernel-headers
są zgodne.
Dlaczego może być mój format modułu jest nieprawidłowy w Linuksie?
Parametry jądra również mogą drastycznie zmienić sposób działania jądra, cóż, jeśli nie zbudujesz jądra kogoś innego na podstawie poprawnych parametrów, niektóre nie będą pasować, powiedziałbym, że jądro, i to jądro słusznie odmówi pozytywnego rozruchu. Odwiedź stronę główną Corona688! 1.IP-siedzisko
Możesz teraz ponownie skompilować do swojego segmentu dla prawidłowego jądra:
cd rtl8188euczystyZrób wszystkozainstalowaćczujnik modulacji -ur 8188euSonda mod 8188eu
Niestety, możesz to zrobić za każdym razem, gdy aktualizujesz swoje nowe jądro, dopóki ten sterownik nie stanie się częścią głównego pakietu jądra.
Czy jakiś Hello World moduł w ldd3 jest nieprawidłowy?
Ledwo stworzyłem swój pierwszy moduł właściciela samochodu, moduł Hello World oparty na LDD3. Przepraszamy, wystąpił ten błąd: insmod: Błąd podczas wstawiania ./hello.ko: -1 Nieprawidłowy format komponentu.
Prawdopodobnie będzie dostępna funkcja o nazwie Obsługa modułów dynamicznego jądra, która może automatycznie przeskakiwać na tworzenie modułów z drzewa, gdy zajdzie potrzeba aktualizacji jądra, aby zainstalować pieniądze związane z dodatkowymi Praca. Może się okazać, że zwykle jest więcej wysiłku, aby było warto.
To jest druga strona życia na skraju systemu 😉
can_sleep ();WARN (! Intel_irqs_enabled (dev_priv), "IRQ wyłączone");
Zaktualizowałem główny kompilator gcc do wersji 3.4.3 i wypróbowałem, który może zainstalować sterownik ALSA-1.09rc4a (najnowszy). Wszystko wyglądało dobrze, przynajmniej żadnych błędów, ale mimo to, kiedy uruchamiam niektóre moduły AS, otrzymuję błąd. Używam RedHat 8 w jądrze Linux 2.6.11.11 z kartą ens1371. Oto ich kopia powszechnego błędu.
UWAGA! Błąd długi czas wstawiania snd_page_alloc (/lib/modules/2.6.1.11/kernel/sound/acore/snd-page-alloc.ko): nieprawidłowy moduł błąd dysk twardy komputera
UWAGA: wstawianie snd (/lib/modules/2.6.1.11/kernel/sound/acore/snd.ko): nieprawidłowy format kursu
OSTRZEŻENIE: błąd przy wklejaniu snd_timer (/lib/modules/2.6.1.11/kernel/sound/acore/snd-timer.ko): nieprawidłowy format
OSTRZEŻENIE: błąd programu podczas wklejania snd_pcm (/lib/modules/2.6.1.11/kernel/sound/acore/snd-pcm.ko): nieprawidłowy format tylko dla elementu
OSTRZEŻENIE: Błąd podczas wklejania snd_ac97_codec (/lib/modules/2.6.1.11/kernel/sound/pci/ac97/snd-ac97-codec.Invalid kb): format funkcji
OSTRZEŻENIE: Błąd podczas wklejania snd_seq_device (/lib/modules/2.6.1.11/kernel/sound/acore/seq/snd-seq-device.ko): niedopuszczalny format urządzenia
OSTRZEŻENIE: błąd podczas wklejania snd_rawmidi (/lib/modules/2.6.1.11/kernel/sound/acore/snd-rawmidi.ko): zły format kursu
SERIOUS: Błąd podczas wprowadzania (/lib/modules/2 snd_ens1371.6.11.11 dla każdego jądra/sound/pci/snd-ens1371.ko): nieprawidłowy format elementu