Was sind die `some_name.o.cmd`-Dateien?

8

Welche some_name.o.cmdDateien werden im Linux-Kernelcode angezeigt? werden sie automatisch generiert?

Teer
quelle

Antworten:

3

Aus der Kernel-Konfiguration und dem Erstellen in Linux 2.5 (der Abschnitt, den ich zitiere, befasst sich mit Änderungen, die in 2.5 / 2.6-Kerneln vorgenommen wurden):

Kompilieren von integrierten Objekten und Modulen in einem einzigen Durchgang, Erkennen geänderter Befehlszeilenargumente [...]

Das Hauptleistungsproblem für den Kernel-Build sind die Aufrufe von make (die meiste Zeit wird natürlich normalerweise für das Kompilieren / Verknüpfen aufgewendet, aber diese Kosten sind unabhängig vom verwendeten Build-System). make muss die lokale Make-Datei, die allgemeinen Regeln und alle Abhängigkeiten lesen und die von dort aus zu erledigende Arbeit herausfinden. Ein offensichtlicher Weg, um die Leistung des Build-Systems zu optimieren, besteht darin, unnötige Aufrufe zu vermeiden. [...]

Es wurde ein flexibleres Schema für den Umgang mit sich ändernden Befehlszeilen innerhalb von GNU make erstellt. Die eigentliche Verwendung ist ziemlich einfach. Anstatt den Befehl direkt in den Befehlsteil der Regel zu schreiben, wird er stattdessen der Variablen zugewiesen, cmd_link_l_targetund das Build-System kümmert sich bei Bedarf um die Ausführung des Befehls und verfolgt die Änderungen an der Befehlszeile selbst . Die Implementierung funktioniert wie folgt. Nach dem Ausführen des Befehls zeichnet das Makro if_changeddie Befehlszeile in der Datei auf .<target>.cmd. Wenn make während einer Neuerstellung erneut aufgerufen wird, werden diese .*.cmdDateien eingeschlossen. Wenn es versucht zu entscheiden, ob es neu erstellt werden soll L_TARGET, findet es FORCEin den Voraussetzungen, was es tatsächlich zwingt, den Befehlsteil der Regel immer wieder auszuführen.

Grundsätzlich handelt es sich hierbei um eine Optimierung der Kernelkompilierung. Diese Dateien werden verwendet, um zu verhindern, dass sie makebei Bedarf zu viel arbeiten. Wie Sie oben lesen können, ist eine some_name.o.cmdDatei vorhanden, um zu verfolgen, was bereits getan wurde / getan werden muss, wenn es um die Zusammenstellung von geht some_name.o.

Weitere Informationen finden Sie in Abschnitt 4.5 des zuvor verlinkten Dokuments ( Was ist neu in Linux-2.5 / 2.6s kbuild? ).

John WH Smith
quelle