2014-04-03 57 views
1

我正在從OpenEmbedded User Manual和Yocto項目工具的Dora版本中使用「Hello World」示例。 bitbake構建工作正常,但可執行文件沒有安裝在圖像中。基本上我創建了兩個receipes的我自己的元層。一個是「Hello World」的Autotools版本,它可以自行構建並安裝到映像中。第二個是「Hello World」的Makefile版本。這就是我遇到的麻煩。Hello World Bitbake食譜未安裝在圖像中

的來源是你所期望的:


#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    printf("Hello world 2!\n"); 
    return 0; 
} 

還有一個readme.txt文件:


Readme file for Hello World 2. 

的配方如下:


DESCRIPTION = "Hello World 2 Program" 
PR = "r0" 
LICENSE = "CLOSED" 
RM_WORK_EXCLUDE += "hello2" 

SRC_URI = "file://hello2.c \ 
      file://README.txt" 

do_compile() { 
    ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/hello2.c -o hello2 
} 

do_install() { 
    install -m 0755 -d ${D}${bindir} ${D}${docdir}/hello2 
    install -m 0644 ${S}/hello2 ${D}${bindir} 
    install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/hello2 
} 

當我看工作目錄中,我看到了可執行文件已建成,並將所得包文件。日誌文件中沒有任何內容表明(對我而言,新手)爲什麼沒有發生安裝。配方有什麼問題嗎?或者有什麼我可以檢查以弄清楚的?

回答

3

好吧,您好像成功構建了hello world demo,並且您指出在WORKDIR中找到了這些文件。但這是一個包裝配方。它構建了一個包。你需要告訴你的圖像配方,在最終的圖像中包含你的新包。你可以「欺騙」,並把這些指令進入你的local.conf檔案,使用類似:

IMAGE_INSTALL_append + =「你好」

但是要小心,這種方法僅適用,如果你使用的是基於標準的圖像食譜在image.bbclass上。

更好的是,修改您在自己創建的自定義圖層中使用的圖像配方,然後將該包添加到圖像.bbappend中。例如,如果您使用的是核心圖像庫,請創建您自己的自定義圖層並在該圖層中創建一個core-image-base.bbappend,然後在該bbappend內爲您新創建的「hello 「包。

元數據中有很多例子。看看core-image-base.bb和image.bbclass以獲取圖像創建的一些線索。查看任何packagegroup-core * .bb,瞭解如何將「hello」世界指定爲運行時依賴關係,以便將包安裝到映像中。

請注意,Yocto項目的郵件列表上有很多友好的人,並很樂意回答您的問題。 freenode.net上還有#yocto和#oe。查看yoctoproject.org瞭解具體情況。

希望這會有所幫助。

+0

我的印象是,'IMAGE_INSTALL_append'是一種「慎用」的東西。你是說我應該將它添加到* .bbappend文件中?我在我的配方中嘗試了這一行,但似乎沒有奏效。我也很好奇包裝配方和圖像配方之間的區別。 – GrandAdmiral

+0

我明白你現在在說什麼。我通過編輯bblayers文件將我的配方添加到編譯的配置中,但我還需要將我的包添加到適當的圖像配方(即「將圖像包添加到圖像.bbappend中」)。我會再次提到#irc頻道的人非常有幫助。 – GrandAdmiral

+0

很高興聽到你冒險去#oe和/或#yocto。我經常在那裏看到。至於你對「謹慎使用」的評論,我會做的唯一評論就是local.conf確實不是添加包到圖片的地方。對於快速實驗,當然。但正確的方式(TM)將圖像添加到圖像是在圖像配方!要麼讓你自己的或.bbappend一個現有的。 – challinan