2026年正点原子开发板移植方案——从0开始的Rootfs之路(完结!)常见问题与解决方案:移植过程中的坑

张开发
2026/4/20 7:20:15 15 分钟阅读

分享文章

2026年正点原子开发板移植方案——从0开始的Rootfs之路(完结!)常见问题与解决方案:移植过程中的坑
正点原子IMX6ULL史诗级新内核Linux7.0移植教程完结常见问题与解决方案移植过程中的坑一路走来真不容易现在除开驱动之外的所有imx6ull教程板子已经大完结了笔者计划明天专门做一个入口指南来梳理和整理咱们目前所有IMX6ULL的uboot, 内核和根文件系统制作教程合集。仓库仍然在持续维护驱动正在热烈研究中https://github.com/Awesome-Embedded-Learning-Studio/imx-forge/前言这篇文章是你的急救包说实话这篇教程系列写到现在已经涵盖了主线内核移植的主要步骤。但实际移植过程中你一定会遇到各种奇怪的问题有些是配置错误有些是硬件问题有些是版本差异。这篇文章总结了一些最常见的问题和对应的解决方法。它更像一个急救包当你卡住的时候可以翻一下看看有没有类似的情况。如果这里没有那就要靠你的调试能力和搜索引擎了。报错速查表报错信息根本原因解决方法Cannot connect bridge (-ENODEV)设备用旧式display0写法缺少port/endpoint按 06/07 章修改设备树phandle_references: Reference to non-existent node display0删了 display0 但没删 dtsi 里的display属性加/delete-property/ display;pin already requested by 1-005dGPIO 冲突触摸和 SD 卡抢引脚删除 usdhc1 的冲突引脚Panel driver not foundCONFIG_DRM_PANEL_SIMPLE没开启开启该配置并重新编译flexcan 2090000.can: failed to get clockCAN 驱动 probe 失败检查时钟配置和 regulatormmc0: error -110 while initialising SD cardSD 卡超时可能是引脚冲突检查 pinctrl 配置Failed to allocate memory for DMACMA 内存不够增大linux,cmasizeKernel panic - not syncing: VFS: Unable to mount root fs根文件系统挂载失败检查 root 参数和 rootfs第一类——显示问题问题LCD 不亮背光也不亮症状屏幕全黑没有任何反应。排查步骤检查背光驱动ls/sys/class/backlight/echo255/sys/class/backlight/*/brightness如果还不亮是硬件问题背光供电或 PWM 信号。检查 PWM 配置cat/sys/kernel/debug/pwm|greppwm1# 应该看到 pwm1 的信息检查 regulatordmesg|grepregulator# 应该看到 backlight-display 相关的 regulator 初始化日志问题LCD 不亮背光亮症状屏幕能发光但全是黑色或白色。排查步骤检查 DRM 驱动dmesg|grep-Emxsfb|panel# 应该看到 bound panel-dpi检查时序参数用示波器测量 LCD 接口的 PCLK、HSYNC、VSYNC 信号对比数据手册的时序图。常见错误clock-frequency 不对hsync/vsync 极性反了前肩后肩太小尝试写 framebuffercat/dev/urandom/dev/fb0sleep2;kill%1如果屏幕有反应花屏说明驱动工作正常问题在时序参数。问题屏幕有花屏症状屏幕有颜色但不正常条纹、色块等。可能原因数据线引脚配置错误检查 pinctrl总线宽度不匹配24bit vs 18bit时钟频率太高或太低解决方法检查 pinctrl_lcdif_dat 里的引脚配置确认每个 DATA 引脚都正确配置。第二类——触摸问题问题触摸没反应排查步骤检查 I2C 通信i2cdetect-y1# 应该在 0x5d 位置看到设备检查驱动加载dmesg|grepgoodix# 应该看到 Touchscreen registered检查输入设备ls/dev/input/event*cat/proc/bus/input/devices问题触摸坐标偏移解决方法检查屏幕分辨率fbset-i# 确认分辨率是 1024x600用 tslib 校准ts_calibrate ts_test检查触摸报告范围evtest /dev/input/event0# 触摸时查看 ABS_MT_POSITION_X/Y 的值范围第三类——网络问题问题网口不通排查步骤检查接口状态iplinkshow eth0ethtooleth0检查 PHY 链路dmesg|grepfec# 应该看到 Link is Up - 100Mbps/Full检查 PHY 寄存器cat/sys/bus/mdio_bus/devices/2188000.ethernet:02/phy_id# 应该看到 PHY 的 ID问题两个网口只有一个能用可能原因MDIO 总线地址冲突解决方法检查设备树里的 PHY 地址ethphy0 应该是 reg 2ethphy1 应该是 reg 1这些地址由硬件决定不能在软件里改。第四类——GPIO 冲突这是 i.MX6ULL 开发板最常见的问题之一。典型报错pin MX6UL_PAD_GPIO1_IO09 already requested by 1-005d; cannot claim for 2040000.touchscreen pin MX6UL_PAD_GPIO1_IO05 already requested by 1-005d; cannot claim for 2190000.mmc原因GT9147 触摸屏的引脚GPIO1_IO09 和 GPIO1_IO05和 SD 卡usdhc1的引脚冲突了。两个设备都想用这两个引脚但 GPIO 只能配置一次。解决方法如果不需要 SD 卡删除 usdhc1 pinctrl 里冲突的引脚pinctrl_usdhc1: usdhc1grp { fsl,pins /* ... 其他引脚 ... */ /* 删除下面两行 */ /* MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 */ /* MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059 */ ; };如果 SD 卡必须用需要调整硬件设计把触摸屏引脚改到其他 GPIO 上。第五类——时钟问题典型报错mxsfb 21c8000.lcdif: failed to get clk: -517原因时钟源配置错误或者时钟驱动没有正确初始化。解决方法检查设备树里的时钟配置lcdif { assigned-clocks clks IMX6UL_CLK_LCDIF_PRE_SEL; assigned-clock-parents clks IMX6UL_CLK_PLL5_VIDEO_DIV; };检查时钟驱动dmesg|grepclk# 应该看到时钟驱动初始化的日志第六类——内存问题典型报错Failed to allocate memory for DMA原因CMA连续内存分配器内存不够DRM 驱动需要大块连续内存。解决方法增大设备树里的 CMA sizereserved-memory { linux,cma { compatible shared-dma-pool; reusable; size 0x10000000; /* 原来是 0xa000000增大到 256MB */ linux,cma-default; }; };第七类——编译问题问题dtc 编译报错arch/arm/boot/dts/nxp/imx/imx6ull-aes.dtsi:123.45: error: phandle_references原因设备树引用了不存在的节点解决方法检查被引用的节点是否存在如果不需要删除引用或使用/delete-property/问题内核配置冲突error: CONFIG_FB_MXS conflicts with CONFIG_DRM_MXSFB原因同时开启了旧 Framebuffer 和 DRM解决方法关掉旧 Framebuffer# CONFIG_FB_MXS is not set# CONFIG_FB_MXC_SYNC_PANEL is not set社区资源如果这里没有你的问题可以尝试以下资源内核邮件列表linux-arm-kernellists.infradead.orgStack Overflow搜索 “linux mainline imx6ull”NXP 社区论坛community.nxp.comGitHub Issues相关项目的 issue 页面写在最后这个教程系列到这里就结束了。我们从为什么选择主线内核开始一步步讲解了环境搭建、源码获取、配置、设备树迁移、显示系统、触摸屏、网络接口最后是调试技巧和常见问题。主线内核的移植不是一件轻松的事但当你看到屏幕亮起、触摸灵敏、网络通畅的那一刻所有的辛苦都是值得的。更重要的是通过这个过程你真正理解了 Linux 内核的工作原理这是用厂商 BSP 永远学不到的。祝你移植顺利完整检查清单移植完成后用这个清单验证你的系统# 1. 内核版本uname-r# 应该显示 7.0.0-rc4 或类似# 2. DRM 设备ls/dev/dri/card0cat/sys/class/drm/card0-HDMI-A-1/status# 应该显示 connected# 3. 触摸设备ls/dev/input/event* evtest /dev/input/event0# 触摸应该有反应# 4. 网络接口iplinkshow eth0 eth1ping-c4192.168.1.100# 网络应该正常# 5. 内核配置zcat /proc/config.gz|grep-EDRM_MXSFB|PANEL_SIMPLE|FEC|MICREL|GOODIX# 应该都是 y参考资源Linux Kernel Documentation - 内核官方文档i.MX 6ULL Reference Manual - 芯片参考手册Device Tree Specification - 设备树规范DRM/KMS Documentation - DRM 文档

更多文章