3

内容が src/ に解凍された tarball src.tar.gz と、このコマンドで生成されたこのソースのパッチがあります。

$ diff -Nurp src/ src_mod/ > my.patch

パッチ ヘッダーは次の 3 行で始まります。

 diff -Nurp src/path/to/file src_PATCHED/path/to/file
 --- src/path/to/file  2012-10-22 05:52:59.000000000 +0200
 +++ src_PATCHED/path/to/file  2016-03-14 12:27:52.892802283 +0100

私の bitbake レシピは、この SRC_URI を使用してパスと tarball ファイルの両方を参照します。

SRC_URI = " \
    file://my.patch \
    file://src.tar.gz \
"

do_fetch および do_unpack タスクは期待どおりに機能し、 my.patch および src/ は ${S} ディレクトリ内に残ります。つまり:

${S}/my.path
${S}/src.tar.gz

しかし、do_patch タスクは次のエラー メッセージで失敗しています。

ERROR: Command Error: exit status: 1  Output:
Applying patch my.patch
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?

以下に示すように「patchdir」属性を設定するなど、さまざまな代替手段をテストしました。

SRC_URI = " \
    file://my.patch;patchdir=${S}/src \
    file://src.tar.gz \
"

「patchdir」は「patch -d dir」を使用するのと同じだと思っていました。しかし、期待どおりに動作せず、常に同じ ERROR メッセージを返します。

私が間違っていることは何ですか?

4

2 に答える 2

10

私の変数${S}は、次の内容でレシピ内で再定義されました。

S = "${WORKDIR}/${PN}-${PV}"

ただし、フェッチャーは、ディレクトリ内ではなく 内にmy.patchダウンロードするため、次のようになります。src/${WORKDIR}${S}

${WORKDIR}/my.path
${WORKDIR}/src.tar.gz

そしてtarballも内部で抽出されました${WORKDIR}

${WORKDIR}/src/

修正により、「patchdir」属性が適切に設定され、次のように置き換え${S}られました${WORKDIR}

SRC_URI = " \
    file://my.patch;patchdir=${WORKDIR}/src \
    file://src.tar.gz \
"

それはすでに機能しています!

于 2016-03-16T14:51:56.520 に答える
2

著者は独自の問題に対する独自の解決策を提供しましたが、この質問は、Yocto ビルドの「パッチを適用するファイルが見つかりません」というエラーの解決策を検索するときに最初に出てくる結果であるため、解決策を共有したいと思います。同じエラー出力を生成する別の状況。

私の場合、.bbappend ファイルを使用して上書き制御されたパッチを既存のレシピに適用しようとしたところ、「パッチするファイルが見つかりません」というエラーが表示されました。https://community.nxp.com/thread/474138のスレッドは解決策を特定しました:「+=」構文の代わりに「_append」構文を使用します。つまり、次を使用します。

SRC_URI_append_machineoverride = " file://my.patch"

それ以外の

SRC_URI_machineoverride += "file://my.patch"

「_append」を使用するには、先頭にスペースが必要であることに注意してください (上記のスレッドに記載されている末尾のスペースとは対照的です)。この構文が必要な理由を説明するのに十分な調査はまだ行っていませんが、それでもこの質問の記録に追加する価値があると思いました。

于 2018-12-28T22:41:20.243 に答える