2011-09-20 41 views
7

Podczas budowania sterownika jądra poza drzewem, , uruchamiam się w ten sposób w katalogu sterowników, gdzie KERNELDIR jest albo ścieżką do źródła jądra, albo do nagłówków.Poprawnie wyeksportuj nagłówki Linuksa, moduły

make -C $(KERNELDIR) M=$(PWD) modules 

gdy próbuje zbudować nagłówków się przy użyciu:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

znajdę eksport nieodpowiedni do budowy modułów przeciw (bez pełnego drzewa źródłowego jądra) kilka plików i folderów wydają się być brakuje, jak Makefile, skrypty, include/generated/autoconf.h lub include/config/auto.conf itp

Debian robi rzeczy w sposób użytkowej, jak to opisano w rules.real, choć nie więcej niż jest to opisane w Documentation/make/headers_install.txt, co zobaczyć ms nie jest "standardowym" sposobem.

W skrócie: w jaki sposób poprawnie eksportować nagłówki linuxowe, więc mogę budować z nimi moduły zewnętrzne?

+0

Sam miałem problemy z 'autoconf.h'. Jeśli dobrze pamiętam, skopiowałem go z pobliskiego folderu, w którym zbudowałem jądro – Shahbaz

Odpowiedz

2

Wierzę, że jądro powoduje, że plik docelowy dla pliku headers_install jest przeznaczony do produkcji nagłówka systemu Linux do produkcji biblioteki C i łańcucha narzędzi, a nie w celu umożliwienia budowania z modułów jądra drzewa bez pełnego skonfigurowanego kodu źródłowego jądra .

Tak naprawdę, domyślam się, że budowanie z modułów jądra drzewa bez pełnego kodu źródłowego jądra nie jest obsługiwane i jest w rzeczywistości "hack" utworzonym przez dystrybucje.

5

headers_install służy do eksportu zestawu plików nagłówkowych odpowiednich do użycia z punktu widzenia przestrzeni użytkownika. Jest to interfejs API jądra ujawniony w przestrzeni użytkownika. Załóżmy, że tworzysz nowy wspaniały ioctl ze strukturą danych custome. Jest to rodzaj informacji, których nie znasz, aby program użytkownika mógł korzystać z Twojego wspaniałego nowego ioctl.

Jednak wszystko, co nie jest widoczne z przestrzeni użytkownika, czyli "prywatne" dla jądra, lub inaczej wewnętrznego interfejsu API, nie jest narażone na działanie przestrzeni użytkownika.

Aby zbudować moduł z drzewa, potrzebujesz pełnego skonfigurowanego drzewa źródłowego lub nagłówków jądra, które są pakowane przez Twoją dystrybucję. Poszukaj na przykład pakietu linux-headers lub linux-kernel-headers na Ubuntu/Debian.