Użytkownik677
Gość
Miernik podziękowań 0%
29-04-2020, 12:11
(Ten post był ostatnio modyfikowany: 29-04-2020, 12:14 przez yahoob3.)
0 Usiłuję skompilować kernel 3.16.1 pod Linux Mint Cinamon 19.3 64 bit z kernelem defaultowym - 5.0.0.3 ponieważ mi ten kernel (3.16.1) pod swoim "macierzystym" Mintem 17.3 64bit - wspaniale i stabilnie pracuje. "Fabryczny" .config tego kernela (3.16.1) skompilowałem bez żadnych zmian i to właśnie ten kernel tak fajnie na tym starym Mincie pracuje. Uzyskane paczki headers.xxx.deb i images.xxx.deb postanowiłem przenieść pod współczesny Mint 19.3 i w nim już bez kompilacji zainstalować wcześniej skompilowany kernel. Rzecz na tym samym laptopie. Niestety - zainstalowany kernel wyrzuca mi : (initramfs) - robiąc stop w uruchamianiu. Postanawiam więc na tym nowym Mincie skompilować na nowo te źródła. Polecienia które wydaję to:
make clean, make mrproper, make menuconfig, a w nim : load i ładuję stary config173 (tak go nazwałem), potem save i zapisuję jako .config. Po wszystkim polecenie : make-kpkg clean i potem polecenie kompilacji :
make-kpkg --initrd --append-to-version=-short173 kernel_image kernel_headers
W "podziękowaniach" dostaję:
Kod: CC kernel/bounds.s
cc1: error: code model kernel does not support PIC mode
Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[3]: *** [kernel/bounds.s] Error 1
Makefile:944: recipe for target 'prepare0' failed
make[2]: *** [prepare0] Error 2
make[2]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
debian/ruleset/targets/common.mk:194: recipe for target 'debian/stamp/conf/kernel-conf' failed
make[1]: *** [debian/stamp/conf/kernel-conf] Error 2
make[1]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
/usr/share/kernel-package/ruleset/minimal.mk:93: recipe for target 'debian/stamp/conf/minimal_debian' failed
make: *** [debian/stamp/conf/minimal_debian] Error 2
Szukałem rozwiązania na tym forum, ale nie znalazlem, szukałem na forach zagranicznych - trochę jest z takim subjectem w tytule, ale nie "pod tym kątem". Proszę o jakąś pomoc.
Znaczniki CODE mile widziane. /YB3
Liczba postów: 4 206
Liczba wątków: 76
Dołączył: Dec 2018
Reputacja:
System: Inny
Środowisko graficzne: Xfce
Architektura CPU: 64bit
Inny System: Debian testing/sid
Miernik podziękowań 39%
29-04-2020, 13:56
(Ten post był ostatnio modyfikowany: 29-04-2020, 14:04 przez dedito.)
0 Podążaj za błędem cc1: error: code model kernel does not support PIC mode, który jak się dowiesz jest związany z nowszą wersją kompilatora.
Obejścia są dwa: albo użyć starszego kompilatora gcc w wersji 5 lub do makefile dopisać odpowiednią flagę.
1. Instalacja starszej wersji gcc
Kod: sudo apt install gcc-5
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
2.Dodanie flagi w pliku makefile
W pliku /usr/src/linux-headers-wersja_kernela/Makefile
odnajdź linijkę:
EXTRA_CFLAGS += $(CFLAGS_EXTRA)
i zmień na:
EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie
Użytkownik677
Gość
Miernik podziękowań 0%
0 Kod: sudo apt install gcc-5
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
2.Dodanie flagi w pliku makefile
W pliku /usr/src/linux-headers-wersja_kernela/Makefile
odnajdź linijkę:
EXTRA_CFLAGS += $(CFLAGS_EXTRA)
i zmień na:
EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie
Do poszukiwań stringu EXTRA_CFLAGS zaprzęgnąłem najpierw MC, a jak nic nie znalazł to zleciłem to proggramow Krusader (podobny do windowsowego Total Commander ), ale on też nic nie znalazł w pliki Makefile. Zostaje pierwsza opcja, zrobię za kilka godzin bo muszę teraz wyjść.
Liczba postów: 4 206
Liczba wątków: 76
Dołączył: Dec 2018
Reputacja:
System: Inny
Środowisko graficzne: Xfce
Architektura CPU: 64bit
Inny System: Debian testing/sid
Miernik podziękowań 39%
29-04-2020, 14:54
(Ten post był ostatnio modyfikowany: 29-04-2020, 14:58 przez dedito.)
0 To ewentualnie flaga KBUILD_CFLAGS += -fno-pie
Zresztą pokaż co tam masz.
U mnie z kernela 3.16 mam tak:
Kod: cat /usr/src/linux-headers-3.16.0-4-common/Makefile | grep _CFLAGS
KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
KBUILD_CFLAGS_KERNEL :=
KBUILD_CFLAGS_MODULE := -DMODULE
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
KBUILD_CFLAGS += -O2
KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
KBUILD_CFLAGS += $(stackp-flag)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
KBUILD_CFLAGS += -fomit-frame-pointer
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
KBUILD_CFLAGS += -g
KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \
KBUILD_CFLAGS += -pg $(CC_USING_FENTRY)
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
KBUILD_CFLAGS += $(call cc-option,-Werror=implicit-int)
KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes)
KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
KBUILD_CFLAGS += $(KCFLAGS)
To bym się dopisał na koniec:
KBUILD_CFLAGS += $(KCFLAGS) -fno-pie
Użytkownik677
Gość
Miernik podziękowań 0%
0 OK - wykonałem to polecenie - oto wynik:
Kod: cat /usr/src/linux-3.16.1/Makefile | grep _CFLAGS
KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
KBUILD_CFLAGS_KERNEL :=
KBUILD_CFLAGS_MODULE := -DMODULE
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
KBUILD_CFLAGS += -O2
KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
KBUILD_CFLAGS += $(stackp-flag)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
KBUILD_CFLAGS += -fomit-frame-pointer
KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
KBUILD_CFLAGS += -g
KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \
KBUILD_CFLAGS += -pg $(CC_USING_FENTRY)
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
KBUILD_CFLAGS += $(call cc-option,-Werror=implicit-int)
KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes)
KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
KBUILD_CFLAGS += $(KCFLAGS)
Liczba postów: 4 206
Liczba wątków: 76
Dołączył: Dec 2018
Reputacja:
System: Inny
Środowisko graficzne: Xfce
Architektura CPU: 64bit
Inny System: Debian testing/sid
Miernik podziękowań 39%
29-04-2020, 18:15
(Ten post był ostatnio modyfikowany: 29-04-2020, 18:15 przez dedito.)
0 No masz praktycznie to samo co ja.
Dopisz się do ostatniej znalezionej linijki jak to już zaproponowałem.
Użytkownik677
Gość
Miernik podziękowań 0%
0 (29-04-2020, 18:15)dedito napisał(a): No masz praktycznie to samo co ja.
Dopisz się do ostatniej znalezionej linijki jak to już zaproponowałem. Przerobiłem oba te warianty, ale żaden z nich nie "poszedł" dobrze. Po dopisaniu -fno-pie dostałem co poniżej:
Kod: include/linux/compiler-gcc.h:106:1: fatal error: linux/compiler-gcc7.h: Nie ma takiego pliku ani katalogu
#include gcc_header(__GNUC__)
^~~~
compilation terminated.
Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[3]: *** [kernel/bounds.s] Error 1
Makefile:944: recipe for target 'prepare0' failed
make[2]: *** [prepare0] Error 2
make[2]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
debian/ruleset/targets/common.mk:194: recipe for target 'debian/stamp/conf/kernel-conf' failed
make[1]: *** [debian/stamp/conf/kernel-conf] Error 2
make[1]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
/usr/share/kernel-package/ruleset/minimal.mk:93: recipe for target 'debian/stamp/conf/minimal_debian' failed
make: *** [debian/stamp/conf/minimal_debian] Error 2
Failed to create a ./debian directory: No such file or directory at /usr/bin/make-kpkg line 970.
Przy drugiej opcji - czyli instalacja gcc-5 i zmiana dowiązania symbolicznego i wycofanie zmian z pierwszej opcji dostałem to co poniżej:
Kod: kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
/*
^
Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[3]: *** [kernel/bounds.s] Error 1
Makefile:944: recipe for target 'prepare0' failed
make[2]: *** [prepare0] Error 2
make[2]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
debian/ruleset/targets/common.mk:194: recipe for target 'debian/stamp/conf/kernel-conf' failed
make[1]: *** [debian/stamp/conf/kernel-conf] Error 2
make[1]: Opuszczenie katalogu '/usr/src/linux-3.16.1'
/usr/share/kernel-package/ruleset/minimal.mk:93: recipe for target 'debian/stamp/conf/minimal_debian' failed
make: *** [debian/stamp/conf/minimal_debian] Error 2
Failed to create a ./debian directory: No such file or directory at /usr/bin/make-kpkg line 970.
Liczba postów: 4 206
Liczba wątków: 76
Dołączył: Dec 2018
Reputacja:
System: Inny
Środowisko graficzne: Xfce
Architektura CPU: 64bit
Inny System: Debian testing/sid
Miernik podziękowań 39%
30-04-2020, 13:40
(Ten post był ostatnio modyfikowany: 30-04-2020, 13:44 przez dedito.)
0 Co do pierwszej opcji: z tego co doczytałem, te starsze kernele nie skompilują się na GCC-7, potrzeba starszego kompilatora, z tego co piszą to nawet GCC-5 jest zbyt wysoką wersją i trzeba użyć GCC serii 4..
W drugim przypadku wygląda, że może tu trzeba jeszcze dodatkowo ustawić te flagi z pierwszej opcji.
Mam jakiś bardzie szczegółowy poradnik do tych opcji https://lists.ubuntu.com/archives/kernel...77178.html
Cytat:1 file changed, 6 insertions(+)
diff --git a/Makefile b/Makefile
index dda982c..f96b174 100644
--- a/Makefile
+++ b/Makefile
@@ -608,6 +608,12 @@ endif # $(dot-config)
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux
+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie)
+
# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# values of the respective KBUILD_* variables
ARCH_CPPFLAGS :=
--
2.8.1
Użytkownik677
Gość
Miernik podziękowań 0%
0 (30-04-2020, 13:40)dedito napisał(a): Co do pierwszej opcji: z tego co doczytałem, [..] Zastanawia mnie fakt dlaczego dobrze skompilowany i dobrze pracujący kernel pod Mint 17.3 64bit o którym napisałem inicjując wątek - nie chce pracować pod nowym Linuxem 19.3 64 bit. Jeśli by znaleźć powód to pewno była by najkrótsza droga do osiągnięcia celu bo zainstalowanie Mint 17.3 to jest moment - potem kompilacja - może z jakimiś opcjami, może też z parametrami w poleceniu kompilacji.
Liczba postów: 4 206
Liczba wątków: 76
Dołączył: Dec 2018
Reputacja:
System: Inny
Środowisko graficzne: Xfce
Architektura CPU: 64bit
Inny System: Debian testing/sid
Miernik podziękowań 39%
0 A jakiś konkretny komunikat się pojawia poza tym initrams?
|