IMX6开发板从0配置:U-Boot下IP/MAC/bootargs设置+内核启动全流程
一、前期准备
1.1 工具与环境
| 工具/环境 | 版本/配置要求 | 核心功能 |
|---|---|---|
| IMX6开发板 | 支持U-Boot(如官方移植版) | 硬件载体,运行U-Boot和内核 |
| Ubuntu主机 | 任意支持TFTP/NFS的版本(本文以18.04为例) | 搭建TFTP服务器(提供内核/设备树)、NFS根文件系统 |
| 串口工具 | SecureCRT/Xshell/Minicom | 连接开发板U-Boot,执行命令 |
| TFTP服务器 | tftpd-hpa(Ubuntu软件包) | 快速下载zImage和imx6.dtb到开发板内存 |
| NFS服务 | nfs-kernel-server(Ubuntu软件包) | 提供根文件系统,内核启动后挂载使用 |
1.2 前置配置(Ubuntu端)
- TFTP服务器配置:安装后指定共享目录(如
/home/linux/tftp),将zImage内核和imx6.dtb设备树放入该目录; - NFS配置:在
/etc/exports中添加配置(如/home/linux/nfs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)),重启NFS服务; - 网络确保:开发板、Ubuntu主机连入同一局域网(如路由器),记录Ubuntu主机IP(如
192.168.1.3)。
二、步骤1:U-Boot下配置IP与MAC地址
U-Boot的网络功能依赖IP/MAC等环境变量,必须先配置才能通过TFTP下载文件。
2.1 核心环境变量说明
| 环境变量 | 作用 |
|---|---|
| ipaddr | 开发板U-Boot阶段的IP地址(需与Ubuntu同网段,如192.168.1.100) |
| serverip | TFTP服务器IP地址(即Ubuntu主机IP,如192.168.1.3) |
| ethaddr | 开发板网卡MAC地址(自定义,如00:11:22:33:44:55,避免与其他设备冲突) |
2.2 配置命令实操
- 开发板上电,通过串口工具进入U-Boot命令行(开机时按任意键打断自动启动);
- 执行以下命令配置网络参数:
# 设置开发板IPsetenv ipaddr192.168.1.100# 设置TFTP服务器IP(Ubuntu主机IP)setenv serverip192.168.1.3# 设置MAC地址(可选,若开发板无默认MAC需配置)setenv ethaddr 00:11:22:33:44:55# 保存环境变量(写入开发板MMC,避免重启丢失)saveenv - 验证网络连通性:
# ping Ubuntu主机,成功会显示“host 192.168.1.3 is alive”ping192.168.1.3
2.3 原理补充
- U-Boot的环境变量本质是存储在Flash/MMC中的字符串,
setenv修改内存中的变量,saveenv将其写入持久化存储; - MAC地址是网卡的唯一标识,若不配置可能导致网络冲突,无法正常使用TFTP/NFS。
三、步骤2:设置bootargs启动参数
bootargs是U-Boot传递给Linux内核的启动参数,内核会根据这些参数初始化系统(如指定控制台、根文件系统)。
3.1 bootargs参数拆解(以NFS根文件系统为例)
完整参数示例(对应笔记中的配置):
setenv bootargsconsole=ttymxc0,115200root=/dev/nfsnfsroot=192.168.1.3:/home/linux/nfs/imx6/rootfs,nfsvers=3ip=192.168.1.100init=/linuxrc各参数含义:
| 参数 | 作用 |
|---|---|
| console=ttymxc0,115200 | 指定Linux控制台为串口ttymxc0(IMX6默认串口),波特率115200 |
| root=/dev/nfs | 声明根文件系统类型为NFS(网络文件系统) |
| nfsroot=… | 指定NFS根文件系统路径:UbuntuIP:共享目录,nfsvers=3指定NFS协议版本3 |
| ip=192.168.1.100 | 指定Linux内核启动后的IP地址(与U-Boot的ipaddr一致即可) |
| init=/linuxrc | 指定Linux的1号进程(初始化进程)为/linuxrc(根文件系统中的初始化脚本) |
3.2 配置命令实操
# 设置bootargs参数(一行完整输入,注意路径替换为自己的NFS目录)setenv bootargsconsole=ttymxc0,115200root=/dev/nfsnfsroot=192.168.1.3:/home/linux/nfs/imx6/rootfs,nfsvers=3ip=192.168.1.100init=/linuxrc# 保存参数saveenv# 验证参数是否设置成功(会显示当前bootargs的值)printenvbootargs四、步骤3:TFTP下载zImage与imx6.dtb
Linux内核(zImage)和设备树(imx6.dtb)需下载到开发板内存中才能运行,TFTP是U-Boot下最常用的下载方式。
4.1 核心说明
- zImage:压缩后的Linux内核镜像,需下载到指定内存地址(IMX6推荐
0x80800000); - imx6.dtb:设备树文件,描述开发板硬件资源(如GPIO、UART、SPI),下载地址推荐
0x83000000; - 内存地址需避开内核运行的关键区域,上述地址是IMX6的通用推荐值,可参考芯片手册调整。
4.2 下载命令实操
# 下载zImage到内存0x80800000地址tftp 0x80800000 zImage# 下载imx6.dtb到内存0x83000000地址tftp 0x83000000 imx6.dtb- 下载成功会显示“Bytes transferred = xxx (xxx hex)”,表示文件已成功写入内存;
- 若下载失败,检查TFTP服务是否启动、文件是否在共享目录、IP地址是否正确。
五、步骤4:用bootz启动Linux内核
bootz是U-Boot中用于启动压缩内核(zImage)的命令,需指定内核地址、initrd地址(无则用“-”)、设备树地址。
5.1 启动命令实操
# bootz 内核地址 - 设备树地址(initrd未使用,用“-”占位)bootz 0x80800000 - 0x830000005.2 启动成功验证
- 执行命令后,串口会输出内核启动日志(如驱动初始化、文件系统挂载信息);
- 最终会进入Linux命令行(如
/ #),表示系统启动成功; - 验证NFS挂载:执行
df -h,会显示192.168.1.3:/home/linux/nfs/imx6/rootfs已挂载到/目录。
六、常见问题排查
6.1 ping不通TFTP服务器
- 检查开发板与Ubuntu是否同网段,无IP冲突;
- 关闭Ubuntu防火墙(
sudo ufw disable); - 确认ethaddr已配置,且未与其他设备重复。
6.2 TFTP下载文件失败
- 检查TFTP共享目录是否正确,文件(zImage/imx6.dtb)是否存在;
- 确认TFTP服务已启动(
sudo systemctl start tftpd-hpa); - 检查内存地址是否正确,避免超出开发板内存范围。
6.3 内核启动后无法进入命令行
- 检查bootargs中的
nfsroot路径是否正确,NFS服务是否正常; - 确认
init=/linuxrc是否存在于根文件系统中; - 检查串口参数(波特率115200)是否与bootargs中的
console配置一致。
七、总结
本文从前期环境搭建到最终内核启动,完整覆盖了IMX6开发板U-Boot阶段的核心配置流程:
- 网络配置(IP/MAC)是基础,确保TFTP/NFS通信正常;
- bootargs参数是关键,直接决定内核的初始化方式和根文件系统挂载;
- TFTP下载内核/设备树是高效手段,内存地址需遵循芯片推荐;
- bootz命令是启动压缩内核的核心,参数顺序不可混淆。