参考文章

项目剖析

board/, configs/, linux/, packages/与不同的板子bearing相关,来自该特定供应商的芯片。

board/ 包含由名为 家族。在每个这样的 family 目录中都驻留着内核配置 该系列中各个处理器的文件、通用补丁和其他 特定于系列的文件。

configs/目录包含默认配置文件 (defconfig) 带有来自给定供应商的处理器的各种板。这些配置文件因硬件设置、包含的软件包集、不同的默认值而设置不同。这些 defconfig 文件中的每一个都是单独的包中生成单独的固件二进制文件。

package/目录中包含指向用于构建结果的包的符号链接 固件。

Config.in是一个配置文件,它整合了来自所有 提供的软件包。

ssc338Q烧录的FPV固件的Buildroot 配置文件

Buildroot 是用于 OpenIPC 的 Linux 发行版。用于许多嵌入式系统,因为它的占用空间非常小,并且可以轻松定制以包含或排除特定功能

编译目标

ssc338q
引脚
接口

编译步骤

OpenIPC的Buildroot包

OpenIPC Buildroot 2020.02.12 Buildroot 2021.02 Buildroot 2022.08 Buildroot HEAD
ambarella-osdrv-s3l
ambarella_patcher 0.1
anyka_patcher 0.1
aura-httpd (git)
aws-producer (git)
aws-webrtc (git)
baresip-openipc 1.0.0
busybox
busybox-openipc 1.31.1 busybox 1.31.1 busybox 1.33.2 busybox 1.35.0 busybox 1.35.0
dropbear-openipc 2022.82 dropbear 2019.78 dropbear 2020.81 dropbear 2022.82 dropbear 2022.82
f2fs-tools-openipc 1.13.0 f2fs-tools 1.13.0 f2fs-tools 1.14.0 f2fs-tools 1.15.0 f2fs-tools 1.15.0
fdk-aac-openipc (git) fdk-aac 2.0.1 fdk-aac 2.0.1 fdk-aac 2.0.2 fdk-aac 2.0.2
ffmpeg-openipc 4.4.2 ffmpeg 4.2.4 ffmpeg 4.3.3 ffmpeg 4.4.2 ffmpeg 4.4.2
fullhan-osdrv-fh8852v100
fullhan-osdrv-fh8852v200
fullhan_patcher 0.1
fwprintenv-openipc 2020.04 uboot-tools 2020.01 uboot-tools 2020.04 uboot-tools 2021.07 uboot-tools 2021.07
gdbserver-lite (git)
goke-osdrv-gk710x
goke-osdrv-gk7205v200
goke_patcher 0.1
grainmedia-osdrv-gm8136
grainmedia_patcher 0.1
hisi_gpio
hisilicon-opensdk (git)
hisilicon-osdrv-hi3516av100
hisilicon-osdrv-hi3516cv100
hisilicon-osdrv-hi3516cv200
hisilicon-osdrv-hi3516cv300
hisilicon-osdrv-hi3516cv500
hisilicon-osdrv-hi3516ev200
hisilicon-osdrv-hi3519v101
hisi_patcher 0.1
i2c-telemetry
ingenic-opensdk
ingenic-osdrv-t20
ingenic-osdrv-t21
ingenic-osdrv-t31
ingenic_patcher
ipctool (git)
json-c-openipc json-c-0.15-20200726 json-c 0.15 json-c 0.15 json-c 0.16 json-c 0.16
lame-openipc 3.100 lame 3.100 lame 3.100 lame 3.100 lame 3.100
libcurl-openipc 7.76.0 libcurl 7.76.0 libcurl 7.79.1 libcurl 7.84.0 lame 3.100
libevent-openipc (git) libevent 2.1.11 libevent 2.1.12 libevent 2.1.12 libevent 2.1.12
libhv-openipc 1.1.1
libogg-openipc 1.3.5 libogg 1.3.4 libogg 1.3.4 libogg 1.3.5 libogg 1.3.5
librem-openipc 0.6.0
libre-openipc 1.1.0
libsrt-openipc 1.4.4
libsrtp-openipc (git)
libwebsockets-openipc 4.2.2 libwebsockets 3.2.2 libwebsockets 4.0.21 libwebsockets 4.3.2 libwebsockets 4.3.2
linux-firmware-openipc 20190717 linux-firmware 20190717 linux-firmware 20201022 linux-firmware 20220310 linux-firmware 20220310
majestic
majestic-fonts
mavlink-router
mbedtls-openipc 2.25.0 mbedtls 2.16.10 mbedtls 2.16.12 mbedtls 2.28.1 linux-firmware 20220310
memdump
microbe-web (git)
microsnander (git)
mini (git)
mini-snmpd-openipc 1.4 mini-snmpd 1.4 mini-snmpd 1.6 mini-snmpd 1.6 mini-snmpd 1.6
motors (git)
mt7601u-ap-openipc (git)
node-exporter
novatek-osdrv-nt9856x
novatek_patcher 0.1
opus-openipc 1.3.1 opus 1.3.1 opus 1.3.1 opus 1.3.1 opus 1.3.1
quirc-openipc (git)
rockchip-osdrv-rv11xx
rockchip_patcher 0.1
rtl8188eus-openipc (git)
rtl8188fu-openipc (git)
rtl8192eu-openipc (git)
rtl8812au-openipc (git)
rtptools-openipc rtptools 1.22 rtptools 1.22 rtptools 1.22 rtptools 1.22
rtw-hostapd (git)
sigmastar-osdrv-msc313e
sigmastar-osdrv-ssc335
sigmastar_patcher 0.1
uacme-openipc 1.2.4 uacme 1.2.4 uacme 1.4.1 uacme 1.7.1 uacme 1.7.3
uqmi-openipc (git)
usrsctp (git)
vtund-openipc 3.0.2
wifibroadcast (git)
wireguard-openipc
xiongmai-opensdk-xm510
xiongmai-osdrv-xm510
xiongmai-osdrv-xm530
xiongmai_patcher 0.1
xmdp
yaml-cli (git)
zerotier-one (git)

默认情况下,每次构建固件时,OpenIPC 构建脚本都会创建一个新的 buildroot 源文件树

# Architecture
BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_NEON_VFPV4=y
BR2_ARM_INSTRUCTIONS_THUMB2=y

# Toolchain
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y

# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/infinity6e-ssc012b.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_XZ=y

# Filesystem
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config"
BR2_PACKAGE_EXFATPROGS=y
BR2_PACKAGE_UBOOT_TOOLS=y
BR2_PACKAGE_ZLIB=y
# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
BR2_PACKAGE_WIRELESS_TOOLS=y
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_TARGET_ROOTFS_UBI=y
BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048
BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y
BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/scripts/ubifs/ubinize_sigmastar.cfg"
BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000

# OpenIPC
BR2_OPENIPC_SOC_VENDOR="sigmastar"
BR2_OPENIPC_SOC_MODEL="ssc338q"
BR2_OPENIPC_SOC_FAMILY="infinity6e"
BR2_OPENIPC_VARIANT="fpv"
BR2_OPENIPC_FLASH_SIZE="16"

# Packages
BR2_PACKAGE_DROPBEAR_OPENIPC=y
BR2_PACKAGE_EXFAT_OPENIPC=y
BR2_PACKAGE_IPCTOOL=y
BR2_PACKAGE_JSONFILTER=y
BR2_PACKAGE_LIBCURL_OPENIPC=y
BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y
# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set
BR2_PACKAGE_LIBOGG_OPENIPC=y
BR2_PACKAGE_LINUX_PATCHER_ATHEROS=y
BR2_PACKAGE_MAJESTIC_FONTS=y
BR2_PACKAGE_MAJESTIC_WEBUI=y
BR2_PACKAGE_MAJESTIC=y
BR2_PACKAGE_MAVFWD=y
BR2_PACKAGE_MBEDTLS_OPENIPC=y
BR2_PACKAGE_MSPOSD=y
BR2_PACKAGE_OPUS_OPENIPC=y
BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y
BR2_PACKAGE_RTL88X2EU_OPENIPC=y
BR2_PACKAGE_RTL8812AU_OPENIPC=y
BR2_PACKAGE_SIGMASTAR_OSDRV_INFINITY6E=y
BR2_PACKAGE_VTUND_OPENIPC=y
BR2_PACKAGE_WIFIBROADCAST=y
BR2_PACKAGE_YAML_CLI=y

用于构建嵌入式 Linux 系统。

Architecture

  • BR2_arm=y: 目标架构是 ARM。
  • BR2_cortex_a7=y: 使用 Cortex-A7 处理器。
  • BR2_ARM_FPU_NEON_VFPV4=y: 启用 NEON 和 VFPv4 浮点单元。
  • BR2_ARM_INSTRUCTIONS_THUMB2=y: 使用 Thumb-2 指令集。

Toolchain

  • BR2_TOOLCHAIN_EXTERNAL=y: 使用外部工具链。
  • BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y: 使用自定义外部工具链。
  • BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y: 下载外部工具链。
  • BR2_TOOLCHAIN_EXTERNAL_URL: 工具链下载 URL。
  • BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX: 工具链前缀。
  • BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y: 使用 4.9 版内核头文件。
  • BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y: 使用自定义的 GNU C 库。

Kernel

  • BR2_LINUX_KERNEL=y: 构建 Linux 内核。
  • BR2_LINUX_KERNEL_CUSTOM_TARBALL=y: 使用自定义内核压缩包。
  • BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION: 内核压缩包位置。
  • BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y: 使用自定义内核配置。
  • BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE: 内核配置文件位置。
  • BR2_LINUX_KERNEL_UIMAGE=y: 生成 uImage 格式的内核镜像。
  • BR2_LINUX_KERNEL_XZ=y: 使用 XZ 压缩内核镜像。

Filesystem

  • BR2_PACKAGE_BUSYBOX_CONFIG: BusyBox 配置文件位置。
  • BR2_PACKAGE_EXFATPROGS=y: 包含 exFAT 文件系统工具。
  • BR2_PACKAGE_UBOOT_TOOLS=y: 包含 U-Boot 工具。
  • BR2_PACKAGE_ZLIB=y: 包含 Zlib 库。
  • BR2_PACKAGE_WIRELESS_TOOLS=y: 包含无线工具。
  • BR2_TARGET_ROOTFS_CPIO=y: 生成 CPIO 格式的根文件系统。
  • BR2_TARGET_ROOTFS_SQUASHFS=y: 生成 SquashFS 格式的根文件系统。
  • BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y: 使用 XZ 压缩 SquashFS 文件系统。
  • BR2_TARGET_ROOTFS_UBI=y: 生成 UBI 格式的根文件系统。
  • BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048: UBI 子大小。
  • BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y: 使用自定义 UBI 配置。
  • BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE: UBI 配置文件位置。
  • BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000: UBIFS LEB 大小。

OpenIPC

  • BR2_OPENIPC_SOC_VENDOR: SoC 供应商。
  • BR2_OPENIPC_SOC_MODEL: SoC 型号。
  • BR2_OPENIPC_SOC_FAMILY: SoC 系列。
  • BR2_OPENIPC_VARIANT: 变体。
  • BR2_OPENIPC_FLASH_SIZE: 闪存大小。

Packages

  • 包含各种软件包,如 Dropbear、exFAT、IPCTool、JSONFilter、libcurl、libogg、Majestic、MAVFWD、mbedTLS、MSPOSD、Opus、RTL88x2EU、RTL8812AU、SigmaStar OSDRV、VTUN、Wifibroadcast 和 YAML CLI。