跳到主要内容

SDK 镜像编译

Luckfox Pico-SDK 主要在 Ubuntu LTS 系统上进行开发和测试,主要支持 Ubuntu 22.04 版本。如果您的系统是 Ubuntu 22.04,只需安装相应的依赖编译即可。为了确保与不同版本的 Ubuntu兼容,我们还为用户提供了一个方便使用的 Docker 环境。

提示
  1. 目前仅在 Ubuntu 22.04 x86_64 环境下提供支持,其他平台架构暂不兼容。
  2. 严格按照文档的步骤配置就能成功编译镜像,如果出现错误请优先检查自己的环境。

1. SDK 目录介绍

  1. 获取最新的 SDK:(可任选以下两种方式,推荐国内用户使用 Gitee)
    git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
    git clone https://github.com/LuckfoxTECH/luckfox-pico.git
  2. SDK 目录结构介绍。
    ├── build.sh -> project/build.sh ---- SDK编译脚本
    ├── media --------------------------- 多媒体编解码、ISP等算法相关(可独立SDK编译)
    ├── sysdrv -------------------------- U-Boot、kernel、rootfs目录(可独立SDK编译)
    ├── project ------------------------- 参考应用、编译配置以及脚本目录
    ├── output -------------------------- SDK编译后镜像文件存放目录
    └── tools --------------------------- 烧录镜像打包工具以及烧录工具
  3. 镜像存放目录介绍。
    output/
    ├── image
    │ ├── download.bin ---------------- 烧录工具升级通讯的设备端程序,只会下载到板子内存
    │ ├── env.img --------------------- 包含分区表和启动参数
    │ ├── uboot.img ------------------- uboot镜像
    │ ├── idblock.img ----------------- loader镜像
    │ ├── boot.img -------------------- kernel镜像
    │ ├── rootfs.img ------------------ 根文件系统
    │ └── userdata.img ---------------- userdata镜像
    └── out
    ├── app_out --------------------- 参考应用编译后的文件
    ├── media_out ------------------- media相关编译后的文件
    ├── rootfs_xxx ------------------ 文件系统打包目录
    ├── S20linkmount ---------------- 分区挂载脚本
    ├── sysdrv_out ------------------ sysdrv编译后的文件
    └── userdata -------------------- userdata
  4. SDK配置文件说明luckfox-pico/project/cfg/BoardConfig_IPC
    BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_86Panel-IPC.mk BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_WebBee-IPC.mk
    BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Pi-IPC.mk BoardConfig-SPI_NAND-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
    BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra-IPC.mk BoardConfig-SPI_NAND-Busybox-RV1106_Luckfox_Pico_Pro_Max-IPC_FASTBOOT.mk
    BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Zero-IPC.mk luckfox-buildroot-nocsi-oem-pre.sh
    BoardConfig-EMMC-Busybox-RV1106_Luckfox_Pico_Ultra-IPC_FASTBOOT.mk luckfox-buildroot-oem-pre.sh
    BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico-IPC.mk luckfox-glibc-oem-pre.sh
    BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Mini-IPC.mk luckfox-rv1106-tb-emmc-post.sh
    BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk luckfox-rv1106-tb-spi_nand-post.sh
    BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_WebBee-IPC.mk luckfox-systemd-off-modem-post.sh
    BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk luckfox-userdata-pre.sh
    BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Mini-IPC.mk overlay
    BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk
  5. BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk为例,详细介绍其中关键的文件配置。
    # Config CMA size in environment
    export RK_BOOTARGS_CMA_SIZE="66M"

    # Kernel dts
    export RK_KERNEL_DTS=rv1106g-luckfox-pico-pro-max.dts

    # Target boot medium
    export RK_BOOT_MEDIUM=sd_card

    export RK_PARTITION_CMD_IN_ENV="32K(env),512K@32K(idblock),256K(uboot),32M(boot),512M(oem),256M(userdata),6G(rootfs),-(media)"

    # Target rootfs
    export LF_TARGET_ROOTFS=buildroot

    # Buildroot defconfig
    export RK_BUILDROOT_DEFCONFIG=luckfox_pico_defconfig

    # declare overlay directory
    export RK_POST_OVERLAY="overlay-luckfox-config overlay-luckfox-buildroot-init overlay-luckfox-buildroot-shadow"
    • RK_BOOTARGS_CMA_SIZE:给摄像头分配的内存,如果不使用摄像头可以将其修改为 1M
    • RK_KERNEL_DTS:指定设备树文件
    • RK_BOOT_MEDIUM:指定目标启动介质,可以是 sd_card(指的是SD卡)、spi_nand(SPI NAND Flash)和 eMMC
    • RK_PARTITION_CMD_IN_ENV:这是用于配置分区表的信息,如果需要与 SD 卡的存储空间匹配,您可以修改 rootfs 分区
    • LF_TARGET_ROOTFS:指定目标的根文件系统(Root File System)
    • RK_BUILDROOT_DEFCONFIG:指定 Buildroot 的配置文件
    • RK_POST_OVERLAY:在 overlay 文件夹下存放想要打包的文件

2. SDK 镜像编译

提示

请勿在镜像编译过程中滥用 sudo 命令,否则可能造成文件权限变更,导致编译过程失败。

2.1 SDK 镜像编译过程

  1. 安装依赖环境:
    sudo apt update
    sudo apt-get install -y git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config bc python-is-python3 passwd openssl openssh-server openssh-client vim file cpio rsync curl
  2. 请根据开发板实际型号选择对应分支,型号信息可参考《产品介绍》。
    ./build.sh lunch
    • 以 Luckfox Pico Ultra 系列为例,直接选择 RV1106_Luckfox_Pico_Ultra 即可
Loading terminal...
  1. 然后全部编译镜像。
    ./build.sh

2.2 其它在开发中常用编译命令

  1. 单独编译内核:
    ./build.sh clean kernel
    ./build.sh kernel
  2. 单独编译 uboot:
    ./build.sh clean uboot
    ./build.sh uboot
  3. 单独编译 rootfs:
    ./build.sh clean rootfs
    ./build.sh rootfs
  4. 固件打包:(适用打包自定义文件)
    ./build.sh firmware

3. 常见编译问题

  1. 使用WSL2 编译出现环境变量的错误·Your PATH contains spaces, TABs, and/or newline (\n) characters This doesn't work. Fix yOu PATH,就需要过滤空格、制表符和换行符。
    export PATH=$(echo "$PATH" | tr -d ' \t\n')
  2. 在镜像编译过程中,如果由于网络原因导致 Buildroot 软件包下载失败或下载速度较慢,可以通过以下方式解决:
    • 下载离线包,并验证是否下载完整。

      文件名描述下载
      dlbuildroot中的软件包百度网盘链接
      sha256sum -c dl.tar.bz2.sha256
      下载完整则输出:dl.tar.bz2:OK
    • 替换自己的luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/目录下的dl文件夹。

      tar -xjvf dl.tar.bz2 -C luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6
      ./build.sh