這一篇主要紀錄Open Source Camera Project建置系統的步驟。
因為會用到攝影機,無線網路等功能,所以將一些必要套件也一起編譯進去
會用到的套件清單:
範例有啟用Serial,所以不用透過螢幕也可以操作Raspberry pi。
登入=>
帳號: root
密碼: root
git clone git://git.yoctoproject.org/poky
cd poky
git clone git://git.yoctoproject.org/meta-raspberrypi
cd meta-raspberrypi
git checkout fb253346c2fe85f8fdd49e5a66dff04d8f2bd53e
git clone https://github.com/openembedded/meta-openembedded
git clone https://github.com/meta-qt5/meta-qt5
git clone https://github.com/OSSystems/meta-browser
git clone git://github.com/kraj/meta-clang
git clone git://git.openembedded.org/meta-python2
source oe-init-build-env rpi-build
source oe-init-build-env <自己取專案名稱>
vim conf/bblayers.conf
將裡面改成:
# 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 \
"
PATH改為自己的實際路徑
vim conf/local.conf
新增:
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"
fbdev針對HDMI和DSI螢幕
加上註解:
#MACHINE ??= "qemux86-64"
解開註解:
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR = "${TOPDIR}/tmp"
PACKAGE_CLASSES ?= "package_rpm"
改成
PACKAGE_CLASSES ?= "package_ipk"
尾端新增:
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"
IMAGE_INSTALL_append=" <套件>"
INHERIT += "extrausers"
EXTRA_USERS_PARAMS = "usermod -P <登入帳號> <登入密碼>; "
擴展rootfs到20GB
IMAGE_ROOTFS_EXTRA_SPACE = "20971520"
6.相機patch:
patch下載
將patch丟到meta-raspberry資料夾底下,並應用。
git apply <PATH檔案>
bitbake core-image-x11
會看到:
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
sudo bmaptool copy tmp/deploy/images/raspberrypi4/core-image-x11-raspberrypi4.wic.bz2 <SDCORD所在位置>
這裡透過screen操作console
sudo screen /dev/ttyUSB0 115200
之前有寫過如何利用netdevice link和wireless.h link取得網路介面卡資訊和無線網路連線資訊。 那時是透過C language和system call ioctl操作獲取結果的。 如果是透過python要如何獲取網路介面卡資訊和無線網路連線資訊呢? 其實方法大同小異,python提供了linux system call ioctl方法和socket方法,步驟和方法是一樣的。 :::info 建議在閱讀本篇文章之前,先了解C語言版本的如何實作netdevice link
Apr 7, 2022我們可以透過netdevice取得網路介面卡的資訊,然而卻無法獲取無線網路卡的連接資訊。幸好Linux Kernel有提供standard wireless extensions解決這個問題。wireless.h 使用方法如同netdevice,也是開啟一個新的socket,並透過ioctl發送request取得結果。 :::info socket: #include <sys/socket.h> int socket(int domain, int type, int protocol);
Apr 4, 2022Linux 提供了一系列的低階(low-level)網路介面,可供開發者使用獲取網路裝置資訊。 我們可以通過syscall ioctl去取用這些資訊ioctl 原型: #include <sys/ioctl.h> int ioctl(int d, int request, ...); 可以送出的需求如下sockios.h: /* Routing table calls. */
Apr 3, 2022OpenWRT package 基本介紹 OpenWRT為Package的集合,並對其進行維護和發布。除了Linux之外,OpenWRT幾乎所有功能都是由Package所提供的。 一個完整的Package目錄包含: Package Makefile: 描述軟體如何獲得,建置和打包(必須)。 Package patch: 獲得修改的Source code(選用)。 其他的靜態檔案,像是初始化腳本,預設設定,腳本等等(選用)。 例如,Package libusb包含了Package Makefile和Package patch:
Mar 11, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up