Yocto 编译 Raspberry Pi 4B

1. 环境准备:使用 Ubuntu 22.04 编译,安装必要组件

复制代码
sudo apt install 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 libegl1-mesa libsdl1.2-dev pylint xterm python3-subunit mesa-common-dev zstd liblz4-tool

2. 代码下载

首先下载 kirkstone 分支的 Poky 源码:

复制代码
git clone -b kirkstone https://gitlab.com/yoctoproject/poky.git poky-kirkstone

然后进入 poky-kirkstone 文件夹,下载 kirkstone 分支的 meta-raspberrypi

复制代码
cd poky-kirkstone
git clone -b kirkstone https://github.com/agherzan/meta-raspberrypi.git meta-raspberrypi

3. 编译及配置

3.1 创建编译工作区

复制代码
source poky-kirkstone/oe-init-build-env rpi-build

3.2 修改 conf/bblayers.conf 文件

将下载的 meta-raspberrypi 层加入编译:

复制代码
cd rpi-build/conf
vi bblayers.conf

在文件中添加以下内容:

复制代码
BBLAYERS ?= " \
  /home/linux/yocto/poky-kirkstone/meta \
  /home/linux/yocto/poky-kirkstone/meta-poky \
  /home/linux/yocto/poky-kirkstone/meta-yocto-bsp \
  /home/linux/yocto/poky-kirkstone/meta-raspberrypi \
"

3.3 修改 conf/local.conf 文件

修改 MACHINEraspberrypi4-64

复制代码
vi local.conf

找到并修改以下行:

复制代码
MACHINE ??= "raspberrypi4-64"

在文件末尾添加自定义配置项:

复制代码
############# Add by tao #######################################

IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
SDIMG_ROOTFS_TYPE = "ext4.xz"

## enable uart
ENABLE_UART = "1"

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

############# End by tao ########################################

3.4 配置国内镜像源(可选,用于加速下载)

local.conf 末尾添加以下内容:

复制代码
============================
国内网络专属:下载加速配置
============================

1. 优先使用清华大学 TUNA 镜像站 (涵盖了 Git 和常规压缩包)
PREMIRRORS:prepend = "\
    git://.*/.* https://mirrors.tuna.tsinghua.edu.cn/git/ \n \
    https?://.*/.* https://mirrors.tuna.tsinghua.edu.cn/yocto/ \n \
    git://github.com/ https://ghproxy.com/https://github.com/ \n \
"

2. 如果清华镜像偶尔抽风,备用北京外国语大学 BFSU 镜像
PREMIRRORS:append = "\
    git://.*/.* https://mirrors.bfsu.edu.cn/git/ \n \
    https?://.*/.* https://mirrors.bfsu.edu.cn/yocto/ \n \
"

3. 针对 wget 下载的调优(增加重试次数,忽略证书校验)
FETCHCMD_wget = "/usr/bin/wget -t 10 --passive-ftp --no-check-certificate"

4. 针对 Git 的调优(增加深度限制和超时)
GIT_CLONE_PARAMS = "--depth 1 --no-single-branch"
FETCHCMD_git = "/usr/bin/git -c core.fsyncobjectfiles=0 -c gc.autoDetach=false -c core.pager=cat"

4. 开始编译

配置完成后,使用 bitbake 命令开始编译:

复制代码
bitbake core-image-base

编译成功后,镜像文件位于以下目录:

复制代码
~/yocto/rpi-build/tmp/deploy/images/raspberrypi4-64/

5. 使用串口登录树莓派 4B 开发板

通过串口工具(如 PuTTY)登录树莓派,登录信息如下:

复制代码
raspberrypi4-64 login: root
root@raspberrypi4-64:~#
相关推荐
螺丝钉的扭矩一瞬间产生高能蛋白8 天前
QT的C++接口基础用法
c++·qt·嵌入式软件·嵌入式linux·linux应用
Bruce_kaizy9 天前
c++ linux环境编程——从应用层到linux内核深入了解文件io的调用机制(爆肝)
linux·c++·c·嵌入式linux·文件io
Joseph Cooper18 天前
Linux Power Management 子系统:从 suspend/resume 到 Runtime PM、PM QoS
linux·驱动开发·linux kernel·嵌入式linux·电源管理
Z文的博客21 天前
【避坑实录】Qt 4.8.6 + Paho MQTT C客户端 + OpenSSL静态链接的血泪史
c语言·开发语言·qt·嵌入式linux
小柯博客23 天前
Amazon Kinesis Video Streams C WebRTC SDK 开发实战
c语言·开发语言·网络·stm32·嵌入式硬件·webrtc·yocto
小柯博客24 天前
STM32MP2 RIF资源隔离框架详解:从架构到实践
网络·stm32·单片机·嵌入式硬件·架构·嵌入式·yocto
うちは止水1 个月前
linux yocto bitbake构建系统生成SDK包
linux·sdk·yocto·bitbake
charlie1145141911 个月前
嵌入式Linux模块学习——insmod 底层全流程解剖:从用户命令到内核内存
linux·c·嵌入式linux
Z文的博客1 个月前
嵌入式 ARM 设备交叉编译 mosquitto 2.0.20 (完整 TLS 支持) 详细教程 TRAE全程辅助,没敲一行代码
qt·mqtt·嵌入式·ai编程·mosquitto·嵌入式linux·trae