{"id":973,"date":"2018-11-21T15:09:44","date_gmt":"2018-11-21T07:09:44","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=973"},"modified":"2018-11-21T15:09:44","modified_gmt":"2018-11-21T07:09:44","slug":"%e5%88%a9%e7%94%a8bitbake%e3%80%81poky%e3%80%81yocto%e3%80%81openembedded%e7%bc%96%e8%af%91%e7%94%9f%e6%88%90%e8%bd%a6%e8%a7%84agl-linux","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=973","title":{"rendered":"\u5229\u7528Bitbake\u3001Poky\u3001Yocto\u3001OpenEmbedded\u7f16\u8bd1\u751f\u6210\u8f66\u89c4AGL Linux"},"content":{"rendered":"<p>\u4f5c\u4e3a\u8f66\u89c4\u7ea7\u7684\u5d4c\u5165\u5f0fLinux\uff0cAGL Linux\u4f7f\u7528\u65b0\u7684\u6784\u5efa\u65b9\u5f0f\uff0c\u4e0d\u518d\u4f7f\u7528GNU Make\u8fd9\u4e00\u5957\uff0c\u4ee5\u524d\u8001\u7684\u6784\u5efa\u65b9\u5f0f\u5b66\u4e60\u66f2\u7ebf\u6bd4\u8f83\u9661\u5ced\uff0c\u7ec4\u4ef6\u5220\u51cf\u4e5f\u4e0d\u65b9\u4fbf\u3002<\/p>\n<p>\u90a3\u4e48Bitbake\u3001Poky\u3001Yocto\u3001OpenEmbedded\u5206\u522b\u662f\u5e72\u5565\u7684\u5462\uff1a<\/p>\n<p><b>Bitbake<\/b>\uff1a\u662f\u4e00\u4e2a\u901a\u7528\u4efb\u52a1\u6267\u884c\u5f15\u64ce\uff0c\u5141\u8bb8shell\u548cpython\u4efb\u52a1\u5728\u590d\u6742\u7684\u4efb\u52a1\u95f4\u4f9d\u8d56\u7ea6\u675f\u6761\u4ef6\u4e0b\u9ad8\u6548\u5e76\u884c\u8fd0\u884c\uff0c\u6709\u70b9\u7c7b\u4f3cGNU Make\u3002<\/p>\n<p><b>OpenEmbedded<\/b>\uff1a\u662f\u4e00\u4e2a\u91c7\u7528MIT\u8bb8\u53ef\u8bc1\u7684\u8f6f\u4ef6\u67b6\u6784\u6216\u6807\u51c6\uff0c\u76ee\u6807\u5728\u4e8e\u4e3a\u5d4c\u5165\u5f0f\u7cfb\u7edf\u6784\u5efaLinux\u53d1\u884c\u7248\u3002<\/p>\n<p><b>Poky<\/b>\uff1a\u53c2\u8003\u5d4c\u5165\u5f0f\u64cd\u4f5c\u7cfb\u7edf\u5b9e\u9645\u4e0a\uff0c\u662f\u4e00\u4e2a\u53ef\u884c\u7684\u6784\u5efa\u793a\u4f8b\uff0c\u5b83\u4f7f\u7528\u5305\u542b\u7684\u6784\u5efa\u7cfb\u7edf\uff08BitBake\u6784\u5efa\u5f15\u64ce\u548cOpenEmbedded-Core\u6784\u5efa\u7cfb\u7edf\u5143\u6570\u636e\uff09\u6784\u5efa\u4e00\u4e2a\u5c0f\u578b\u5d4c\u5165\u5f0f\u64cd\u4f5c\u7cfb\u7edf\u3002<\/p>\n<p><b>Yocto<\/b>\uff1a\u662f\u4e00\u4e2a\u5f00\u6e90\u534f\u4f5c\u9879\u76ee\uff0c\u53ef\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u4e3a\u5d4c\u5165\u5f0f\u4ea7\u54c1\u521b\u5efa\u5b9a\u5236\u7684\u57fa\u4e8eLinux\u7684\u7cfb\u7edf\uff0c\u800c\u4e0d\u7ba1\u786c\u4ef6\u67b6\u6784\u5982\u4f55\u3002 \u8be5\u9879\u76ee\u63d0\u4f9b\u4e86\u4e00\u5957\u7075\u6d3b\u7684\u5de5\u5177\u548c\u4e00\u4e2a\u7a7a\u95f4\uff0c\u5168\u4e16\u754c\u7684\u5d4c\u5165\u5f0f\u5f00\u53d1\u4eba\u5458\u53ef\u4ee5\u5171\u4eab\u53ef\u7528\u4e8e\u4e3a\u5d4c\u5165\u5f0f\u8bbe\u5907\u521b\u5efa\u91cf\u8eab\u5b9a\u5236\u7684Linux\u6620\u50cf\u7684\u6280\u672f\uff0c\u8f6f\u4ef6\u5806\u6808\uff0c\u914d\u7f6e\u548c\u6700\u4f73\u5b9e\u8df5\u3002\u4e0b\u56fe\u5c31\u662fyocto\u5f00\u53d1\u6d41\u7a0b\uff1a<\/p>\n<div class=\"image-package\">\n<div class=\"image-container\">\n<div class=\"image-container-fill\"><\/div>\n<div class=\"image-view\" data-width=\"1040\" data-height=\"513\"><img decoding=\"async\" class=\"\" src=\"https:\/\/upload-images.jianshu.io\/upload_images\/7412056-3306b5598413b141?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1000\/format\/webp\" data-original-src=\"\/\/upload-images.jianshu.io\/upload_images\/7412056-3306b5598413b141\" data-original-width=\"1040\" data-original-height=\"513\" data-original-format=\"image\/jpeg\" data-original-filesize=\"76854\" \/><\/div>\n<\/div>\n<\/div>\n<p>\u4ece\u4e0a\u9762\u53ef\u4ee5\u770b\u51fa\uff0c\u5176\u4e2d\u6700\u6838\u5fc3\u7684\u5c31\u662fbitbake\uff0c\u5f04\u61c2\u5b83\u5176\u4ed6\u5c31\u5f88\u5bb9\u6613\u660e\u767d\u4e86\uff0c\u4e0b\u9762\u4ee5\u4e00\u4e2a\u4f8b\u5b50\u6765\u770b\u770bbitbake\u4f7f\u7528\u3002<\/p>\n<p><b>Bitbake\u4f8b\u5b50<\/b><\/p>\n<p>Bitbake\u6839\u636e\u63d0\u4f9b\u7684\u6784\u5efa\u4efb\u52a1\u7684\u5143\u6570\u636e\u6267\u884c\u4efb\u52a1\u3002\u5143\u6570\u636e\u5b58\u50a8\u5728\u914d\u65b9\uff08.bb\uff09\u548c\u76f8\u5173\u914d\u65b9\u201cappend\u201d\uff08.bbappend\uff09\u6587\u4ef6\uff0c\u914d\u7f6e\uff08.conf\uff09\u548c\u5e95\u5c42\u5305\u542b\uff08.inc\uff09\u6587\u4ef6\u4ee5\u53ca\u7c7b\uff08.bbclass\uff09\u6587\u4ef6\u4e2d\u3002\u5143\u6570\u636e\u4e3aBitbake\u63d0\u4f9b\u4e86\u6709\u5173\u8fd0\u884c\u54ea\u4e9b\u4efb\u52a1\u4ee5\u53ca\u8fd9\u4e9b\u4efb\u52a1\u4e4b\u95f4\u7684\u4f9d\u8d56\u8bf4\u660e\u3002<\/p>\n<p>Bitbake\u5305\u542b\u4e00\u4e2a\u7a0b\u5e8f\u5e93\u7528\u4e8e\u4ece\u5404\u79cd\u5730\u65b9\uff08\u5982\u672c\u5730\u6587\u4ef6\uff0c\u6e90\u7801\u7ba1\u7406\u7cfb\u7edf\u6216\u7f51\u7ad9\uff09\u83b7\u53d6\u6e90\u4ee3\u7801\u3002<\/p>\n<p>\u6bcf\u4e2a\u8981\u6784\u5efa\u7684\u5355\u5143\uff08\u4f8b\u5982\u4e00\u4e2a\u8f6f\u4ef6\uff09\u7684\u6307\u4ee4\u88ab\u79f0\u4e3a\u201c\u914d\u65b9\u201d\u6587\u4ef6\uff0c\u5e76\u4e14\u5305\u542b\u5173\u4e8e\u8be5\u5355\u5143\u7684\u6240\u6709\u4fe1\u606f\uff08\u4f9d\u8d56\u6027\uff0c\u6e90\u6587\u4ef6\u4f4d\u7f6e\uff0c\u6821\u9a8c\u548c\uff0c\u63cf\u8ff0\u7b49\u6265\uff09\u3002<\/p>\n<p>Bitbake\u5305\u542b\u5ba2\u6237\u7aef\/\u670d\u52a1\u5668\u62bd\u8c61\uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u4f7f\u7528\u6216\u8005\u901a\u8fc7XML-RPC\u4f5c\u4e3a\u670d\u52a1\u63d0\u4f9b\uff0c\u5e76\u5177\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u7528\u6237\u754c\u9762\u3002<\/p>\n<div class=\"image-package\">\n<div class=\"image-container\">\n<div class=\"image-container-fill\"><\/div>\n<div class=\"image-view\" data-width=\"855\" data-height=\"312\"><img decoding=\"async\" class=\"\" src=\"https:\/\/upload-images.jianshu.io\/upload_images\/7412056-e0b93a33ad4d4bd5?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/855\/format\/webp\" data-original-src=\"\/\/upload-images.jianshu.io\/upload_images\/7412056-e0b93a33ad4d4bd5\" data-original-width=\"855\" data-original-height=\"312\" data-original-format=\"image\/jpeg\" data-original-filesize=\"35711\" \/><\/div>\n<\/div>\n<\/div>\n<p>CentOS7\u4e0b\u5b89\u88c5\u548c\u4f7f\u7528bitbake\u8fdb\u884c\u9879\u76ee\u6784\u5efa<\/p>\n<p>\u5148\u5b89\u88c5python3.x\uff1a<\/p>\n<p>$ sudo yum install epel-release<\/p>\n<p>$ sudo yum install\u00a0<a href=\"https:\/\/centos7.iuscommunity.org\/ius-release.rpm\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/centos7.iuscommunity.org\/ius-release.rpm<\/a><\/p>\n<p>$ wget<a href=\"http:\/\/mirror.centos.org\/centos\/7\/os\/x86_64\/Packages\/openssl-libs-1.0.2k-12.el7.x86_64.rpm\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/mirror.centos.org\/centos\/7\/os\/x86_64\/Packages\/openssl-libs-1.0.2k-12.el7.x86_64.rpm<\/a><\/p>\n<p>$ wget<a href=\"http:\/\/mirror.centos.org\/centos\/7\/os\/x86_64\/Packages\/openssl-1.0.2k-12.el7.x86_64.rpm\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/mirror.centos.org\/centos\/7\/os\/x86_64\/Packages\/openssl-1.0.2k-12.el7.x86_64.rpm<\/a><\/p>\n<p>$ sudo yum localinstall openssl-1.0.2k-12.el7.x86_64.rpm openssl-libs-1.0.2k-12.el7.x86_64.rpm<\/p>\n<p>$ sudo yum install python36u<\/p>\n<p>$ sudo ln -s \/bin\/python3.6 \/bin\/python3<\/p>\n<p>$ sudo yum install python36u-pip<\/p>\n<p>$ sudo ln -s \/bin\/pip3.6 \/bin\/pip3<\/p>\n<p>\u5b89\u88c5bitbake\uff1a<\/p>\n<p>$ cd \/data\/<\/p>\n<p>$ git clone git:\/\/git.openembedded.org\/bitbake<\/p>\n<p>$ vi ~\/.bash_profile<\/p>\n<p>PATH=$PATH:$HOME\/.local\/bin:$HOME\/bin:\/data\/bitbake\/bin<\/p>\n<p>$ source ~\/.bash_profile<\/p>\n<p>$ bitbake -h<\/p>\n<p>\u5efa\u7acbbitbake\u9879\u76ee\uff0c\u7f16\u8bd1\u524d\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\uff08\u5176\u4e2dbitbake.conf\u3001base.bbclass\u76f4\u63a5\u4ecebitbake\u5b89\u88c5\u76ee\u5f55\u62f7\u8d1d\u8fc7\u6765\uff09\uff1a<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0tree<\/p>\n<p>.<\/p>\n<p>\u251c\u2500\u2500 build<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 bblayers.conf<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 bitbake.conf<\/p>\n<p>\u251c\u2500\u2500 meta-printhello<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 classes<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 base.bbclass<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 global.bbclass<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 layer.conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 recipes<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 printhello.bb<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 test.bb<\/p>\n<p>\u2514\u2500\u2500 meta-two<\/p>\n<p>\u251c\u2500\u2500 classes<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 two.bbclass<\/p>\n<p>\u251c\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 layer.conf<\/p>\n<p>\u2514\u2500\u2500 recipes<\/p>\n<p>\u251c\u2500\u2500 two.bb<\/p>\n<p>\u2514\u2500\u2500 two.bbappend<\/p>\n<p>\u5404\u6587\u4ef6\u5185\u5bb9\uff1a<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat build\/conf\/bblayers.conf<\/p>\n<p>BBPATH := &#8220;${TOPDIR}&#8221;<\/p>\n<p>BBFILES ?= &#8220;&#8221;<\/p>\n<p>BBLAYERS = &#8221; \\<\/p>\n<p>${TOPDIR}\/..\/meta-printhello\u00a0\\<\/p>\n<p>${TOPDIR}\/..\/meta-two\u00a0\\<\/p>\n<p>&#8221;<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-printhello\/classes\/global.bbclass<\/p>\n<p>addtask build<\/p>\n<p>python\u00a0global_do_build () {<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0global_do_build *&#8221;);<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>}<\/p>\n<p>EXPORT_FUNCTIONS do_build<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-printhello\/conf\/layer.conf<\/p>\n<p>BBPATH .= &#8220;:${LAYERDIR}&#8221;<\/p>\n<p>BBFILES += &#8220;${LAYERDIR}\/recipes\/*.bb&#8221;<\/p>\n<p>BBFILE_COLLECTIONS += &#8220;printhello&#8221;<\/p>\n<p>BBFILE_PATTERN_printhello\u00a0:= &#8220;^${LAYERDIR_RE}\/&#8221;<\/p>\n<p>BBFILE_PRIORITY_printhello\u00a0= &#8220;5&#8221;<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-printhello\/recipes\/printhello.bb<\/p>\n<p>DESCRIPTION = &#8220;Prints Hello World&#8221;<\/p>\n<p>PN = &#8216;printhello&#8217;<\/p>\n<p>PV = &#8216;1&#8217;<\/p>\n<p>PR = &#8220;r1&#8221;<\/p>\n<p>inherit\u00a0global<\/p>\n<p>python do_fetch() {<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0FETCH RESOURCE\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>}<\/p>\n<p>def printdate1():<\/p>\n<p>import time<\/p>\n<p>print(time.strftime(&#8216;%Y%m%d&#8217;, time.gmtime()))<\/p>\n<p>python do_printdate() {<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0PRINT DATE TIME *&#8221;);<\/p>\n<p>printdate1();<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>}<\/p>\n<p>addtask printdate after do_fetch before do_build<\/p>\n<p>addtask fetch<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-printhello\/recipes\/test.bb<\/p>\n<p>DESCRIPTION = &#8220;TEST&#8221;<\/p>\n<p>PN = &#8216;test&#8217;<\/p>\n<p>PV = &#8216;1&#8217;<\/p>\n<p>PR = &#8220;r0&#8221;<\/p>\n<p>python do_build() {<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0test build\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*&#8221;);<\/p>\n<p>bb.plain(&#8220;********************&#8221;);<\/p>\n<p>}<\/p>\n<p>addtask build<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-two\/classes\/two.bbclass<\/p>\n<p>inherit\u00a0global<\/p>\n<p>two_do_configure () {<\/p>\n<p>echo &#8220;running configbuild_do_configure.&#8221;<\/p>\n<p>}<\/p>\n<p>addtask do_configure before do_build<\/p>\n<p>EXPORT_FUNCTIONS do_configure<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-two\/conf\/layer.conf<\/p>\n<p>BBPATH .= &#8220;:${LAYERDIR}&#8221;<\/p>\n<p>BBFILES += &#8220;${LAYERDIR}\/recipes*\/*.bb \\<\/p>\n<p>${LAYERDIR}\/recipes*\/*.bbappend&#8221;<\/p>\n<p>BBFILE_COLLECTIONS += &#8220;two&#8221;<\/p>\n<p>BBFILE_PATTERN_two\u00a0= &#8220;^${LAYERDIR}\/&#8221;<\/p>\n<p>BBFILE_PRIORITY_two\u00a0= &#8220;5&#8221;<\/p>\n<p>LAYERVERSION_two\u00a0= &#8220;1&#8221;<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cat meta-two\/recipes\/two.bb<\/p>\n<p>DESCRIPTION = &#8220;I am the two&#8221;<\/p>\n<p>PN = &#8220;two&#8221;<\/p>\n<p>PR = &#8220;r1&#8221;<\/p>\n<p>inherit two<\/p>\n<p>\u518d\u770bbuild\u4e4b\u540e\u7684\u76ee\u5f55\u7ed3\u6784\uff08\u6574\u4e2atmp\u76ee\u5f55\u4e3a\u751f\u6210\u7684\u5de5\u4f5c\u76ee\u5f55\uff0c\u91cd\u6784\u524d\u53ef\u5220\u9664\uff09\uff1a<\/p>\n<p>[coadmin@vm5 bitbake_test]$\u00a0cd build\/<\/p>\n<p>[coadmin@vm5 build]$\u00a0bitbake\u00a0printhello<\/p>\n<p>[coadmin@vm5 build]$\u00a0bitbake two<\/p>\n<p>\u6240\u6709\u7684\u76ee\u6807\u90fd\u6267\u884c\uff1a<\/p>\n<p>[coadmin@vm5 build]$\u00a0bitbake world<\/p>\n<p>&#8230;<\/p>\n<p>[coadmin@vm5 build]$\u00a0tree ..<\/p>\n<p>..<\/p>\n<p>\u251c\u2500\u2500 build<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 bitbake-cookerdaemon.log<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 bblayers.conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 bitbake.conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 tmp<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 cache<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u251c\u2500\u2500 bb_codeparser.dat<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u251c\u2500\u2500 bb_persist_data.sqlite3<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u2514\u2500\u2500 local_file_checksum_cache.dat<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 stamps<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u251c\u2500\u2500 printhello-1-r1.do_fetch<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u251c\u2500\u2500 printhello-1-r1.do_printdate<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u251c\u2500\u2500 two-1.0-r1.do_configure<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u2514\u2500\u2500 two-1.0-r1.do_patch<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 work<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 printhello-1-r1<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u2514\u2500\u2500 temp<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build -&gt; log.do_build.4270<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build.4270<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_fetch -&gt; log.do_fetch.4263<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_fetch.4263<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_printdate -&gt; log.do_printdate.4267<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_printdate.4267<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.task_order<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_build -&gt; run.do_build.4270<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_build.4270<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_fetch -&gt; run.do_fetch.4263<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_fetch.4263<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_printdate -&gt; run.do_printdate.4267<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_printdate.4267<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 run.global_do_build.4270<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 test-1-r0<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0 \u2514\u2500\u2500 temp<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build -&gt; log.do_build.4268<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build.4268<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.task_order<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_build -&gt; run.do_build.4268<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 run.do_build.4268<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 two-1.0-r1<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 temp<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build -&gt; log.do_build.4269<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_build.4269<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_configure -&gt; log.do_configure.4265<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_configure.4265<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_patch -&gt; log.do_patch.4264<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.do_patch.4264<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 log.task_order<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_build -&gt; run.do_build.4269<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_build.4269<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_configure -&gt; run.do_configure.4265<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_configure.4265<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_patch -&gt; run.do_patch.4264<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 run.do_patch.4264<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 run.global_do_build.4269<\/p>\n<p>\u251c\u2500\u2500 meta-printhello<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 classes<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 base.bbclass<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 global.bbclass<\/p>\n<p>\u2502\u00a0\u00a0 \u251c\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 layer.conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 recipes<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 printhello.bb<\/p>\n<p>\u2502\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 test.bb<\/p>\n<p>\u2514\u2500\u2500 meta-two<\/p>\n<p>\u251c\u2500\u2500 classes<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 two.bbclass<\/p>\n<p>\u251c\u2500\u2500 conf<\/p>\n<p>\u2502\u00a0\u00a0 \u2514\u2500\u2500 layer.conf<\/p>\n<p>\u2514\u2500\u2500 recipes<\/p>\n<p>\u251c\u2500\u2500 two.bb<\/p>\n<p>\u2514\u2500\u2500 two.bbappend<\/p>\n<p><b>\u6700\u540e\uff0c\u770b\u770b\u600e\u4e48\u7f16\u8bd1AGL Linux<\/b><\/p>\n<div class=\"image-package\">\n<div class=\"image-container\">\n<div class=\"image-container-fill\"><\/div>\n<div class=\"image-view\" data-width=\"684\" data-height=\"387\"><img decoding=\"async\" class=\"\" src=\"https:\/\/upload-images.jianshu.io\/upload_images\/7412056-02f66218859956ca?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/684\/format\/webp\" data-original-src=\"\/\/upload-images.jianshu.io\/upload_images\/7412056-02f66218859956ca\" data-original-width=\"684\" data-original-height=\"387\" data-original-format=\"image\/jpeg\" data-original-filesize=\"38302\" \/><\/div>\n<\/div>\n<\/div>\n<p><b>1. \u51c6\u5907\u73af\u5883\uff0c\u4ee5CentOS\u4e3a\u4f8b\uff1a<\/b><\/p>\n<p># sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath socat SDL-devel xterm curl<\/p>\n<p># export AGL_TOP=$HOME\/workspace_agl<\/p>\n<p># mkdir -p $AGL_TOP<\/p>\n<p># mkdir -p ~\/bin<\/p>\n<p># export PATH=~\/bin:$PATH<\/p>\n<p># curl https:\/\/storage.googleapis.com\/git-repo-downloads\/repo &gt; ~\/bin\/repo<\/p>\n<p># chmod a+x ~\/bin\/repo<\/p>\n<p><b>2. \u4e0b\u8f7d\u6e90\u7801\uff1a<\/b><\/p>\n<p># cd $AGL_TOP<\/p>\n<p># repo init -b eel -m eel_5.1.0.xml -u https:\/\/gerrit.automotivelinux.org\/gerrit\/AGL\/AGL-repo<\/p>\n<p># repo sync<\/p>\n<p><b>3. \u7f16\u8bd1\uff08\u4ee5\u76ee\u6807\u4e3aqemu\u4e3a\u4f8b\uff09\uff0c\u4f1a\u751f\u6210\u5404\u79cd\u53ef\u542f\u52a8\u7684img\uff1a<\/b><\/p>\n<p># cd $AGL_TOP<\/p>\n<p># source meta-agl\/scripts\/aglsetup.sh -f -m qemux86-64 agl-demo agl-devel<\/p>\n<p># bitbake agl-demo-platform<\/p>\n<p><b>4. \u8fd0\u884c\uff08\u4ee5VmWare Workstation\u4e3a\u4f8b\uff09\uff1a<\/b><\/p>\n<p># cd tmp\/deploy\/images\/qemux86-64<\/p>\n<p># xz -d agl-demo-platform-qemux86-64.vmdk.xz<\/p>\n<p>\u8fd9\u6837\u4f1a\u5f97\u5230\u4e00\u4e2avmdk\u683c\u5f0f\u7684\u53ef\u542f\u52a8\u786c\u76d8\u955c\u50cf\uff0c\u5728VmWare WorkStation\u5efa\u7acb\u4e00\u4e2a\u865a\u673a\uff0c\u9009\u62e9\u8be5\u955c\u50cf\u4f5c\u4e3a\u6302\u8f7d\u7684\u786c\u76d8\uff0c\u4e0a\u7535\u5f00\u673a\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u4e3a\u8f66\u89c4\u7ea7\u7684\u5d4c\u5165\u5f0fLinux\uff0cAGL Linux\u4f7f\u7528\u65b0\u7684\u6784\u5efa\u65b9\u5f0f\uff0c\u4e0d\u518d\u4f7f\u7528GNU Make\u8fd9\u4e00\u5957\uff0c\u4ee5\u524d\u8001\u7684\u6784\u5efa &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,13],"tags":[513,722,721,717,720,719,723,718,10],"class_list":["post-973","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","category-13","tag-agl","tag-bbclass","tag-bblayers","tag-bitbake","tag-openembedded","tag-poky","tag-recipes","tag-yocto","tag-10"],"views":3633,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=973"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/973\/revisions"}],"predecessor-version":[{"id":974,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/973\/revisions\/974"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=973"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}