Raspberry pi 4b using Yocto
===
這一篇主要紀錄[Open Source Camera Project](https://hackmd.io/hUajGa4ORECGzliqR-K4ow)建置系統的步驟。
因為會用到攝影機,無線網路等功能,所以將一些必要套件也一起編譯進去
會用到的套件清單:
- meta-raspberrypi
- meta-openembedded
- meta-qt5
- meta-python2
- meta-browser
- meta-clang
範例有啟用Serial,所以不用透過螢幕也可以操作Raspberry pi。
:::info
登入=>
帳號: root
密碼: root
:::
---
1. 下載yocto:
```bash=
git clone git://git.yoctoproject.org/poky
cd poky
```
2. 下載必須套件:
```bash=
git clone git://git.yoctoproject.org/meta-raspberrypi
cd meta-raspberrypi
git checkout fb253346c2fe85f8fdd49e5a66dff04d8f2bd53e
```
```bash=
git clone https://github.com/openembedded/meta-openembedded
```
```bash=
git clone https://github.com/meta-qt5/meta-qt5
```
```bash=
git clone https://github.com/OSSystems/meta-browser
```
```bash=
git clone git://github.com/kraj/meta-clang
```
```bash=
git clone git://git.openembedded.org/meta-python2
```
3. 新增專案:
```bash=
source oe-init-build-env rpi-build
```
:::info
source oe-init-build-env <自己取專案名稱>
:::
4. 設定配方:
```bash=
vim conf/bblayers.conf
```
將裡面改成:
```bash=
# 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/poky/meta-poky \
PATH/poky/meta-yocto-bsp \
PATH/poky/meta-raspberrypi \
PATH/poky/meta-openembedded/meta-oe \
PATH/poky/meta-openembedded/meta-multimedia \
PATH/poky/meta-openembedded/meta-networking \
PATH/poky/meta-openembedded/meta-python \
PATH/poky/meta-qt5 \
PATH//poky/meta-python2 \
PATH//poky/meta-browser/meta-chromium \
PATH//poky/meta-clang \
"
```
:::info
PATH改為自己的實際路徑
:::
5. 設定環境變數:
```bash=
vim conf/local.conf
```
新增:
```bash=
MACHINE ??= "raspberrypi4"
KERNEL_IMAGETYPE = "Image"
ENABLE_UART = "1"
RASPBERRYPI_HD_CAMERA = "1"
VIDEO_CAMERA = "1"
PARALLEL_MAKE = "-j 4"
GPU_MEM_256="192"
DISABLE_OVERSCAN = "1"
DISABLE_SPLASH = "1"
DISABLE_RPI_BOOT_LOGO = "1"
MACHINE_FEATURES_append=" vc4graphics xf86-video-fbdev"
DISTRO_FEATURES_append = " opengl x11 fbdev"
MACHINE_FEATURES_remove=" wayland"
VC4GRAPHICS = "1"
```
:::info
fbdev針對HDMI和DSI螢幕
:::
加上註解:
```bash=
#MACHINE ??= "qemux86-64"
```
解開註解:
```bash=
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR = "${TOPDIR}/tmp"
```
```bash=
PACKAGE_CLASSES ?= "package_rpm"
改成
PACKAGE_CLASSES ?= "package_ipk"
```
尾端新增:
```bash=
IMAGE_ROOTFS_EXTRA_SPACE = "20971520"
IMAGE_INSTALL_append = " python3"
IMAGE_INSTALL_append = " python3-pip"
IMAGE_INSTALL_append = " ntp"
IMAGE_INSTALL_append = " v4l-utils"
IMAGE_INSTALL_append = " opkg"
IMAGE_INSTALL_append = " opencv"
IMAGE_INSTALL_append = " userland"
IMAGE_INSTALL_append = " libgpiod"
IMAGE_INSTALL_append = " vim"
IMAGE_INSTALL_append = " rsync"
IMAGE_INSTALL_append = " tslib"
IMAGE_INSTALL_append = " openssh"
IMAGE_INSTALL_append = " python3-pyqt5"
IMAGE_INSTALL_append = " chromium-x11"
TOOLCHAIN_TARGET_TASK_append = " opencv"
INHERIT += "extrausers"
EXTRA_USERS_PARAMS = "usermod -P root root; "
LICENSE_FLAGS_WHITELIST="commercial"
```
:::info
IMAGE_INSTALL_append=" <套件>"
:::
:::info
INHERIT += "extrausers"
EXTRA_USERS_PARAMS = "usermod -P <登入帳號> <登入密碼>; "
:::
:::info
擴展rootfs到20GB
IMAGE_ROOTFS_EXTRA_SPACE = "20971520"
:::
6.相機patch:
[patch下載](https://drive.google.com/file/d/1e-CXmADIytuON-DWXSOUohHLmj_VLtaG/view?usp=sharing)
將patch丟到meta-raspberry資料夾底下,並應用。
```bash=
git apply <PATH檔案>
```
7. 編譯:
```bash=
bitbake core-image-x11
```
會看到:
```bash=
Build Configuration:
BB_VERSION = "1.51.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-20.04"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.3+snapshot-c553b55a48af077ce25480abcadac289c91051b5"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "master:c553b55a48af077ce25480abcadac289c91051b5"
NOTE: Fetching uninative binary shim http://downloads.yoctoproject.org/releases/uninative/3.1/x86_64-nativesdk-libc.tar.xz;sha256sum=5d0611df544edff6428cef7d871257a91aa6ba1bd92f5365a2df8deb54b6b31e (will check PREMIRRORS first)
Initialising tasks: 44% |######################################################################## | ETA: 0:00:00
```
8. 將編譯好的映像檔燒到SDCRD中開機:
```bash=
sudo bmaptool copy tmp/deploy/images/raspberrypi4/core-image-x11-raspberrypi4.wic.bz2 <SDCORD所在位置>
```
9. 燒錄完成後,插上Raspberry pi開機,即可在console操作Raspberry pi
這裡透過screen操作console
```bash=
sudo screen /dev/ttyUSB0 115200
```