Lucas De Marchi i Gustavo Barbieri z ProFUSION opracowali bibliotekę libkmod i zestaw narzędzi kmod. Celem nowego projektu jest zaoferowanie innym programom potrzebnej elastyczności i łatwej kontroli nad wstawianiem, usuwaniem, konfiguracją i wykazem modułów jądra Linux. Dzięki użyciu biblioteki jest możliwa interakcja z modułami jądra bez potrzeby polegania na innych narzędziach. Takie narzędzia brakowała od dawna, i było to jedno z życzeń z listy Plumbera dla Linuksa.
Cytując go:
zapewnić odpowiednią bibliotekę libmodprobe.so z module-init-tools:
wczesne narzędzie uruchamiania, instalatorów, sterownika instalacji dysków i dostępu do nich
informacje nt dostępnych modułów, w celu optymalizacji obsługi uruchamiania
Programiści poszli o krok dalej, i nie tylko oferują API do ładowania i usuwania modułów jądra, ale również inne proste operacje. Pierwszym użytkownikiem API będzie udev, który jest odpowiedzialny za sprawdzanie dostępnego sprzętu, tworzeniu dowiązań do urządzeń w /dev i ładowaniu modułów jądra dla wykrytego sprzętu. W jądrze dystrybucji jest niezwykle prosto zrobić większość rzeczy, jako modułów. Udev czyta system plików /sys w celu sprawdzenia dostępnego sprzętu i próbuje załadować potrzebne moduły. Potem tłumaczy setki zapytań do programu modprobe, dzięki czemu wiadomo, które z nich są już załadowane, a które wbudowane w jądro. Dzięki kmod cała operacja jest wykonywana przy pomocy kilku linii kodu, bez potrzeby konfiguracji i indeksowania już otwartych i sprawdzonych modułów.
Były już także przeprowadzone rozmowy z Kay Sievers, odpowiedzialnym za udev, i Lennart Poettering, zajmującym się systemd, aby zaimplementować współpracę biblioteki z udev i systemd.
Przykładowy kod:
W celu dodania modułu z nazwą bez żadnych opcji i dziwnych konfiguracji, jest zalecane zrobienie tego w ten sposób:
struct kmod_ctx *ctx = kmod_new(NULL, NULL);
struct kmod_module *mod;
kmod_module_new_from_name(ctx, name, &mod);
kmod_module_insert_module(mod, 0, NULL);
kmod_module_unref(mod);
kmod_unref(ctx);
Narzędzia
Poza samą biblioteką, przeprojektowano narzędzia module-init-tools na bazie nowego API, które stworzono. W pierwszej wersji są zapewniane kompatybilne binarki dla lsmod, rmmod, insmod i modprobe (z pewnymi brakami funkcjonalności). Następna wersja ma zapewnić owe braki, a także dodać wsparcie dla depmod i modinfo.
Licencja
Całość jest wydawana na licencji GPLv2 i późniejsze.
Plan wydawniczy
kmod 2
Zapewnienie API do brakujących cech w kmod-modprobe, szczególnie: zrzut konfiguracji i indeksowanie, proste zależności, polecenia instalacji i usuwania. Nadal będzie brakować funkcjonalności manipulacji ELF, jednakże będą zapewnione wszystkie narzędzia dostępne w module-init-tools. Kilka z nich, jak depmod mogą być skopiowane z module-init-tools dla późniejszych konwersji
kmod 3
Ma zapewniać pojedyncze narzędzie kmod, które będzie emulowało wszystkie inne, akceptując komendy, takie jak kmod list, kmod remove, kmod insert. Dystrybucje mogą wtedy używać symlinków z dostępnych narzędzi, do programu kmod i będzie możliwe ubicie 'kmod-*’, które zostało przedstawione w kmod 1.