点击↑深色口袋物联,选择关注公众号,获取更多内容,不迷路
目标板卡:UDOO Neo(Basic / Full,i.MX6SoloX)

目标软件版本:
交叉工具链:Linaro 7.5 arm-linux-gnueabihf-
手里这块 UDOO Neo 是 2015 年左右的老板,官方/社区镜像大致是:
到了 2025 年,这样的老镜像有几个问题:
所以决定:用主线 U‑Boot + Linux + Buildroot 自己搭一套最小系统,把这块板子变成一个“新内核 + 新构建系统”的学习平台。
UDOO Neo有3个型号,Basic,Extend,Full,底板一样,只是配置大小或有无的区别,本人的是Full版本,其核心特性大致如下:
板子最大的特点是 “Linux + MCU + Arduino 生态” 一体,非常适合作为嵌入式 Linux / MCU 协同开发的实验平台。
为了和现有xboard环境保持一致,直接使用:
arm-linux-gnueabihf;export CROSS_COMPILE=arm-linux-gnueabihf-export ARCH=arm后续 U‑Boot、kernel、Buildroot 都统一使用这个工具链。
主线 U‑Boot 已经对 i.MX6SoloX 和 UDOO Neo 有较好支持,相关提交记录显示:
configs/udoo_neo_defconfig:专门为 UDOO Neo 准备的配置;大致步骤:
# 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 镜像;fdtfile 变量,用于指定设备树文件Neo 没有板载 eMMC,只能从 SD 卡启动。典型布局可以参考 Buildroot 的 genimage 配置
SPLu-boot.imgBuildroot 的 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)。主线内核早在 4.10 就已经合并了 UDOO Neo 的设备树支持
imx6sx-udoo-neo-basic.dtsimx6sx-udoo-neo-full.dtsimx6sx-udoo-neo-extended.dtsimx6sx-udoo-neo.dtsi在 5.x 内核中,这些文件仍然存在(从 5.19 的 changelog 里还能看到 imx6sx-udoo-neo 相关补丁kernel.org)。
使用 imx_v6_v7 defconfig 作为基础(Buildroot 的 mx6sx_udoo_neo_defconfig 也是这么干的):
make imx_v6_v7_defconfig这个配置已经包含:
在 5.15 内核源码中,arch/arm/boot/dts/ 下会有:
imx6sx-udoo-neo-basic.dtsimx6sx-udoo-neo-full.dtsimx6sx-udoo-neo-extended.dtsimx6sx-udoo-neo.dtsisdu.dk+2编译 DTB:
make dtbs得到:
imx6sx-udoo-neo-basic.dtbimx6sx-udoo-neo-full.dtbimx6sx-udoo-neo-extended.dtb将对应 DTB 放到 SD 卡 boot 分区,并在 U‑Boot 中设置:
setenv fdt_file imx6sx-udoo-neo-full.dtb saveenvmake zImage modulesmake INSTALL_MOD_PATH=/path/to/rootfs modules_install将 zImage 和 DTB 放到 SD 卡 boot 分区,模块安装到 rootfs,以便后续加载 Wi‑Fi 等模块。
Buildroot 官方已经对 UDOO Neo 有完整支持,提交记录显示:
configs/mx6sx_udoo_neo_defconfig,支持 Basic/Full/Extended 三种变体当前 Buildroot master 中的 mx6sx_udoo_neo_defconfig 使用的是内核 6.6.x 和 U‑Boot 2022.01 ,但版本(buildroot2021.02 + U‑Boot 2020.10 + kernel 5.15.173)同样可以复用其框架。
在 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:可直接写卡的整卡镜像。如下所示:

现象:
eth0 能识别,但无法自动获取 IP;分析:
FEC 以太网驱动;且包含了以太网 PHY 是 KSZ8091。在设备树中确认:ethernet 节点正确配置 PHY 地址、phy-mode;在完成上述步骤后,基本达成:

udoo_neo_defconfig 已经把大部分东西配好,包括 SPL、DDR 初始化、串口等imx6sx-udoo-neo.dtsi + 各变体mx6sx_udoo_neo_defconfig 已经打通了 U‑Boot、内核、设备树和 genimage 镜像布局genimage.cfg,减少“手滑”arm的板子,基本都可以跑xboard系统了,后面更新arm64板子!对应xboard系统也升级!