BeagleBone Black using Yocto
===
書上([精通嵌入式Linux程式設計](https://www.books.com.tw/products/0010841433)),前幾章節講解如何自主建立(roll your own, RYO),從第6章節開始講解利用組建工具建立系統。
本文章主要紀錄我學習基本建置Yocto的筆記。
---
## 建置環境:
* HOST: ubuntu 20.04 LTS x64
* Yocto: poky
* Board: BeagleBone Black
* Meta: meta(不用自己載), meta-poky(不用自己載), meta-yocto-bsp(不用自己載), meta-arm, meta-arm-toolchain, meta-oe, meta-ti, meta-python
---
1. 下載yocto:
```bash=
git clone git://git.yoctoproject.org/poky.git
cd poky
```
2. 下載資料包:
* TI官方驅動
```bash=
git clone git://git.yoctoproject.org/meta-ti.git
```
* ARM官方驅動:
```bash=
git clone git://git.yoctoproject.org/meta-arm.git
```
* OpenEmbedded
```bash=
git clone https://github.com/openembedded/meta-openembedded
```
2. 建立新的專案
```bash=
source oe-init-build-env new_project
```
3. 設定yocto資料層,將加入剛剛載下來的資料
```bash=
vim conf/bblayers.conf
```
修改成:
```text
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
PATH/poky/meta \
PATH/meta-poky \
PATH/meta-yocto-bsp \
PATH/meta-arm/meta-arm \
PATH/meta-arm/meta-arm-toolchain \
PATH/meta-openembedded/meta-oe \
PATH/meta-ti \
PATH/meta-openembedded/meta-python \
"
```
:::info
PATH 請修改成自己實際的路徑
:::
4. 修改設定檔:
```bash=
vim conf/local.conf
```
解開註解
```bash=
MACHINE ?= "beaglebone-yocto"
```
加上註解
```bash=
# MACHINE ??= "qemux86-64"
```
解開註解
```bash=
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR = "${TOPDIR}/tmp"
```
新增package的封裝方式:
```bash=
PACKAGE_CLASSES ?= "package_rpm"
改成
PACKAGE_CLASSES ?= "package_rpm package_ipk"
```
應用python,在檔案尾端加入
```text=
IMAGE_INSTALL_append = " python3"
IMAGE_INSTALL_append = " python3-pip"
```
5. 確認資料層
```bash
bitbake-layers show-layers
```
```bash=
NOTE: Starting bitbake server...
layer path priority
==========================================================================
meta PATH/poky/meta 5
meta-poky PATH/poky/meta-poky 5
meta-yocto-bsp PATH/poky/meta-yocto-bsp 5
meta-arm PATH/poky/meta-arm/meta-arm 5
meta-arm-toolchain PATH/poky/meta-arm/meta-arm-toolchain 5
meta-oe PATH/poky/meta-openembedded/meta-oe 6
meta-ti PATH/poky/meta-ti 6
meta-python PATH/poky/meta-openembedded/meta-python 7
```
:::info
priority高的可以覆蓋低的
:::
6. 最小化編譯
```bash=
bitbake core-image-minimal
```
:::info
會很久(4~5小時),可以先去做別的事情
:::
```bash=
Loading cache: 100% | | ETA: --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |########################################################################################################################################################################| Time: 0:00:50
Parsing of 2349 .bb files complete (0 cached, 2349 parsed). 3631 targets, 347 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.51.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-20.04"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "beaglebone-yocto"
DISTRO = "poky"
DISTRO_VERSION = "3.3+snapshot-bb490c7ea9170fc1b3c2dd15466daf6a9fad735c"
TUNE_FEATURES = "arm vfp cortexa8 neon callconvention-hard"
TARGET_FPU = "hard"
meta
meta-poky
meta-yocto-bsp = "master:bb490c7ea9170fc1b3c2dd15466daf6a9fad735c"
meta-arm
meta-arm-toolchain = "master:4c3c2fda93af4900887f222d57a5af709dda5f20"
meta-oe = "master:3c259f977e8647ac9c54097d0faab70719a5553e"
meta-ti = "master:30335d90a1802f262017dea1ebae5b722a4b2a48"
meta-python = "master:3c259f977e8647ac9c54097d0faab70719a5553e"
```
7. 將編譯好的映像檔複製到記憶卡
```bash
sudo dd if=tmp/deploy/images/beaglebone-yocto/core-image-minimal-beaglebone-yocto.wic of=/dev/sdc
```
:::info
* 這個例子中,我的記憶卡在/dev/sdc
* 請刪除記憶卡所有分割區
:::
8. 將記憶卡插入開發版,並依照以下方式開機


1. TTL to USB連接至TXD, RXD, GND和PC
2. 按住User/Boot按紐(不要放)
3. 插入Power jack
4. 直到PC端Console軟體出現u-boot的開機log,放開User/Boot按紐
:::info
預設BeagleBone Black從內建emmc開機。這些步驟可讓開發版從sd card開機
:::
:::info
預設登入帳號為root
:::
9. 登入後輸入python3,即可看到python3互動式命令列
```bash=
python3
```
10. 登入自動啟動python3 (options)
修改passwd檔案
```bash=
vi /etc/passwd
```
```bash=
將
root::0:0:root:/home/root:/bin/sh
修改成
root::0:0:root:/home/root:/usr/bin/python3
```
