---
# System prepended metadata

title: Yocto works a SHIT

---

# 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恭喜問了就沒有。