# The Yocto Project is a fucking pain in the ass 紀錄 Yocto 有多反人類。 這篇筆記假設你有基本的嵌入式系統觀念、知道一個 Linux distribution 應該包含哪些東西、知道怎麼用 gcc。 (如果用過 buildroot 那你很快就會知道 yocto 有多難用) 參考資料: https://bootlin.com/training/yocto/ https://docs.yoctoproject.org/ https://docs.yoctoproject.org/bitbake/2.10/index.html# 大概 80% 都是屁話,但你也沒有更好的 reference 了 ## 第一坨狗屎:bitbake 在搞懂了一些多餘又無聊的名詞(比如 yocto 跟 poky 的差別)之後,第一件要做的事就是 ``` git clone git://git.yoctoproject.org/poky ``` 然後 ***在 poky 這個 directory 裡面*** 下 ```source oe-init-build-env```。因為 yocto 整個 project 都是用 python 寫成的 script, ```source``` 就是把這些 script 所在的資料夾加到 environment variable。然後就可以開始吃屎(學習 yocto )了。 如果你開始玩一些基本的 command 比如 ```bitbake-layer show-layers```,你就會發現 ### 第一個 yocto 狗屎的地方 yocto 所有的 command 都會根據你現在在哪一個 directory 而有不同的效果,然後 document 完全不會告訴你哪個 command 要在哪裡下。 (以下開始會出現一堆名詞,比如其實就是 ***資料夾*** 的```layer```) 比如你想建一個新的 layer,首先會需要 ```source oe-init-build-env```,下完這個 command 之後會跳到 ```poky/build```(預設的 build directory),然後你要 ```cd ../``` 回到 poky 這個目錄,在這裡下 ```bitbake-layers create-layer <layer-name>``` 你才會在正確的位置新增 layer。真他媽低能。 ### bitbake document 如果你是個認真的孩子,打算去看 bitbake 的 document 來好好搞懂 bitbake 怎麼用,A恭喜,chapter 1,2,3,4,5,6 裡面舉出關於 command 的例子 ***幾乎全部*** 都沒辦法正確的執行。 等你讀完 chapter 1,2,3,4,5,6,幾乎忘記最一開始寫了些什麼的時候,恭喜你,chapter 7 終於要告訴你怎麼樣正確的執行 bitbake 的 command 囉。 如果你這裡還沒放棄,真的讀完 chapter 7,然後順利執行完全沒任何卵用的 hello world 之後,打算回頭去看之前列出的 command 到底在做些什麼,比如在 [BitBake User Manual](https://docs.yoctoproject.org/bitbake/2.10/index.html) 1.5.2 Example 裡,跟你說 ```bitbake -b <recipe_name>.bb``` 就可以 run "build task"。那你問 build task 實際上是執行了 recipe 裡面的哪些 command? ![image](https://hackmd.io/_uploads/BJZuGcw3ke.png) A恭喜問了就沒有。