正点原子IMX6ULL开发板实战:从零编译OpenWrt 19.07.2并烧录到EMMC(含Luci界面配置)
正点原子IMX6ULL开发板OpenWrt深度实战从源码到Luci的全链路解析当一块搭载Cortex-A7架构的IMX6ULL开发板遇上OpenWrt会碰撞出怎样的火花对于嵌入式开发者而言这不仅是技术探索的乐趣更是对Linux系统深度理解的绝佳实践。本文将带你从零开始完成OpenWrt 19.07.2在正点原子IMX6ULL EMMC版开发板上的完整移植过程涵盖源码适配、内核编译、固件打包到Luci界面配置的全流程。1. 环境准备与源码适配在开始编译之前我们需要搭建一个稳定的开发环境。推荐使用Ubuntu 20.04 LTS作为开发主机其软件包兼容性经过广泛验证。不同于常规的OpenWrt编译针对IMX6ULL的移植需要特别注意架构差异和内核版本匹配问题。首先安装必要的编译工具链sudo apt-get update sudo apt-get install -y build-essential git python3 libncurses5-dev gawk \ gettext unzip libssl-dev wget libelf-dev ecj fastjar bzip2 libz-dev \ libtool automake autoconf flex bison下载OpenWrt 19.07.2源码并解压wget https://github.com/openwrt/openwrt/archive/v19.07.2.tar.gz tar -xzvf v19.07.2.tar.gz cd openwrt-19.07.2关键修改点在于target/linux/imx6/Makefile的适配架构调整将CONFIG_CPU_TYPEcortex-a9改为cortex-a7浮点支持添加vfpv3-d16到CPU特性中内核版本将LINUX_VERSION-4.14改为LINUX_VERSION-4.1提示内核版本号只需保留主次版本如4.1完整版本号可能导致编译错误2. 内核配置与交叉编译IMX6ULL开发板需要先编译外部内核源码这是许多开发者容易忽略的关键步骤。正点原子提供的Linux内核源码需要提前编译cd ~/linux-imx # 假设内核源码在此目录 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- imx6ull_alientek_emmc_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- zImage dtbs -j$(nproc)完成内核编译后需要将配置文件复制到OpenWrt目录cp ~/linux-imx/arch/arm/configs/imx6ull_alientek_emmc_defconfig \ openwrt-19.07.2/target/linux/imx6/config-4.1在OpenWrt配置界面中需要特别注意以下选项Target System:Freescale i.MX 6Subtarget:GenericTarget Profile:DefaultToolchain:glibcKernel modules: 确保包含kmod-usb-ohci、kmod-usb2等基础驱动3. 文件系统定制与编译优化OpenWrt的强大之处在于其模块化设计我们可以通过make menuconfig精确控制需要包含的软件包。对于IMX6ULL这类资源有限的设备合理的包选择至关重要。网络相关配置建议包含kmod-mii、kmod-usb-net基础网络驱动kmod-rtc-imxdi硬件时钟支持kmod-gpio-button-hotplugGPIO按键支持编译时可以使用以下命令加速过程make -j$(nproc) Vs 21 | tee build.log常见编译问题及解决方案问题现象可能原因解决方法找不到config-4.1内核配置文件未正确放置检查target/linux/imx6/目录浮点运算错误未启用VFP支持确认Makefile中CPU特性设置模块加载失败内核版本不匹配确保内外核版本一致4. 固件打包与烧录实战编译完成后关键文件位于以下路径内核镜像build_dir/target-arm_cortex-a7vfpv3-d16_glibc_eabi/linux-imx6/zImage设备树build_dir/target-arm_cortex-a7vfpv3-d16_glibc_eabi/linux-imx6/linux-4.1/arch/arm/boot/dts/imx6ul-alientek-emmc.dtb根文件系统bin/targets/imx6/generic-glibc/openwrt-imx6-default-rootfs.tar.gz使用正点原子提供的烧录工具时需要注意替换files/zImage为编译生成的zImage替换files/imx6ull-14x14-emmc-4.3-800x480-c.dtb为适配的设备树文件将根文件系统重新打包为rootfs.tar.bz2格式tar -xjf openwrt-imx6-default-rootfs.tar.gz sudo tar -cjf rootfs.tar.bz2 ./*烧录命令示例sudo ./imx6mksdboot.sh -device /dev/sdb -flash emmc -ddrsize 5125. 网络配置与Luci界面部署系统首次启动后网络接口可能不会自动激活。通过串口登录系统后用户名root无密码需要手动配置网络ifconfig eth1 up ifconfig eth1 192.168.10.24 netmask 255.255.255.0如果发现Luci界面缺失需要重新编译包含Luci的固件在make menuconfig中选择LuCI → Collections → luciLuCI → Modules → Translations → luci-i18n-base-zh-cn中文支持重新编译并烧录最终通过浏览器访问http://192.168.10.24即可进入管理界面默认凭证为用户名root密码admin在实际项目中我发现IMX6ULL的ENET2接口eth0默认被配置为WAN口这是导致许多开发者网络连接失败的主要原因。简单的解决方案是使用ENET1接口eth1或者修改网络配置文件/etc/config/network。