Linux-Joker
Anmeldungsdatum: 6. Juli 2014
Beiträge: Zähle...
|
Hallo liebe Forumsmitglieder, ich hoffe ihr könnt mir bei meinem Problem helfen! Ich möchte gerne den Kernel 4.0 mit einer speziellen .diff Datei patchen. Hab soweit auch alles, wie im Wiki gemacht, aber jedes mal, wenn ich den Patch durchführen | patch -p1 < PATCHFILE.diff
|
kommt folgende Fehlermeldung: Hunk #1 FAILED at 2255.
1 out of 1 hunk FAILED - - saving rejects to file drivers/mmc/card/block.c.rej
patch unexpectedly ends in middle of line Was mache ich falsch? Ich habe schon ein wenig im Internet gesucht und anscheinend bedeutet der Fehler, dass der Patch mit den zu veränderten Dateien nicht zusammen passt. Den Patch musste ich von folgender Seite in eine Textdatei speichern: https://dev-nell.com/rpmb-emmc-errors-under-linux.html Leider weiß ich nicht, wie viel ich davon in die Textdatei schreiben soll.. ich bin da noch unerfahren. LG Linux-Joker
|
Thomas_Do
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8534
|
Linux-Joker schrieb: ich bin da noch unerfahren.
Da sollte man nicht unbedingt gleich mit einem gepatchten Kernel beginnen 😉. Willkommen im Forum! Was möchtest Du denn mit dem Patch erreichen? Oft gibt es einfachere oder bessere Wege das gleiche zu erreichen. Ansonsten nenne bitte die genaue Version und Quelle des Kernels und des Patches. Edit: ... und 15.04 ist noch nicht mal raus ...
|
Lidux
Anmeldungsdatum: 18. April 2007
Beiträge: 15916
|
Hallo Linux-Joker, Ohne Root Rechte geht es sowie so nicht ..... Gruss Lidux
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
Thomas Do schrieb: Da sollte man nicht unbedingt gleich mit einem gepatchten Kernel beginnen 😉.
Okay, vielleicht sollte ich lieber sagen, dass ich nur im Hinblick auf das Kompilieren eines Kernels noch recht unerfahren bin. Ansonsten kenne ich mich ganz gut mit Linux aus ☺ Das Patchen erscheint mir bis jetzt als einzige Lösung für mein Problem... (mehr dazu unten) Thomas Do schrieb: Willkommen im Forum! Was möchtest Du denn mit dem Patch erreichen? Oft gibt es einfachere oder bessere Wege das gleiche zu erreichen.
Also der Grund, warum ich den Kernel patchen möchte, bzw. warum ich überhaupt schon die noch nicht veröffentliche Ubuntu Version nutzte, liegt darin, dass ich ein Netbook (Asus Eeebook X205TA) besitzte, welches sich leider noch sehr schwer mit Linux tut. Es ist relativ neu und die Hardware ist noch kaum an Linux gewöhnt, sprich es gibt noch nicht für alles Treiber. Erst ab Kernel 4.0 (welchen ich übrigens auf für das Patchen nutze) funktioniert z.B. das integrierte WLAN. Den Kernel möchte ich patchen, weil der Bootvorgang aufgrund eines Fehlers immer relativ lange dauert. Der Patch würde diesen Fehler "beheben". Mehr dazu hier: https://dev-nell.com/rpmb-emmc-errors-under-linux.html. Besser könnte ich es auch nicht erklären 😉 Den Kernel habe ich von hier https://www.kernel.org/pub/linux/kernel/v4.x/ heruntergeladen. Lidux schrieb: Ohne Root Rechte geht es sowie so nicht .....
Falls du das Patchen an sich meinst, dann geht es auch ohne Root Rechte. Ich arbeite mit dem Kernel aus meinem Home Verzeichnis heraus. Klar, das Installieren des schon gepatchten Kernels würde Superuser-Rechte erfordern, aber soweit bin ich ja leider noch nicht :/ LG Linux-Joker
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
Linux-Joker schrieb:
Der Patch würde diesen Fehler "beheben".
Der soll nicht längst integriert sein? Das Posting ist 11 Monate alt. Du kannst es ja mal mit Mainline-Kernels testen, v4.0-vivid oder daily oder die drm-Varianten, solange die vollständigen Ubuntu-Kernels 4.0 noch nicht verfügbar sind (schätze, wird 2...3 Wochen nach Vivid-Release für 15.10 losgehen).
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
axt schrieb: Der soll nicht längst integriert sein? Das Posting ist 11 Monate alt. Du kannst es ja mal mit Mainline-Kernels testen, v4.0-vivid oder daily oder die drm-Varianten, solange die vollständigen Ubuntu-Kernels 4.0 noch nicht verfügbar sind (schätze, wird 2...3 Wochen nach Vivid-Release für 15.10 losgehen).
Also ich benutzte schon den Mainline Kernel v4.0-vivid. Leider hat man dort das Problem nicht behoben bzw. den Patch wohl nicht mit eingepflegt :/ Mein Problem ist, dass ich zwar die ganzen Kommandos parat habe, die ich zum Kompilieren und Patchen des Kernels benötige, aber ich weiß leider nicht, wie ich "sauber" an die .diff (Patch) Datei herankomme. Auf der Seite https://dev-nell.com/rpmb-emmc-errors-under-linux.html ist nur ein Textblock angegeben. Leider scheint das ein Auszug aus einer Email zu sein.. Ich weiß im Prinzip einfach nicht, welchen Teil des Textblockes ich in die Textdatei speichern soll. Vielleicht könnte mir da jemand helfen? LG Linux-Joker
|
HEiDi
Anmeldungsdatum: 21. September 2006
Beiträge: 80
|
Der Patch ersetzt nur diese eine Zeile (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/mmc/card/block.c?id=refs/tags/v4.0#n2255)
| if (card->part[idx].size) {
|
durch
| if (card->part[idx].size && !(card->part[idx].area_type & MMC_BLK_DATA_AREA_RPMB)) {
|
Das könnte man zur Not manuell ändern...
Es handelt sich hierbei aber um einen Workaround, der nicht in den offiziellen Kernel integriert werden wird, da er die Unterstützung für die RPMB-Partition einfach deaktiviert. Also eventuell mit Vorsicht zu genießen (siehe https://dev-nell.com/rpmb-emmc-errors-under-linux.html).
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
HEiDi schrieb: Der Patch ersetzt nur diese eine Zeile (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/mmc/card/block.c?id=refs/tags/v4.0#n2255)
| if (card->part[idx].size) {
|
durch
| if (card->part[idx].size && !(card->part[idx].area_type & MMC_BLK_DATA_AREA_RPMB)) {
|
Das könnte man zur Not manuell ändern...
Es handelt sich hierbei aber um einen Workaround, der nicht in den offiziellen Kernel integriert werden wird, da er die Unterstützung für die RPMB-Partition einfach deaktiviert. Also eventuell mit Vorsicht zu genießen (siehe https://dev-nell.com/rpmb-emmc-errors-under-linux.html).
Okay ich habe entsprechend deiner Vorgabe mal die Datei | /drivers/mmc/card/block.c
|
angepasst. Jetzt wollte ich mich daran setzten und den Kernel kompilieren. Leider stoße ich da auf unerwarteten Widerstand.. Ich habe mir den Source-Code vom Mainlinekernel 4.0 (Vivid Vervet) per git heruntergeladen. Soweit so gut. Nun gehe ich nach dem Wikieintrag Kompilieren vor und erstelle ein .config Datei mittels
| cp /boot/config-`uname -r` .config
|
Danach wollte ich den Kernel mit Hilfe von
| make-kpkg --initrd buildpackage
|
kompilieren, aber leider bricht er immer mit einer Fehlermeldung ab (übrigens auch, wenn ich den "unangetasteten" Kernel von Kernel.org nehmen): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | exec make kpkg_version=13.014+nmu1 -f /usr/share/kernel-package/ruleset/minimal.mk debian INITRD=YES
====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
This is kernel package version 13.014+nmu1.
test -d debian || mkdir debian
test ! -e stamp-building || rm -f stamp-building
install -p -m 755 /usr/share/kernel-package/rules debian/rules
for file in ChangeLog Control Control.bin86 config templates.in rules; do \
cp -f /usr/share/kernel-package/$file ./debian/; \
done
cp: cannot stat ‘/usr/share/kernel-package/ChangeLog’: No such file or directory
for dir in Config docs examples ruleset scripts pkg po; do \
cp -af /usr/share/kernel-package/$dir ./debian/; \
done
test -f debian/control || sed -e 's/=V/4.0.0/g' \
-e 's/=D/4.0.0-10.00.Custom/g' -e 's/=A/amd64/g' \
-e 's/=SA//g' \
-e 's/=I//g' \
-e 's/=CV/4.0/g' \
-e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g' \
-e 's/=ST/linux/g' -e 's/=B/x86_64/g' \
-e 's/=R//g' /usr/share/kernel-package/Control > debian/control
test -f debian/changelog || sed -e 's/=V/4.0.0/g' \
-e 's/=D/4.0.0-10.00.Custom/g' -e 's/=A/amd64/g' \
-e 's/=ST/linux/g' -e 's/=B/x86_64/g' \
-e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g' \
/usr/share/kernel-package/changelog > debian/changelog
chmod 0644 debian/control debian/changelog
test -d ./debian/stamp || mkdir debian/stamp
make -f debian/rules debian/stamp/conf/kernel-conf
make[1]: Entering directory '/home/test/KERNEL_DIR/linux-stable'
====== making target debian/stamp/conf/kernel-conf [new prereqs: ]======
make ARCH=x86_64 \
oldconfig;
make[2]: Entering directory '/home/test/KERNEL_DIR/linux-stable'
HOSTCC scripts/basic/fixdep
gcc: error trying to exec 'as': execvp: No such file or directory
scripts/Makefile.host:91: recipe for target 'scripts/basic/fixdep' failed
make[3]: *** [scripts/basic/fixdep] Error 1
Makefile:451: recipe for target 'scripts_basic' failed
make[2]: *** [scripts_basic] Error 2
make[2]: Leaving directory '/home/test/KERNEL_DIR/linux-stable'
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]: Leaving directory '/home/test/KERNEL_DIR/linux-stable'
/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 966.
|
Anscheinend gibt es da mehrere Fehler, die ich nicht so ganz verstehe. z.B fehlt ihm das Verzeichnis "debian" in der Kernel-Source. Das gibt es auch gar nicht, was mich aber wundert, denn der Kernel ist ja von Ubuntu angepasst und dementsprechend doch "debianisiert", oder? Wenn ich nach einer anderen Anleitung gehe, die ich im Netz gefunden habe, bekomme ich das selbe Problem mit dem Verzeichnis:
| fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
|
Da mekert er mir natürlich rum, weil es das Verzeichnis bzw. die Datei gar nicht existiert! Ich weiß echt nicht mehr weiter, was ich machen soll :/ Hoffe ihr könnt mir nochmal helfen. Habe ich da einen Denkfehler, oder muss ich den Kernel auf andere Weise kompilieren? LG Linux-Joker
|
Taomon
Supporter
Anmeldungsdatum: 30. Januar 2011
Beiträge: 8432
Wohnort: Digiworld
|
Hi, sudo apt-get install kernel-package Gruß Taomon
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
Taomon schrieb: Hi, sudo apt-get install kernel-package Gruß Taomon
Danke für die Antwort, aber das Paket hatte ich schon installiert. Dementsprechend leider keine Verbesserung ☹
|
HEiDi
Anmeldungsdatum: 21. September 2006
Beiträge: 80
|
Nanu, das Paket binutils ist aber installiert?
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
Ja das Paket hatte ich auch schon installiert gehabt.
|
HEiDi
Anmeldungsdatum: 21. September 2006
Beiträge: 80
|
Es sieht allerdings so aus, als ob gcc das Programm as , das in binutils enthalten ist, nicht findet.
Zeile 36: | gcc: error trying to exec 'as': execvp: No such file or directory
|
Linux-Joker schrieb: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | exec make kpkg_version=13.014+nmu1 -f /usr/share/kernel-package/ruleset/minimal.mk debian INITRD=YES
====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
This is kernel package version 13.014+nmu1.
test -d debian || mkdir debian
test ! -e stamp-building || rm -f stamp-building
install -p -m 755 /usr/share/kernel-package/rules debian/rules
for file in ChangeLog Control Control.bin86 config templates.in rules; do \
cp -f /usr/share/kernel-package/$file ./debian/; \
done
cp: cannot stat ‘/usr/share/kernel-package/ChangeLog’: No such file or directory
for dir in Config docs examples ruleset scripts pkg po; do \
cp -af /usr/share/kernel-package/$dir ./debian/; \
done
test -f debian/control || sed -e 's/=V/4.0.0/g' \
-e 's/=D/4.0.0-10.00.Custom/g' -e 's/=A/amd64/g' \
-e 's/=SA//g' \
-e 's/=I//g' \
-e 's/=CV/4.0/g' \
-e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g' \
-e 's/=ST/linux/g' -e 's/=B/x86_64/g' \
-e 's/=R//g' /usr/share/kernel-package/Control > debian/control
test -f debian/changelog || sed -e 's/=V/4.0.0/g' \
-e 's/=D/4.0.0-10.00.Custom/g' -e 's/=A/amd64/g' \
-e 's/=ST/linux/g' -e 's/=B/x86_64/g' \
-e 's/=M/Unknown Kernel Package Maintainer <unknown@unconfigured.in.etc.kernel-pkg.conf>/g' \
/usr/share/kernel-package/changelog > debian/changelog
chmod 0644 debian/control debian/changelog
test -d ./debian/stamp || mkdir debian/stamp
make -f debian/rules debian/stamp/conf/kernel-conf
make[1]: Entering directory '/home/test/KERNEL_DIR/linux-stable'
====== making target debian/stamp/conf/kernel-conf [new prereqs: ]======
make ARCH=x86_64 \
oldconfig;
make[2]: Entering directory '/home/test/KERNEL_DIR/linux-stable'
HOSTCC scripts/basic/fixdep
gcc: error trying to exec 'as': execvp: No such file or directory
scripts/Makefile.host:91: recipe for target 'scripts/basic/fixdep' failed
make[3]: *** [scripts/basic/fixdep] Error 1
Makefile:451: recipe for target 'scripts_basic' failed
make[2]: *** [scripts_basic] Error 2
make[2]: Leaving directory '/home/test/KERNEL_DIR/linux-stable'
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]: Leaving directory '/home/test/KERNEL_DIR/linux-stable'
/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 966.
|
Vielleicht mal mit
| sudo apt-get install --reinstall binutils
|
probieren? Mehr fällt mir im Moment nicht ein, könnte aber versuchen das ganze in einer VM heute Abend mal nachzuvollziehen...
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
HEiDi schrieb: Vielleicht mal mit
| sudo apt-get install --reinstall binutils
|
probieren? Mehr fällt mir im Moment nicht ein, könnte aber versuchen das ganze in einer VM heute Abend mal nachzuvollziehen...
Also ich habe mal das Paket reinstalliert und siehe da: Die Fehlermeldung taucht nicht mehr auf bzw. er findet wie gewohnt das Paket! Die Kompilierung läuft gerade und ich schaue mal, ob das alles glatt läuft. Ich meld mich dann, wenn ich wieder Ergebnisse habe! Aber bis dahin schon mal vielen Dank an alle, die mir geholfen haben!
|
Linux-Joker
(Themenstarter)
Anmeldungsdatum: 6. Juli 2014
Beiträge: 12
|
So.. ich habe jetzt den Kompilierungsvorgang mal durchlaufen lassen. Es schien alles richtig zu laufen, bis er auf die "wichtige" Datei block.c kam, die ich ja verändert habe. Dort hat er dann rumgemerkt und den Prozess deswegen abgebrochen ☹ Folgende Fehlermeldung hat er mir ausgespuckt: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 | CC [M] drivers/mmc/card/block.o
drivers/mmc/card/block.c: In function ‘mmc_blk_alloc_part’:
drivers/mmc/card/block.c:2233:2: error: incompatible type for argument 3 of ‘string_get_size’
string_get_size((u64)get_capacity(part_md->disk) << 9, STRING_UNITS_2,
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: expected ‘enum string_size_units’ but argument is of type ‘char *’
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
drivers/mmc/card/block.c:2234:13: warning: passing argument 4 of ‘string_get_size’ makes pointer from integer without a cast
cap_str, sizeof(cap_str));
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: expected ‘char *’ but argument is of type ‘long unsigned int’
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
drivers/mmc/card/block.c:2233:2: error: too few arguments to function ‘string_get_size’
string_get_size((u64)get_capacity(part_md->disk) << 9, STRING_UNITS_2,
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: declared here
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
drivers/mmc/card/block.c: In function ‘mmc_blk_probe’:
drivers/mmc/card/block.c:2439:2: error: incompatible type for argument 3 of ‘string_get_size’
string_get_size((u64)get_capacity(md->disk) << 9, STRING_UNITS_2,
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: expected ‘enum string_size_units’ but argument is of type ‘char *’
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
drivers/mmc/card/block.c:2440:13: warning: passing argument 4 of ‘string_get_size’ makes pointer from integer without a cast
cap_str, sizeof(cap_str));
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: expected ‘char *’ but argument is of type ‘long unsigned int’
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
drivers/mmc/card/block.c:2439:2: error: too few arguments to function ‘string_get_size’
string_get_size((u64)get_capacity(md->disk) << 9, STRING_UNITS_2,
^
In file included from drivers/mmc/card/block.c:33:0:
include/linux/string_helpers.h:13:6: note: declared here
void string_get_size(u64 size, u64 blk_size, enum string_size_units units,
^
scripts/Makefile.build:258: recipe for target 'drivers/mmc/card/block.o' failed
make[6]: *** [drivers/mmc/card/block.o] Error 1
scripts/Makefile.build:403: recipe for target 'drivers/mmc/card' failed
make[5]: *** [drivers/mmc/card] Error 2
scripts/Makefile.build:403: recipe for target 'drivers/mmc' failed
make[4]: *** [drivers/mmc] Error 2
Makefile:946: recipe for target 'drivers' failed
make[3]: *** [drivers] Error 2
make[3]: Leaving directory '/home/test/KERNEL_DIR'
debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
make[2]: *** [debian/stamp/build/kernel] Error 2
make[2]: Leaving directory '/home/test/KERNEL_DIR'
debian/ruleset/common/targets.mk:242: recipe for target 'debian/stamp/do-build-arch' failed
make[1]: *** [debian/stamp/do-build-arch] Error 2
make[1]: Leaving directory '/home/test/KERNEL_DIR'
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debian/ruleset/targets/common.mk:401: recipe for target 'debian/stamp/build/buildpackage' failed
make: *** [debian/stamp/build/buildpackage] Error 2
|
Leider bin ich jetzt speziell für C / C++ nicht unbeding der Fachmann.. vielleicht kennt sich ja einer von euch besser damit aus und kann mir einen Tipp geben. Ich habe übrigens die bestimmte Zeile der Datei wie beschrieben geändert, aber vielleicht hat sich ja da ein Fehler oder so eingeschlichen.. nur leider finde ich den nicht unbedingt ^^ LG Linux-Joker
|