https://www.kernel.org/doc/html/latest/admin-guide/README.html
Docs » The Linux kernel user’s and administrator’s guide » Linux kernel release 5.x < http://kernel.org/ >
If something goes wrong
If you have problems that seem to be due to kernel bugs, please check the file MAINTAINERS to see if there is a particular person associated with the part of the kernel that you are having trouble with. If there isn’t anyone listed there, then the second best thing is to mail them to me (torvalds at linux-foundation.org), and possibly to any other relevant mailing-list or to the newsgroup.
Wenn Sie ein Problem haben, von dem Sie vermuten, dass es auf einen Fehler im Kernel zurückzuführen ist, überprüfen Sie die Datei MAINTAINERS, um festzustellen, ob mit einigen der problematischen Kernel bestimmte Personen verbunden sind. Wenn dort niemand aufgeführt ist, ist es am zweitbesten, mich (Torvalds unter linux-foundation.org) und möglicherweise andere relevante Mailinglisten oder Newsgroups zu kontaktieren.
In all bug-reports, please tell what kernel you are talking about, how to duplicate the problem, and what your setup is (use your common sense). If the problem is new, tell me so, and if the problem is old, please try to tell me when you first noticed it.
Bitte sagen Sie mir für alle Fehlerberichte, für welchen Kernel es sich handelt, wie das Problem reproduziert und wie es eingerichtet wird (mit gesundem Menschenverstand). Bitte lassen Sie mich wissen, wenn das Problem neu ist. Wenn das Problem nicht mehr aktuell ist, teilen Sie uns dies bitte mit, als Sie es zum ersten Mal bemerkt haben.
If the bug results in a message like:
Wenn der Fehler die folgende Meldung verursacht:
unable to handle kernel paging request at address C0000010
Oops: 0002
EIP: 0010:XXXXXXXX
eax: xxxxxxxx ebx: xxxxxxxx ecx: xxxxxxxx edx: xxxxxxxx
esi: xxxxxxxx edi: xxxxxxxx ebp: xxxxxxxx
ds: xxxx es: xxxx fs: xxxx gs: xxxx
Pid: xx, process nr: xx
xx xx xx xx xx xx xx xx xx xx
or similar kernel debugging information on your screen or in your system log, please duplicate it exactly. The dump may look incomprehensible to you, but it does contain information that may help debugging the problem. The text above the dump is also important: it tells something about why the kernel dumped code (in the above example, it’s due to a bad kernel pointer). More information on making sense of the dump is in Documentation/admin-guide/bug-hunting.rst
Alternativ können Sie die Kernel-Debugging-Informationen auf dem Bildschirm oder im Systemprotokoll genau duplizieren. dump mag für Sie verwirrend sein, enthält aber auch nützliche Informationen zum Debuggen. Der Text auf dem Dump ist ebenfalls wichtig: Hier erfahren Sie, warum der Kernel-Dump-Code verursacht wurde (im obigen Beispiel wurde er durch einen falschen Kernel-Zeiger verursacht). Weitere Informationen zur Bedeutung des Dumps finden Sie in der Dokumentation. Es befindet sich unter /admin-guide/bug-hunting.rst.
If you compiled the kernel with CONFIG_KALLSYMS you can send the dump as is, otherwise you will have to use the ksymoops program to make sense of the dump (but compiling with CONFIG_KALLSYMS is usually preferred). This utility can be downloaded from https://www.kernel.org/pub/linux/utils/kernel/ksymoops/ . Alternatively, you can do the dump lookup by hand:
Wenn Sie den Kernel mit CONFIG_KALLSYMS kompilieren, können Sie den Speicherauszug unverändert senden. Ist dies nicht der Fall, müssen Sie das Programm ksymoops verwenden, um den Speicherauszug zu erkennen (obwohl CONFIG_KALLSYMS im Allgemeinen empfohlen wird). Sie können dieses Dienstprogramm von https: // www.kernel.org / pub / linux / utils / kernel / ksymoops /
herunterladen. Alternativ können Sie eine Dump-Suche manuell durchführen.
In debugging dumps like the above, it helps enormously if you can look up what the EIP value means. The hex value as such doesn’t help me or anybody else very much: it will depend on your particular kernel setup. What you should do is take the hex value from the EIP line (ignore the 0010:), and look it up in the kernel namelist to see which kernel function contains the offending address.
Beim Debuggen eines Speicherauszugs wie dem oben genannten ist es sehr hilfreich, herauszufinden, was der EIP-Wert bedeutet. Der hexadezimale Wert selbst ist für mich oder andere nicht sehr nützlich. Dies hängt von jedem Kernel-Setup ab. Sie müssen lediglich den Hexadezimalwert (0010: ignoriert) aus der EIP-Zeile abrufen und in der Kernel-Namensliste nachschlagen, um festzustellen, welche Kernelfunktion die fehlerhafte Adresse enthält. Die Zahlen selbst sind bedeutungslos, da sich die Adressinformationen aufgrund von Kompilierungsoptionen usw. ändern können. Das Problem besteht darin, dass Sie die Adressinformationen benötigen, um festzustellen, welche Funktion / welcher Code das Problem verursacht. )
To find out the kernel function name, you’ll need to find the system binary associated with the kernel that exhibited the symptom. This is the file ‘linux/vmlinux’. To extract the namelist and match it against the EIP from the kernel crash, do:
Um den Namen der Kernelfunktion zu finden, müssen Sie die Systembinärdatei finden, die dem betreffenden Kernel zugeordnet ist. Dies ist "linux / vmlinux". So extrahieren Sie die Namensliste und stimmen sie mit dem abgestürzten EIP des Kernels ab:
nm vmlinux | sort | less
This will give you a list of kernel addresses sorted in ascending order, from which it is simple to find the function that contains the offending address. Note that the address given by the kernel debugging messages will not necessarily match exactly with the function addresses (in fact, that is very unlikely), so you can’t just ‘grep’ the list: the list will, however, give you the starting point of each kernel function, so by looking for the function that has a starting address lower than the one you are searching for but is followed by a function with a higher address you will find the one you want. In fact, it may be a good idea to include a bit of “context” in your problem report, giving a few lines around the interesting one.
Dadurch werden die Kerneladressen in aufsteigender Reihenfolge sortiert, sodass die Funktion, die die betreffende Adresse enthält, leichter gefunden werden kann.
Bitte beachten Sie, dass die in der Kernel-Debugging-Nachricht angezeigte Adresse nicht immer genau mit der Funktionsadresse übereinstimmt (tatsächlich ist dies selten). Daher reicht 'grep' nicht aus. Die Liste zeigt jedoch die Startposition jeder Kernelfunktion. Daher können Sie die Zieladresse finden, indem Sie nach einer Funktion suchen, deren Startadresse kleiner als die gesuchte Adresse ist und auf die eine Adresse folgt, die größer als diese Adresse ist. In der Tat könnte es eine gute Idee sein, ein paar interessante Zeilen zusammenzustellen, einschließlich "Kontext".
If you for some reason cannot do the above (you have a pre-compiled kernel image or similar), telling me as much about your setup as possible will help. Please read the admin-guide/reporting-bugs.rst document for details.
Wenn Sie aus irgendeinem Grund die oben genannten Schritte nicht ausführen können (z. B. mithilfe eines rep-kompilierten Kernel-Images), teilen Sie uns bitte so viel wie möglich über die Einrichtung mit. Weitere Informationen finden Sie in der Dokumentation zu admin-guide / reporting-bugs.rst.
Alternatively, you can use gdb on a running kernel. (read-only; i.e. you cannot change values or set break points.) To do this, first compile the kernel with -g; edit arch/x86/Makefile appropriately, then do a make clean. You’ll also need to enable CONFIG_PROC_FS (via make config).
Alternativ können Sie gdb mit einem laufenden Kernel verwenden. (Es ist schreibgeschützt und Sie können seinen Wert nicht ändern oder Haltepunkte setzen.) Kompilieren Sie dazu zuerst Ihren Kernel mit -g. Bearbeiten Sie dazu arch / x86 / Makefile entsprechend und führen Sie make clean aus. Sie müssen auch CONFIG_PROC_FS aktivieren (mithilfe von make config).
After you’ve rebooted with the new kernel, do gdb vmlinux /proc/kcore. You can now use all the usual gdb commands. The command to look up the point where your system crashed is l *0xXXXXXXXX. (Replace the XXXes with the EIP value.)
Führen Sie nach dem Neustart mit dem neuen Kernel gdb vmlinux / proc / kcore aus. Sie können alle regulären GDB-Befehle verwenden. Der Befehl, um den Punkt zu finden, an dem das System abgestürzt ist, lautet l * 0xXXXXXXXX (ersetzen Sie XXXes durch den EIP-Wert).
gdb’ing a non-running kernel currently fails because gdb (wrongly) disregards the starting offset for which the kernel is compiled.
Gdb für Kernel, die derzeit nicht ausgeführt werden, schlägt fehl, da gdb (fälschlicherweise) den Startoffset ignoriert, bei dem der Kernel kompiliert wird.
Ursprünglich ist es Teil des Quellcodes des Linux-Kernels, daher wird es als GPLv2 behandelt (Anerkennung, dass es sein sollte).
https://www.kernel.org/doc/html/latest/index.html
Licensing documentation
The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing
Recommended Posts