Moduł „Hello World”:
To jest prosty moduł jądra, który po włożeniu do jądra Linuxa wydrukuje wiadomość jako „Hello World”. A po usunięciu wydrukuje wiadomość jako „pa pa świat!". To są dwie funkcje, które będziemy obsługiwać w module jądra „Hello World”.
Przykładowy przykład kodu modułu jądra:
#włączać
#włączać
#włączać
Module_license („gpl”);
Module_description („Witaj świat!");
static int __init hello_init (void)
printk (kern_info "hello świat \ n");
powrót 0;
statyczna void __exit hello_exit (void)
printk (kern_info "pa pa świat \ n");
module_init (hello_init);
module_exit (hello_exit);
Przykładowy Makefile do skompilowania modułu jądra:
OBJ-M = Hello-World.o
Wszystko:
Make -c/lib/modules/$ (shell uname -r)/build/m = $ (pwd) moduły
czysty:
Make -c/lib/modules/$ (shell uname -r)/build m = $ (PWD) Clean
Kroki w celu skompilowania modułu jądra:
Skopiuj oba fragment kodu powyżej do tego samego katalogu w hostku kompilacji, jak pokazano poniżej:
sushilrathore-2: ~/hello-world $ ls
Witaj świecie.c Makefile
sushilrathore-2: ~/hello-world $
Wykonaj polecenie Make, jak pokazano poniżej i zobaczymy dzienniki jak poniżej:
sushilrathore-2: ~/hello-world $
Make -c/lib/moduły/4.15.0-163-generyczne/build/m =/home/cinauser/hello-world moduły
Make [1]: Wprowadzanie katalogu '/usr/src/linux-headers-4.15.0-163-generalny '
CC [m]/home/cinauser/hello-world/hello-world.o
Moduły budowlane, etap 2.
Modpost 1 moduły
Cc/home/cinauser/hello-world/hello-world.mod.o
Ld [m]/home/cinauser/hello-world/hello-world.Ko
Make [1]: opuszczenie katalogu '/usr/src/linux-headers-4.15.0-163-generalny '
sushilrathore-2: ~/hello-world $
Z powyższych dzienników możemy zobaczyć, że wykonaliśmy polecenie Make i otrzymamy niektóre pliki utworzone w tym samym katalogu, w którym mamy C i Makefile. "Witaj świecie.Ko ”to plik, na który powinniśmy patrzeć. To jest plik obiektu jądra. Jest to moduł, który wkładamy do jądra Linux.
Kroki, aby dodać moduł Hello-World do jądra Linux:
Do wstawienia modułu jądra można użyć polecenia Insmod do jądra Linux. Poniżej znajduje się dziennik, który pokazuje proces korzystania z insmoda.
sushilrathore-2: ~/hello-world $ sudo insmod hello-world.Ko
sushilrathore-2: ~/hello-world $
Kroki, aby zobaczyć wiadomość wydrukowaną przez Hello-World:
„DMESG” to polecenie można użyć do zobaczenia wyjścia modułu jądra Hello World. Poniżej znajduje się dziennik, który pokazuje proces korzystania z polecenia DMESG.
sushilrathore-2: ~/hello-world $ sudo dmesg | Grep -i Hello
[10500712.434672] Hello World
sushilrathore-2: ~/hello-world $
Powyżej jest proces dynamicznego dodawania modułu jądra. Jest kompilowany poza obrazem jądra, a w czasie wykonywania dodaje się do obrazu jądra. W ten sposób, gdy jądro działa, możemy rozszerzyć funkcjonalność jądra.
Linux zapewnia ten sposób rozszerzenia funkcji jądra bez upuszczania systemu. Użytkownik powinien być bardzo ostrożny podczas pisania takich modułów. Podczas rozładunku modułu jądra użytkownik powinien dokładnie wydać wszystkie zasoby, które zostały przydzielone po załadowaniu modułu.
Moduł Hello World można również dodać jako część obrazu jądra. Jeśli użytkownik chce dodać aplikację Hello World jako część obrazu jądra.
Można wykonać następujące kroki, aby to osiągnąć:
Jak skompilować moduł, który został dodany w tych 4 krokach.
Kernel Makefile określa „moduły” jako cel kompilacji, którego można użyć do budowy wszystkich modułów w jądrze Linux. Gdy użytkownik wydał „Make Modules”, nasz moduł Hello World/Nowy również zostaje skompilowany i otrzymujemy .plik KO modułu.
Ten sposób kompilacji jest łatwy, gdy mamy potrzebę zbudowania pełnego jądra i naszego modułu, który chcemy dodać do systemu jako moduł załadowany.
Wniosek
Omówiliśmy prosty moduł jądra Hello World i różne sposoby kompilacji modułu.
Omówiliśmy również sposoby dodania modułu do jądra Linux. Odnieśliśmy się również do przykładowego kodu i makefile dla kompilacji. Ponadto pokazaliśmy koncepcje z eksperymentalnymi dziennikami.