Moduły jądra: .o vs .ko

10

Wydaje się, że pliki zawierające moduły jądra są nazywane .o, przynajmniej to co ja zorientować patrząc na tutorial jak ten jeden . Jednak w moim oknie wyciskania Debiana te pliki wydają się być wywoływane .ko.

Będzie to zależeć od dystrybucji (lub Verison nich), czy pliki są nazywane .olub .ko, i są one mniej więcej takie same, inaczej?

zebonaut
źródło

Odpowiedzi:

11

Tutaj znalazłem następującą odpowiedź :

Krótka odpowiedź jest taka, że ​​plik .ko jest plikiem obiektowym połączonym z automatycznie wygenerowanymi strukturami danych jądra, które są wymagane przez jądro.

Plik .o jest plikiem obiektowym twoich modułów - wynikiem kompilacji plików c. System kompilacji jądra następnie automatycznie tworzy kolejny plik C z niektórymi strukturami danych opisującymi moduł jądra (o nazwie twój_moduł_kmod.c), kompiluje ten plik C w inny plik obiektowy i łączy plik obiektowy i plik obiektowy, który zbudował razem, aby utworzyć plik .ko plik.

Dynamiczny linker w jądrze, który jest odpowiedzialny za ładowanie modułów jądra, spodziewa się znaleźć strukturę danych, którą jądro umieściło w obiekcie kmod w pliku .ko i nie będzie w stanie załadować modułu jądra bez nich.

Również z tego źródła , cytując tldp : Do wersji jądra 2.4 było to „.o”, a od 2.6 to „.ko”.

J. Taylor
źródło
3

Wydaje się, że to stare howto (samouczek), w rzeczywistości zostało napisane w 2005 roku. Kiedy jądro Linuksa miało wersję 2.4.x, moduły miały rozszerzenie .o, natomiast w wersji 2.6 stały się .ko

asklepix
źródło