Czy istnieje skuteczny sposób (być może przez nadużywanie gcc preprocesor?), Aby uzyskać zbiór pozbawionych źródeł jądra, gdzie cały kod nie jest konieczna w świetle na .config jest pominięta?źródła jądra Linux Strip według .config
Odpowiedz
Cóż, kilka kroków do rozwiązania.
Po pierwsze, można uzyskać używanych poleceń kompilatora przez
make KBUILD_VERBOSE=1 | tee build.log
grep '^ gcc' build.log
Na razie mogę wybrać tylko jeden wiersz polecenia gcc do dalszych kroków. Na przykład kompilacji jądra/kmod.c, wygląda na to:
gcc <LIST OF MANY OPTIONS> -c -o kernel/kmod.o kernel/kmod.c
teraz usunąć opcję -c
, -o ...
i dodać -E
, tym samym wyłączając kompilację i pisanie wyjście preprocesora do ekranu. Ponadto dodaję -fdirectives-only
, aby zapobiec rozszerzaniu makr i -undef
, aby usunąć definicje makr zdefiniowane przez GNU. -nostdinc
w celu usunięcia standardowych nagłówków c jest już dodanych przez plik Makefile jądra.
Teraz zawiera ciągle włączone, a zatem rozszerzony na wyjściu preprocesora. W ten sposób przesyłam plik wejściowy przez grep, usuwając je: grep -v '#include' kernel/kmod.c
. Teraz pozostaje tylko jeden element include: autoconf.h jest zawarty w linii poleceń Makefile. Jest to świetne, ponieważ w rzeczywistości definiuje makra używane przez #ifdef CONFIG_...
do wybierania aktywnego kodu jądra.
Pozostaje tylko odfiltrować komentarze preprocesora i pozostałe #define
s z autoconf.h za pomocą grep -v '^#'
.
Cała rura wygląda następująco:
grep -v '#include' kernel/kmod.c | gcc -E -fdirectives-only -undef <ORIGINAL KERNEL BUILD GCC OPTIONS WITHOUT -c AND -o ...> - |grep -v '^#'
a wynik jest filtrowany wersja jądra/kmod.c zawierający kod, który jest faktycznie zbudować w kmod.o.
pytania pozostają: Jak to zrobić dla całego drzewa źródłowego? Czy istnieją pliki, które są faktycznie kompilowane, ale nigdy nie używane i pozbawione połączenia?
Kompilacja wszystko i wykorzystać atime, aby dowiedzieć się, które pliki nie były używane. Może nie być bardzo dokładne, ale prawdopodobnie warto spróbować.
- 1. co jest „prąd” w linux źródła jądra
- 2. zawiłych #define makro napotkał w źródła jądra Linux
- 3. Jak kodować moduł jądra Linux?
- 4. Moduły jądra Linux - zagrożenie bezpieczeństwa?
- 5. dystrybucja dla rozwoju jądra Linux
- 6. Wyświetl opcje konfiguracji jądra Linux
- 7. .vs \ config \ applicationhost.config w kontroli źródła
- 8. Czy jądra jądra systemu Linux są zamienione na dysk?
- 9. sortować według kolumny Linux
- 10. „Symbole Strip debugowania podczas kopiowania” i „Strip Związany Produkt”
- 11. Skanowanie repozytoriów danych sprężyn według Spring Config?
- 12. Przestrzeń jądra systemu Linux i przestrzeń użytkownika
- 13. Jak wykorzystać licznik z jądra systemu Linux?
- 14. Zwiększyć bufor jądra Linux więcej niż 2M
- 15. Kompilowanie jądra Linux-em z non-gcc
- 16. Podsystemy czasowe jądra Linux: Dokładność a rozdzielczość
- 17. Omówienie bufora okrągłego jądra systemu Linux
- 18. wysyłanie pakietów UDP od jądra Linux
- 19. Kompilacja krzyżowa modułu jądra Linux dla ARM na Ubuntu x86
- 20. Android: Jak zdobyć dzienniki jądra po awarii jądra?
- 21. Powershell config config redirect
- 22. Python strip() multiple characters?
- 23. strip verbose python regex
- 24. strip tags python
- 25. JavaScript Strip Vowels
- 26. Skompiluj moduł jądra Linux (2.6), w tym nagłówki niepochodzące z jądra
- 27. Czy odniesienia jądra jądra liczą obiekty jądra?
- 28. Czy po każdym etapie bisekcji należy wyczyścić drzewo źródłowe jądra systemu Linux?
- 29. Automatyczne #defines według Debug config/Release w Visual Studio 2010
- 30. Jak zmapować bufor jądra Linux do przestrzeni użytkownika?
To nie będzie działać jak najwięcej #ifdef ... wypowiedzi są oceniane wewnątrz pliki źródłowe więc nieużywane pliki i prawie nieużywane pliki są kompilowane też. – dronus
@dronus: To jedyny prosty sposób, jaki mogę wymyślić (następny to, w zasadzie, pisanie lub modyfikowanie preprocesora C). Powinno to usunąć takie rzeczy jak nieużywane moduły i archiwa. Czy naprawdę potrzebujesz go, by był dokładniejszy? Co próbujesz osiągnąć? –
Cóż, po prostu lubię uzyskać pewne informacje na temat działania jądra, ale prawie niemożliwe jest odczytanie 100 MB kodu. Więc lubię budować minimalne jądro i czytać jego prawdziwy kod. – dronus