一、移植基础认知
1. 三大核心镜像文件
| 文件 | 作用 | 说明 |
|---|---|---|
u-boot.imx |
引导加载程序 | 上电初始化硬件,加载内核 |
zImage + imx6ull-alientek-emmc.dtb |
Linux内核+设备树 | zImage是内核主体;dtb记录板载硬件资源,Linux3.x后独立拆分 |
rootfs.tar.bz2 |
根文件系统 | 存放命令、库、应用,提供人机交互环境 |
2. 所需硬件
I.MX6ULL MIN开发板、12V电源适配器、Type-C OTG线、网线、USB转串口、SD卡+读卡器、电脑(Windows+Ubuntu虚拟机)
二、前置:Ubuntu虚拟机全套环境搭建
2.1 虚拟机双网卡配置(上网+开发板互通)
目的:一块网卡NAT模式访问外网下载工具,一块桥接网卡和开发板传输文件(TFTP/NFS)
- 完全关闭虚拟机,打开VMware顶部「虚拟机」→「设置」
- 点击「添加」→「网络适配器」,新增第二块网卡
- 网卡1设置为NAT模式 ,网卡2设置桥接模式
- 顶部菜单「编辑」→「虚拟网络编辑器」
- 选中桥接网卡VMnet0,外部连接选择电脑有线网卡
- NAT网段固定为
192.168.78.0,点击确定保存,启动虚拟机
2.2 Ubuntu静态IP与路由配置
- 终端输入
ifconfig查看网卡名(示例:ens33=NAT,ens36=桥接) - 编辑网络配置文件
bash
sudo vim /etc/network/interfaces
写入配置:
auto ens33
iface ens33 inet dhcp
auto ens36
iface ens36 inet static
address 192.168.1.100
netmask 255.255.0
gateway 192.168.1.1
- 重启系统生效
bash
sudo reboot
- 修复默认路由(解决能连开发板但无法上网)
bash
sudo route delete default
sudo route add default gw 192.168.78.2 ens33
- 设置开机自动修复路由
bash
sudo vim /etc/systemd/system/custom-route.service
写入内容:
[Unit]
Description=Custom Route Configuration
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/route delete default
ExecStart=/sbin/route add default gw 192.168.78.2 ens33
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
执行生效命令:
bash
sudo systemctl daemon-reload
sudo systemctl enable custom-route.service
sudo systemctl start custom-route.service
- 连通测试
bash
# 测试外网
ping www.baidu.com
# 后续开发板IP设192.168.50,测试板卡互通
ping 192.168.1.50
2.3 安装开发必备工具
1. minicom(串口打印工具,查看开发板日志)
bash
sudo apt-get install minicom
# 配置串口参数
sudo minicom -s
配置项:
- Serial Device:
/dev/ttyUSB0 - 波特率:115200 8N1
- 软硬件流控:全部关闭
保存为默认配置,启动命令:sudo minicom
退出快捷键:Ctrl+A再按Q
2. TFTP服务器(网络下载内核到开发板)
bash
sudo apt install tftpd-hpa tftp
# 创建共享目录并开放权限
mkdir /home/linux/tftpboot
chmod 0777 /home/linux/tftpboot
# 修改服务配置
sudo vim /etc/default/tftpd-hpa
修改配置:
TFTP_DIRECTORY="/home/linux/tftpboot"
TFTP_OPTIONS="--secure -l -c"
重启服务:
bash
sudo service tftpd-hpa restart
3. NFS服务器(开发板远程挂载文件系统)
bash
sudo apt install nfs-kernel-server
# 创建共享目录
mkdir -p /home/linux/nfs/rootfs
chmod 0777 /home/linux/nfs /home/linux/nfs/rootfs
# 配置共享权限
sudo vim /etc/exports
添加一行:
/home/linux/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash)
重启并查看共享目录:
bash
sudo service nfs-kernel-server restart
showmount -e
4. ARM交叉编译器(编译ARM架构代码)
- 将
gcc-linaro-4.9.4-2017.01-x86_64_armlinux-gnueabihf.tar.xz拷贝到/home/linux/tools/opt - 解压文件
bash
tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_armlinux-gnueabihf.tar.xz
- 写入环境变量
bash
sudo vim ~/.bashrc
# 文件末尾添加
export PATH=$PATH:/home/linux/tools/opt/gcc-linaro-4.9.4-2017.01-x86_64_armlinux-gnueabihf/bin
# 生效配置
source ~/.bashrc
# 验证安装
arm-linux-gnueabihf-gcc -v
5. 内核编译全套依赖
bash
sudo apt-get install libncurses5-dev bison flex lzop bear ctags cscope
三、模式一:烧录系统到SD卡
方式A:Windows Mfgtool工具烧录
步骤1:工具解压准备
- 找到资料路径
\驱动资料包\工具\mfgtool.zip - 必须使用7Z/WinRAR解压,路径全程不能带中文
- 解压目录结构:
boot:存放u-boot.imx、zImage、dtb设备树filesystem:存放rootfs.tar.bz2
步骤2:硬件接线(严格顺序)
- 开发板插上12V电源
- Type-C OTG线连接开发板USB_OTG与电脑USB
- 拨码开关切换为USB启动(01000000)
- 暂时拔出SD卡,避免识别冲突
- 关闭所有VMware虚拟机,防止OTG端口被虚拟机抢占
步骤3:软件烧录操作
-
进入mfgtool文件夹,双击脚本
Mfgtool2-eMMC-ddr512-SDCard.vbs -
窗口初始显示
No Device Connected,给开发板上电
-
状态栏出现「符合HID标准的供应商定义设备」=识别成功

-
插入SD卡到开发TF卡槽
-
点击窗口
Start按钮,等待约5分钟
-
进度条全绿、显示
Done代表烧写完成 -
依次点击
Stop→Exit关闭工具
步骤4:启动开发板
- 开发板断电
- 拨码开关切换为SD卡启动
- 重新上电,屏幕出现图形桌面即成功
方式B:Ubuntu脚本烧录SD卡
- SD卡插入读卡器接入Ubuntu
- 查看磁盘设备名:
sudo fdisk -l(一般为/dev/sdb) - 将mfgtool内
files文件夹拷贝到Ubuntu - 修复脚本bug:打开
imx6mksdboot.sh,把${PARITION2}改为${PARTITION2} - 执行烧录脚本
bash
sudo ./imx6mksdboot.sh -device /dev/sdb -flash emmc -ddrsize 512
- 打印「烧写成功」后拔出SD卡,插开发板SD卡槽,拨SD启动上电
补充:SD卡分区布局
- 0~1MB:存放U-Boot镜像
- 1MB~64MB:FAT32分区,存放zImage、dtb,挂载
/boot - 64MB至卡末端:EXT3分区,完整根文件系统rootfs
四、模式二:烧录系统到板载eMMC(产品量产专用)
方式1:Windows Mfgtool烧写eMMC
- 解压mfgtool,文件目录和SD烧录一致
- 硬件:电源+OTG线,拨码USB启动,全程不插SD卡
- 双击脚本
Mfgtool2-eMMC-ddr512-eMMC.vbs - 关闭虚拟机,上电识别设备后点击
Start - 等待5分钟烧录完成,关闭工具
- 断电,拨码切换EMMC启动,上电运行系统
方式2:Ubuntu远程烧写eMMC
- 先用模式一把系统烧进SD卡,SD启动开发板
- 网线连接Ubuntu与开发板,打开minicom串口
- 开发板测试网络连通
bash
ping 192.168.1.100
- 开发板挂载Ubuntu NFS共享目录
bash
mount -o nolock,rw,nfsvers=3 192.168.1.100:/home/linux/nfs/rootfs /mnt
- Ubuntu将mfgtool下
files文件夹拷贝到/home/linux/nfs/rootfs - 串口进入开发板
/mnt/files,给脚本添加执行权限 - 执行eMMC烧写脚本,回车确认等待完成
- 断电切换EMMC拨码,重启开发板
五、模式三:网络启动(驱动开发首选无需反复烧卡)
核心原理
SD卡仅存放U-Boot;内核/设备树从TFTP下载;根文件系统通过NFS远程挂载。修改内核后无需重新烧卡,直接重启生效。
完整分步操作
步骤1:SD卡烧写U-Boot
执行【模式一】SD卡烧录步骤,仅需要uboot即可。
步骤2:准备TFTP、NFS文件
zImage、imx6ull-alientek-emmc.dtb复制到/home/linux/tftpbootrootfs.tar.bz2解压到/home/linux/nfs/rootfs
步骤3:串口进入U-Boot配置环境
-
SD启动开发板,minicom串口等待倒计时,按任意键进入uboot命令行
-
恢复默认环境变量
env default -a
saveenv -
配置网络IP参数
setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv netmask 255.255.255.0
setenv serverip 192.168.1.100
setenv gatewayip 192.168.1.1
saveenv测试网络连通
ping 192.168.1.100
-
配置自动下载内核命令
bootcmdsetenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'
saveenv -
配置NFS根文件启动参数
bootargssetenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.100:/home/linux/nfs,proto=tcp,nfsvers=3 rw ip=192.168.1.50:192.168.1.100:192.168.1.1:255.255.0::eth0:off'
saveenv
步骤4:启动Linux
uboot命令行输入boot,自动下载内核并挂载NFS文件系统,启动系统。
六、进阶:自行编译U-Boot / Linux内核
6.1 编译U-Boot
- 解压uboot源码压缩包
- 安装依赖
bash
sudo apt-get install libncurses5-dev
- 完整编译命令
bash
# 清空旧编译文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
# 加载开发板默认配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
# 多线程编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
- 产物:源码顶层
u-boot.imx,可替换烧录文件
6.2 编译Linux 4.1.15内核
- 解压内核包
linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.gz - 进入源码目录执行编译
bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
# 图形界面裁剪内核功能
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
# 完整编译
bear make ARCH=arm-linux-gnueabihf- all -j16
- 编译输出文件
- 内核镜像:
arch/arm/boot/zImage - 设备树:
arch/arm/boot/dts/imx6ull-alientek-emmc.dtb
- 将两个文件复制到
tftpboot目录,网络启动测试新内核
七、开发板拨码三种启动模式说明
| 启动模式 | 使用场景 |
|---|---|
| USB启动 | 仅烧录系统时使用,正常运行不用 |
| SD卡启动 | 调试开发,频繁更换镜像,新手首选 |
| EMMC启动 | 产品量产,系统固化板载闪存,断电数据不丢失 |