2

アップグレードされたカーネルを再コンパイルするプロセスを自動化しようとしています。(バージョンアップという意味です)

私がやること:

  1. オブジェクト ファイル (*.o) を rsync でバックアップします。

  2. ディレクトリを削除して mrproper にする

  3. 新しいソースとパッチを抽出します

  4. rsync を使用してオブジェクト ファイルを復元する

しかし、それは意味がないことがわかりました。コンパイルされたものをスキップするにはハッシュを取得する必要があるため、これで削除されます。

質問: どのファイルを保持する必要がありますか? それとも存在しませんか?

ところで:私はすでにccacheを知っていますが、少し設定を変更すると壊れました。

4

2 に答える 2

1

あなたは間違っています™ :-)

カーネル ツリーをそのまま維持し、適切な増分パッチを使用して単純にパッチを適用します。たとえば、3.x の場合、これらのパッチは次の場所にあります。

https://www.kernel.org/pub/linux/kernel/v3.x/incr/

現在 3.18.11 をビルドしていて、3.18.12 にアップグレードしたい場合は、3.18.11-12 パッチをダウンロードします。

https://www.kernel.org/pub/linux/kernel/v3.x/incr/patch-3.18.11-12.xz

(または、xz ユーティリティがインストールされていない場合は .gz ファイル)。

そしてそれを適用します。次に「make oldconfig」と「make」。再構築する必要があるものはすべて再構築されます。

ただし、実際には、オブジェクト ファイルの依存関係メカニズムに依存しないことをお勧めします。バグが原因であるにもかかわらず、何かが再構築されない可能性があるかどうかは誰にもわかりません。そのため、パッチを適用する前に毎回「クリーンにする」ことでクリーンを開始することをお勧めします。

ビルド時間を節約する必要が本当にありますか? はいの場合、カーネルを構成し (「make menuconfig」)、必要のないすべての機能 (持っていないハードウェアのデバイス ドライバー、気にしないファイル システム、ネットワークなど) を無効にすることをお勧めします。私のニーズに合わせて最適化されたこのようなカーネルは、ビルドに約 3 ~ 4 分しかかかりません (通常、すべてが有効になっている完全なカーネルには 30 分以上かかります。最近ではさらにそれ以上かかります)。最適化されていないカーネルを構築してから長い時間が経ちました。)

カーネルパッチに関する詳細情報:

https://www.kernel.org/doc/Documentation/applying-patches.txt

于 2015-05-08T11:09:59.883 に答える
0

インクリメンタル パッチは、タイム スタンプを適切に更新するため、適切な方法です。

(GNU) 再構築を識別するためにタイム スタンプを使用するため、再構築を避けるためにタイム スタンプを保持します。

rsync が必要な場合は、-t オプションで使用する必要があります。

また、パッチには増分パッチがないため、パッチが適用されたファイルを比較して手動で作成できます。

于 2015-05-11T06:59:45.087 に答える