Pobrałem bity kodu przestrzeni użytkownika, który napisałem i przekonwertowałem, aby działał w przestrzeni jądra (tj. Używając kmalloc(), itp.), To nie jest takie trudne . Jednakże ograniczasz się do zrozumienia przez jądro C, a nie przestrzeni użytkownika, która różni się nieznacznie, szczególnie w przypadku różnych standardowych typów int.
Po prostu łączenie z przestrzenią użytkownika DSO nie jest możliwe - jądro Linuxa jest monolityczne, całkowicie samoistne. Nie korzysta z libc użytkownika, bibliotek ani innych bitów, jak zauważyli inni.
9/10 razy, znajdziesz to, czego potrzebujesz gdzieś w jądrze.Jest bardzo prawdopodobne, że ktoś inny wpadł na taką samą potrzebę i napisał kilka funkcji statycznych w jakimś module, aby zrobić to, co chcesz. Po prostu złap je i wykorzystaj ponownie.
W przypadku krypto, jak powiedzieli inni, po prostu użyj tego, co jest w jądrze. Należy pamiętać, że trzeba je włączyć w kconfig, co może się zdarzyć lub nie, w zależności od tego, co wybierze użytkownik podczas budowania. Tak więc, uważaj na zależności i bądź wyraźny, być może będziesz musiał zhakować kilka wpisów w kconfig, które również wybiorą API do kryptografii, które chcesz, kiedy twój moduł zostanie wybrany. To może być trochę uciążliwe przy budowaniu z drzewa.
Tak więc z jednej strony "po prostu kopiujemy i zmieniamy nazwy, dodając ogólny nadmiar", z drugiej strony "mówisz ludziom, że muszą mieć pełne źródło jądra". To jedno z dziwactw, które pochodzą z monolitycznego jądra.
Z mikrojądrem prawie wszystko działa w przestrzeni użytkownika, bez obaw o połączenie z OSD dla niektórych sterowników ... to nie problem. Proszę nie przyjmować tego oświadczenia jako wskazówki do ponownego rozpoczęcia filozofii projektowania jądra w komentarzach, co nie wchodzi w zakres tego pytania.