Docker file for running yocto
This commit is contained in:
parent
8bc4f4f48d
commit
ea5b9e6a45
63
image/Dockerfile
Normal file
63
image/Dockerfile
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
# Prevent interactive prompts during package installation
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install Yocto build dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
gawk \
|
||||||
|
wget \
|
||||||
|
git \
|
||||||
|
diffstat \
|
||||||
|
unzip \
|
||||||
|
texinfo \
|
||||||
|
gcc \
|
||||||
|
build-essential \
|
||||||
|
chrpath \
|
||||||
|
socat \
|
||||||
|
cpio \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
python3-pexpect \
|
||||||
|
xz-utils \
|
||||||
|
debianutils \
|
||||||
|
iputils-ping \
|
||||||
|
python3-git \
|
||||||
|
python3-jinja2 \
|
||||||
|
python3-subunit \
|
||||||
|
zstd \
|
||||||
|
liblz4-tool \
|
||||||
|
file \
|
||||||
|
locales \
|
||||||
|
libacl1 \
|
||||||
|
sudo \
|
||||||
|
vim \
|
||||||
|
less \
|
||||||
|
tree \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set up locale
|
||||||
|
RUN locale-gen en_US.UTF-8
|
||||||
|
ENV LANG=en_US.UTF-8
|
||||||
|
ENV LANGUAGE=en_US:en
|
||||||
|
ENV LC_ALL=en_US.UTF-8
|
||||||
|
|
||||||
|
# Create non-root user for Yocto builds (Yocto doesn't like running as root)
|
||||||
|
RUN useradd -m -s /bin/bash yocto && \
|
||||||
|
echo "yocto ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /workspace
|
||||||
|
|
||||||
|
# Change ownership of workspace to yocto user
|
||||||
|
RUN chown -R yocto:yocto /workspace
|
||||||
|
|
||||||
|
# Switch to yocto user
|
||||||
|
USER yocto
|
||||||
|
|
||||||
|
# Set up git configuration (required for Yocto)
|
||||||
|
RUN git config --global user.name "Yocto Builder" && \
|
||||||
|
git config --global user.email "yocto@builder.local"
|
||||||
|
|
||||||
|
# Default command to start interactive shell
|
||||||
|
CMD ["/bin/bash"]
|
||||||
68
image/Implementation_plan.md
Normal file
68
image/Implementation_plan.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Yocto FCB1010 Looper System - Implementation Guide
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
Build a minimal, real-time Linux system for an audio looper pedal using Yocto Project. The system boots from initramfs only for maximum speed, includes RT kernel patches, and supports over-the-air updates via SWUpdate with A/B partitioning.
|
||||||
|
|
||||||
|
**Key Requirements:**
|
||||||
|
- x64 hardware (NUC-class)
|
||||||
|
- Static IP: 192.168.0.50
|
||||||
|
- SSH access with public key authentication
|
||||||
|
- USB live installer that can dd copy to disk
|
||||||
|
- A/B partition scheme for reliable updates
|
||||||
|
- RT kernel with PREEMPT_RT
|
||||||
|
- JACK audio stack
|
||||||
|
- SWUpdate for OTA updates
|
||||||
|
|
||||||
|
## Architecture Decisions
|
||||||
|
|
||||||
|
**Boot Strategy:** EFI boot → initramfs-only (no rootfs mounting)
|
||||||
|
**Network:** WiFi with static IP, credentials baked into image
|
||||||
|
**Updates:** SWUpdate web interface + SSH API access
|
||||||
|
**Installation:** USB boot → SSH → dd copy entire USB to target disk
|
||||||
|
**Partition Layout:** EFI boot partition with initramfs-A.cpio.gz and initramfs-B.cpio.gz
|
||||||
|
|
||||||
|
## Yocto Implementation Approach
|
||||||
|
|
||||||
|
**Custom Layer Structure:**
|
||||||
|
Create meta-looper with recipes for kernel config (RT patches), network setup (static IP + WiFi), SSH keys, audio stack (JACK), and two image types: main system (initramfs) and USB installer.
|
||||||
|
|
||||||
|
**Build Configuration:**
|
||||||
|
- MACHINE = "genericx86-64"
|
||||||
|
- Kernel: linux-yocto with RT features
|
||||||
|
- Minimal install, not Pokey distribution
|
||||||
|
|
||||||
|
## Key Implementation Points
|
||||||
|
|
||||||
|
**Kernel:** Enable PREEMPT_RT, high-res timers, and audio subsystem. Use kernel fragment files (.cfg) to configure RT options.
|
||||||
|
|
||||||
|
**Networking:** Create recipes for wpa_supplicant.conf and network interfaces with static IP. Include WiFi credentials at build time.
|
||||||
|
|
||||||
|
**SSH:** Recipe to install public key to root's authorized_keys during image build.
|
||||||
|
|
||||||
|
**SWUpdate:** Configure for A/B updates, web interface on port 8080, and integration with systemd-boot for partition switching.
|
||||||
|
|
||||||
|
**USB Installer:** Second image that boots live system with installation script. Script partitions target disk, creates EFI boot partition, and dd copies the installer image to create installed system.
|
||||||
|
|
||||||
|
## Running
|
||||||
|
The build and testing platform is built in Docker. A Compose file is used to script the separate targets:
|
||||||
|
- docker compose run disk-image
|
||||||
|
- docker compose run qemu-server
|
||||||
|
- docker compose run push-update
|
||||||
|
- docker compose run ssh-client
|
||||||
|
|
||||||
|
The compose file mounts the proper directories for cache, output, ... It also forwards the proper ports for qemu.
|
||||||
|
|
||||||
|
## Testing Strategy for AI Agent
|
||||||
|
|
||||||
|
**QEMU Testing:** Use runqemu with network forwarding to test SSH, networking, and SWUpdate functionality. QEMU supports graphics for GUI testing and USB forwarding for hardware validation.
|
||||||
|
|
||||||
|
**Build Validation:** Verify initramfs size (<200MB), boot time (<10 seconds), and RT kernel configuration. Test static IP assignment and SSH key authentication.
|
||||||
|
|
||||||
|
**Update Testing:** Create test SWUpdate packages and verify A/B switching works correctly. Test both web interface and SSH-based update deployment.
|
||||||
|
|
||||||
|
**Audio Validation:** Confirm JACK installation, RT scheduling capabilities with cyclictest, and audio device detection.
|
||||||
|
|
||||||
|
**Installation Testing:** Boot USB installer in QEMU, SSH in, run installation script on virtual disk, then boot installed system to verify complete workflow.
|
||||||
|
|
||||||
|
The implementation should focus on creating minimal, working recipes that can be tested incrementally in QEMU before hardware deployment. Each component (kernel, network, SSH, audio, updates) should be testable independently.
|
||||||
19
image/docker-compose.yml
Normal file
19
image/docker-compose.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
services:
|
||||||
|
yocto:
|
||||||
|
build: .
|
||||||
|
container_name: fcb-looper-yocto
|
||||||
|
working_dir: /workspace
|
||||||
|
volumes:
|
||||||
|
# Mount workspace for persistent development
|
||||||
|
- ./workspace:/workspace
|
||||||
|
# Mount downloads cache to avoid re-downloading sources
|
||||||
|
- ./yocto-downloads:/workspace/downloads
|
||||||
|
# Mount sstate cache for faster builds
|
||||||
|
- ./yocto-sstate:/workspace/sstate-cache
|
||||||
|
# Mount output directory
|
||||||
|
- ./output:/workspace/output
|
||||||
|
environment:
|
||||||
|
- TERM=xterm-256color
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
command: /bin/bash
|
||||||
Loading…
x
Reference in New Issue
Block a user