当前位置:首页>Linux>UDOO Neo更新到Linux 5.15,我的neo开发板穿新衣服了

UDOO Neo更新到Linux 5.15,我的neo开发板穿新衣服了

  • 2026-10-08 19:38:52
UDOO Neo更新到Linux 5.15,我的neo开发板穿新衣服了

点击↑深色口袋物联,选择关注公众号,获取更多内容,不迷路

前面回顾了arm嵌入式linux开发板:每一块板子,都是时代的一道刻痕,提出了计划回炉再造,我的xboard计划,旧板穿新衣今天是实践篇,即将第8块xboard(udoo neo)移植xboard系统(uboot 2020.10、kernel 5.15.x、buildroot2021.02)。

目标板卡:UDOO Neo(Basic / Full,i.MX6SoloX)

目标软件版本:

  • • U‑Boot:2020.10
  • • Linux:5.15.173
  • • Buildroot:2021.02

交叉工具链:Linaro 7.5 arm-linux-gnueabihf-

1. 项目背景:为什么要“重做系统”

手里这块 UDOO Neo 是 2015 年左右的老板,官方/社区镜像大致是:

  • • 早期 Armbian 为 Neo 提供的 Debian Jessie,内核 3.14.55
  • • WikiDevi 记录的出厂固件是 Linux 3.14.56 + Ubuntu 14.04
  • • 后来又有 UDOObuntu 18.04 等新镜像,但内核仍然停留在 4.x 左右

到了 2025 年,这样的老镜像有几个问题:

  1. 1. 内核太老,新特性学不到
    • • 3.14 内核没有现代设备树绑定、DRM/KMS 图形框架、新电源管理、BPF 等;
    • • 很多驱动模型和 API 都已经变化,直接看主线内核文档对不上。
  2. 2. 构建系统老旧
    • • 官方镜像要么是定制的 UDOObuntu,要么是老 Armbian,不适合作为“学习现代嵌入式 Linux 构建”的平台;
    • • 想自己加包、升级工具链都很麻烦。
  3. 3. 官方已经基本停更
    • • UDOO Neo 早就 EOL,新镜像更多是社区维护,学习价值有限

所以决定:用主线 U‑Boot + Linux + Buildroot 自己搭一套最小系统,把这块板子变成一个“新内核 + 新构建系统”的学习平台。

2. 板卡介绍:UDOO Neo 功能特色

UDOO Neo有3个型号,Basic,Extend,Full,底板一样,只是配置大小或有无的区别,本人的是Full版本,其核心特性大致如下:

  • • SoC:NXP i.MX6SoloX,
    • • Cortex‑A9 @ 1 GHz(运行 Linux)
    • • Cortex‑M4 @ 200 MHz(可运行 MCU 固件/RTOS)
  • • 内存:1 GB DDR3
  • • 存储:microSD 卡槽,无板载 eMMC
  • • 网络与外设 :
    • • 10/100M 以太网(KSZ8091 PHY)
    • • 1× USB 2.0 Type‑A、1× USB OTG
    • • Wi‑Fi + Bluetooth(Full 版本为 TI WL1835 模块)
    • • micro HDMI、LVDS + 触摸接口、摄像头接口等
  • • Arduino 兼容:
    • • 板载 Arduino 兼容 GPIO,可从 Linux 侧编程或通过 Arduino IDE 烧录 M4 固件
  • • 串口:3.3V TTL,115200 8N1,用于 U‑Boot/Linux 控制台

板子最大的特点是 “Linux + MCU + Arduino 生态” 一体,非常适合作为嵌入式 Linux / MCU 协同开发的实验平台。

3. 移植最小系统

3.1 交叉工具链选择:Linaro 7.5

为了和现有xboard环境保持一致,直接使用:

  • • 工具链:Linaro GCC 7.5,目标 arm-linux-gnueabihf;
  • • 用法(示例):
export CROSS_COMPILE=arm-linux-gnueabihf-export ARCH=arm

后续 U‑Boot、kernel、Buildroot 都统一使用这个工具链。

3.2 U‑Boot 2020.10 移植

主线 U‑Boot 已经对 i.MX6SoloX 和 UDOO Neo 有较好支持,相关提交记录显示:

  • • configs/udoo_neo_defconfig:专门为 UDOO Neo 准备的配置;
  • • 补丁历史中逐步迁移到 Kconfig,并启用 distro boot 支持

3.2.1 配置与编译

大致步骤:

# 1. 解压 U-Boot 2020.10tar xf u-boot-2020.10.tar.bz2cd u-boot-2020.10# 2. 使用 UDOO Neo 专用 defconfigmake udoo_neo_defconfig# 3. 编译make CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)

编译产物:

  • • SPL:i.MX6 的 SPL(Secondary Program Loader),用于初始化 DDR、加载主 U‑Boot;
  • • u-boot.img:主 U‑Boot 镜像;
  • • U‑Boot 环境配置中已经支持 fdtfile 变量,用于指定设备树文件

3.2.2 启动介质与布局

Neo 没有板载 eMMC,只能从 SD 卡启动。典型布局可以参考 Buildroot 的 genimage 配置

  • • SD 卡前 1MB 空间(未分区):
    • • 1K offset:SPL
    • • 69K offset:u-boot.img
  • • 后面跟一个 ext4 分区作为 rootfs(或再单独分一个 boot 分区)。

3.2.3 U‑Boot 环境要点

Buildroot 的 boot.scr.txt 给出了一个可参考的启动脚本

setenv finduuid "part uuid mmc 0:1 uuid"run finduuidrun findfdtsetenv bootargs "console=ttymxc0,115200 root=PARTUUID=${uuid} rootwait rootfstype=ext4"load mmc 0:1 ${fdt_addr} boot/${fdt_file}load mmc 0:1 ${loadaddr} boot/zImagebootz ${loadaddr} -${fdt_addr}

关键点:

  • • console=ttymxc0:串口控制台;
  • • root=PARTUUID=...:使用分区 UUID 指定根文件系统;
  • • fdt_file 由 U‑Boot 根据板子型号设置(例如 imx6sx-udoo-neo-full.dtb)。

3.3 Linux 5.15.173 移植

主线内核早在 4.10 就已经合并了 UDOO Neo 的设备树支持

  • • imx6sx-udoo-neo-basic.dts
  • • imx6sx-udoo-neo-full.dts
  • • imx6sx-udoo-neo-extended.dts
  • • imx6sx-udoo-neo.dtsi

在 5.x 内核中,这些文件仍然存在(从 5.19 的 changelog 里还能看到 imx6sx-udoo-neo 相关补丁kernel.org)。

3.3.1 内核配置

使用 imx_v6_v7 defconfig 作为基础(Buildroot 的 mx6sx_udoo_neo_defconfig 也是这么干的):

make imx_v6_v7_defconfig

这个配置已经包含:

  • • i.MX6 时钟、GPIO、I²C、SPI、MMC/SD、Ethernet(fec)、PWM、UART 等;
  • • 基础 DRM 显示框架(配合 HDMI/LVDS)。

3.3.2 设备树

在 5.15 内核源码中,arch/arm/boot/dts/ 下会有:

  • • imx6sx-udoo-neo-basic.dts
  • • imx6sx-udoo-neo-full.dts
  • • imx6sx-udoo-neo-extended.dts
  • • imx6sx-udoo-neo.dtsisdu.dk+2

编译 DTB:

make dtbs

得到:

  • • imx6sx-udoo-neo-basic.dtb
  • • imx6sx-udoo-neo-full.dtb
  • • imx6sx-udoo-neo-extended.dtb

将对应 DTB 放到 SD 卡 boot 分区,并在 U‑Boot 中设置:

setenv fdt_file imx6sx-udoo-neo-full.dtb   saveenv

3.3.3 内核镜像

make zImage modulesmake INSTALL_MOD_PATH=/path/to/rootfs modules_install

将 zImage 和 DTB 放到 SD 卡 boot 分区,模块安装到 rootfs,以便后续加载 Wi‑Fi 等模块。

3.4 Buildroot 2021.02 移植

Buildroot 官方已经对 UDOO Neo 有完整支持,提交记录显示:

  • • 新增 configs/mx6sx_udoo_neo_defconfig,支持 Basic/Full/Extended 三种变体
  • • 对 U‑Boot 和内核补丁会随着上游版本更新而逐步去掉,因为上游已经合并

当前 Buildroot master 中的 mx6sx_udoo_neo_defconfig 使用的是内核 6.6.x 和 U‑Boot 2022.01 ,但版本(buildroot2021.02 + U‑Boot 2020.10 + kernel 5.15.173)同样可以复用其框架。

3.4.1 基于 mx6sx_udoo_neo_defconfig 改造

在 Buildroot 2021.02 中,可以先基于官方 mx6sx_udoo_neo_defconfig,再修改版本号:

make mx6sx_udoo_neo_defconfigmake menuconfig

配置 Kernel 和 Bootloaders ,指定上面的uboot和kernel地址,配置文件以及设备树,编译最后得到需要的镜像

构建完成后,output/images/ 下会有:

  • • SPL、u-boot.img;
  • • zImage;
  • • imx6sx-udoo-neo-*.dtb;
  • • rootfs.ext4;
  • • sdcard.img:可直接写卡的整卡镜像。

如下所示:

4. 遇到问题与解决突破

4.3 以太网问题

现象:

  • • eth0 能识别,但无法自动获取 IP;

分析:

  • 首先确认内核配置,已经
    启用了FEC 以太网驱动;且包含了以太网 PHY 是 KSZ8091。在设备树中确认:ethernet 节点正确配置 PHY 地址、phy-mode;
  • 最后确认是线的问题

5. 完成任务:最小系统现状

在完成上述步骤后,基本达成:

  1. 1. 启动链完整
    • • SD 卡启动:i.MX6 ROM → SPL → U‑Boot (2020.10) → Linux 5.15.173 → Buildroot 根文件系统。
  2. 2. 基础外设可用
    • • 串口控制台登录;
    • • SD 卡读写;
    • • 以太网口可用(至少能 ping 通局域网)。
  3. 3. 构建环境统一
    • • 使用 Buildroot 统一管理工具链、内核、U‑Boot 和根文件系统;
    • • 方便后续添加 Python、Node.js、网络服务、图形界面等。

6. 复盘总结

6.1 技术要点

  1. 1. i.MX6SoloX 启动流程是关键
    • • 必须理解:ROM → SPL → U‑Boot 的两级启动;
    • • udoo_neo_defconfig 已经把大部分东西配好,包括 SPL、DDR 初始化、串口等
  2. 2. 设备树驱动模型
    • • 主线内核已经把 Neo 系列抽象成 imx6sx-udoo-neo.dtsi + 各变体
    • • 理解这些文件,对理解整个平台的外设拓扑至关重要。
  3. 3. Buildroot 作为统一构建平台
    • • 官方 mx6sx_udoo_neo_defconfig 已经打通了 U‑Boot、内核、设备树和 genimage 镜像布局
    • • 只需调整版本号,就能快速适配新内核 / 新 U‑Boot。

6.2 工程经验

  1. 1. 镜像布局要和启动流程严格对应
    • • SPL / U‑Boot 的偏移错了,任何软件调试都没意义;
    • • 优先使用 Buildroot 提供的 genimage.cfg,减少“手滑”
  2. 2. 分层调试:先 SPL/U‑Boot,再内核,再驱动
    • • 先确认 U‑Boot 能进命令行、能读 SD 卡;
    • • 再确认内核能启动到 shell;
    • • 最后逐个调试外设。
  3. 3. 善用主线与社区补丁
    • • U‑Boot 和内核的 UDOO Neo 支持都已经上游化
    • • 自己写板级代码时,对照上游补丁可以少踩很多坑。

arm的板子,基本都可以跑xboard系统了,后面更新arm64板子!对应xboard系统也升级!


最新文章

随机文章