2015-04-16 33 views
0

我正在設置yocto v1.7.1「dizzy」以檢查自定義的Linux內核修訂版本到我的本地git倉庫。

在執行構建過程時,它會在do_validate_branches()期間失敗並顯示以下錯誤消息。

DEBUG: Executing shell function do_validate_branches 
usage: git cat-file (-t|-s|-e|-p|<type>|--textconv) <object> 
    or: git cat-file (--batch|--batch-check) < <list_of_objects> 

<type> can be one of: blob, tree, commit, tag 
    -t     show object type 
    -s     show object size 
    -e     exit with zero when there's no error 
    -p     pretty-print object's content 
    --textconv   for blob objects, run textconv on object's content 
    --batch[=<format>] show info and content of objects fed from the standard input 
    --batch-check[=<format>] 
          show info about objects fed from the standard input 

ERROR: is not a valid commit ID. 
ERROR: The kernel source tree may be out of sync 
WARNING: exit code 1 from a shell command. 
ERROR: Function failed: do_validate_branches (log file is located at etc..) 

望着用於do_validate_branches生成的代碼的問題似乎是,因爲它是調用git cat-file -t ${machine_srcrev},但${machine_srcrev}是一個空字符串。而且這似乎是因爲我用我的以下linux-yocto-custom.bb

SRCREV="${AUTOREV}" 

因爲當我與一個版本號替換我不再獲得的問題,比如...

SRCREV="7035c2a67d964acbb5d917f470bcda42691a3d9c" 

的事情是我真正想要這個配方從分支的HEAD打造,所以把某個特定的版本似乎沒有什麼我後我和SRCREV="${AUTOREV}"似乎是什麼其實我想要的。但如上所述,這使得${SRCREV_machine}是一個空字符串,而不是AUTOINC,因爲我認爲它應該評估。

任何人都可以提供我任何見解如何我可以得到的食譜都遵循頭,而不必不斷更新配方,以包含正確的SRCREV,並讓它通過其do_validate_branches()?我在這裏錯過了什麼?

編輯:更多信息...

的問題也似乎是固定的,如果我修改我內核yocto.bbclass如下... @ 285

- machine_srcrev="${SRCREV_machine}" 
+ machine_srcrev="${@ get_machine_branch(d, "${SRCREV}")}" 

我的理解我的變化是我明確重新從我的機器分支中獲取$SRCREV。原文似乎認爲已存儲在${SRCREV_machine}。雖然原始結果爲空字符串,並且我的更改結果爲AUTOINC

雖然我仍然認爲我必須缺少一些東西,因爲我不需要編輯基類。但我總是更傾向於認爲我錯過了一些東西,而不是這是一個錯誤。也許我應該把它發佈到某個地方的yocto郵件列表中。

+0

不確定是否需要您的情況,但是您是否通過http://www.yoctoproject.org/docs/1.6/dev-manual/dev-manual.html#platdev將「SRCPV」添加到了「PV」 -appdev-srcrev? – lnmx

+0

是的,我有'PV =「$ {LINUX_VERSION} + git $ {SRCPV}」'這是原來我運行yocto-bsp創建的。 這似乎可以通過在包含'3.14.28 + gitAUTOINC + 7035c2a67d-r0'目錄的構建過程中生成的目錄結構來確認。 –

回答

0

後yocto郵件列表上的一些小討論...... http://thread.gmane.org/gmane.linux.embedded.yocto.general/24316

摘要:

看來,在do_validate_branches()目前的邏輯是不充分的證明。

尤其似乎SRCREV_machine不是由我在哪裏使用linux-yocto-custom.bb,並試圖跟蹤源分支的頭它得到do_validate_branches(),至少在這種情況下,時間設置正確與SRCREV="${AUTOREV}"。目前正在查看並重新編寫,希望可以在v1.8發佈。

一個很好的解決辦法就是在您的設置SRCREV_machine linux-yocto-custom.bb。特別是在設置SRCREV變量之後,您可以直接將它設置爲與線路上的變量SRCREV相同的值。因此,它看起來像......

SRCREV="${AUTOREV}" 
SRCREV_machine="${AUTOREV}" # or SRCREV_machine="${SRCREV}" 

牢記最終當你鎖定你是從建築,並與特定的修訂版本替換"${AUTOREV}"源版本,這個問題然後就離開。

所以這個解決方法只有當你正在建造的源代碼正在進行時,開發纔會生效,所以你想用"${AUTOREV}"跟蹤移動頭。