项目场景:
NXP i.MX6系列产品提供PC端mfgtools工具,用USB OTG进行固件烧写,往往现场更新或批量生产时,USB烧写不便。眺望电子提供TF启动烧写方案。在眺望电子TW-IMX6DL-EVM开发板上进行如下演示,介绍TF卡启动烧录的修改过程。
编译环境及开发包:
主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
QT5.12.8:qt-everywhere-opensource-src-5.12.8
开发板:TW-IMX6DL-EVM
Linux:Linux-4.1.15
串口工具:Xshell
注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6 ARM嵌入式平台,这是一个基于NXP iMX6 ARM处理器,支持单核/双核Cortex-A9的核心板。
解决方案:
1.Uboot修改
根据不同板子配置,6D板子配置如下:
tw@tw:~/ $ make mx6dlsabresd_config
6Q板子配置如下:
tw@tw:~/ $ make mx6qsabresd_config
2.制作TF启动卡
2.1 找到TF卡设备节点
tw@tw:~$ ls /dev/sdb*
2.2 TF卡分区:
分成两个区,一个500M,剩下的分配到第二个区;
tw@tw:~$ sudo umount /dev/sdb
tw@tw:~$ sudo fdisk /dev/sdb
输入p列出当前分区,如图
输入d 删除原来分区
输入n 增加分区,第一个分区分配500M
输入n 增加分区,第二个分区分配剩下的空间
输入t 改变第一个分区格式为W95 FAT32 (LBA)
输入p 查看当前分区
输入w 保存
2.3 格式化分区:
tw@tw:~$ sudo mkfs.vfat /dev/sdb1
tw@tw:~$ sudo mkfs.ext4 -F -E nodiscard /dev/sdb2
2.4 擦除uboot环境变量:
tw@tw:~$ sudo dd if=/dev/zero of=/dev/sdb bs=1k seek=512 conv=fsync count=8
2.5 烧写uboot:
uboot编译时配置成相对应的板子
tw@tw:~$ sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync
tw@tw:~$ sync
2.6 查看分区挂载位置(或者手动挂载)
tw@tw:~$ df
2.7 拷贝 zImage 和 dtb设备树到第一个分区
tw@tw:~/kernel-source$ sudo cp arch/arm/boot/zImage /media/tw/FB0F-3645/
tw@tw:~/kernel-source$ sudo cp arch/arm/boot/dts/imx6q-sabresd.dtb /media/tw/FB0F-3645/
2.8 解压 根文件系统 到第二个分区
tw@tw:~$ sudo tar -jxvf rootfs.tar.bz2 -C /media/tw/d864168c-069c-48c0-a0bf-03e770b55a00/
tw@tw:~$ sync
2.9 设置启动拨码,从TF卡启动
3.烧录脚本编写
下面脚本用于烧写固件到emmc
#!/bin/sh
umount /dev/mmcblk3p1
umount /dev/mmcblk3p2
dd if=/dev/zero of=/dev/mmcblk3 bs=1024 count=1
fdisk /dev/mmcblk3 <<EOF
n
p
+500M
n
p
t
1
c
w
EOF
dd if=/dev/zero of=/dev/mmcblk3 bs=1k seek=512 conv=fsync count=8
echo 0 > /sys/block/mmcblk3boot0/force_ro
dd if=u-boot.imx of=/dev/mmcblk3boot0 bs=512 seek=2 conv=fsync
echo 1 > /sys/block/mmcblk3boot0/force_ro
sync
mkfs.vfat /dev/mmcblk3p1
mkfs.ext4 -F /dev/mmcblk3p2
mkdir -p /mnt/mmcblk3p1
mount -t vfat /dev/mmcblk3p1 /mnt/mmcblk3p1
cp zImage imx6q-sabresd.dtb /mnt/mmcblk3p1
umount /mnt/mmcblk3p1
mkdir -p /mnt/mmcblk3p2
mount -t ext4 /dev/mmcblk3p2 /mnt/mmcblk3p2
tar -jxvf rootfs.tar.bz2 -C /mnt/mmcblk3p2
sync
sync
umount /mnt/mmcblk3p2