上图中的命令“.inuuu.exe .filesled.imx”将会执行内嵌的脚本,类似如下命令:
- .inuuu.exe SDP: boot -f ".filesled.imx"
复制代码
SDP是协议,uuu通过SDP协议跟板子上的bootROM通信;
boot是命令,表示要启动,后面的“-f”表示要启动哪个文件。
你还可以把它写入一个脚本文件,比如led.clst (后缀含义clst:commandlist):
uuu_version 1.2.39
SDP: boot -f ".filesled.imx"
SDP: done
clst文件中第1行必须写uuu_version,表明它适用的最低版本号。
然后在命令行中执行如下命令,也可以达到同样的效果:
.inuuu.exe led.clst
3.2 烧写led.imx到EMMC
uuu本身没有烧写功能,所以需要借助特制的程序:支持Fastboot协议的uboot。
在GITHUB中我们也提供了该uboot。
开发板设置为USB模式启动,并打开命令行后,可以如下操作把led.imx烧写到EMMC:
.inuuu.exe -b emmc .firmwareu-boot-dtb_fastboot_100ask.imx .filesled.imx
命令解析:
a. “-b emmc”:burnemmc,烧写EMMC
b. 需要借助特制的程序:.firmwareu-boot-dtb_fastboot_100ask.imx
c. 烧写谁?.filesled.imx
这个命令其实会使用内嵌的脚本来烧写,可以执行“.inuuu.exe -bshow emmc”查看脚本,结果如下:
uuu_version 1.2.39
# @_flash.bin | bootloader
# @_image [_flash.bin] | image burn to emmc, default is the same as bootloader
# This command will be run when i.MX6/7i.MX8MM, i.MX8MQ
SDP: boot -f _flash.bin
# This command will be run when ROM support streammode
# i.MX8QXP, i.MX8QM
SDPS: boot -f _flash.bin
# These commands will be run when use SPL andwill be skipped if no spl
# SDPU will be deprecated. please use SDPVinstead of SDPU
# {
SDPU: delay 1000
SDPU: write -f _flash.bin -offset 0x57c00
SDPU: jump
# }
# These commands will be run when use SPL andwill be skipped if no spl
# if (SPL support SDPV)
# {
SDPV: delay 1000
SDPV: write -f _flash.bin -skipspl
SDPV: jump
# }
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
FB: flash bootloader _image
FB: ucmd if env exists emmc_ack; then ; elsesetenv emmc_ack 0; fi;
FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 10
FB: Done
这个脚本支持IMX6、IMX7、IMX8MM、IMX8Q,我们只关心IMX6ULL的话,脚本可以精简为burn_led.clst,内容如下:
uuu_version 1.2.39
SDP: boot -f .firmwareu-boot-dtb_fastboot_100ask.imx
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
FB: flash bootloader .filesled.imx
FB: ucmd if env exists emmc_ack; then ; else setenvemmc_ack 0; fi;
FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 10
FB: Done
可以看到除了使用SDP协议启动特制的Uboot之外,就是使用FB协议跟这个Uboot通信了。这些FB命令举个例子来讲解:
从这些脚本可知,
uuu更多的时候是通过FB协议向Uboot下载文件、发送命令;核心都是Uboot,苦活累活是Uboot做的。
4. 特制的Uboot
修改说明有时间再补,主要参考uuu.pdf,还有根据uuu内嵌的脚本添加环境变量。
在GITHU中已经有改好的源码,编译方法如下(你的工具链的PATH可能跟我们的不同,请自行修改):
export ARCH=armexport CROSS_COMPILE=arm-linux-gnueabihf-exportPATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bincd uboot-imx_fastbootcp config_ok .configmakecp u-boot-dtb.imx u-boot-dtb_fastboot_100ask.imx
所得到的u-boot-dtb_fastboot_100ask.imx文件就是特制的Uboot,我们的烧写工具中已经在firmware目录里放置了该文件。
5. EXT4文件系统制作注意事项
我们的GUI功能强大,可以把PC上的任意文件发给Uboot,再借助它的ext4write命令烧写到板子上的任意目录中。
但是Uboot对EXT4的支持并没有跟得上Linux,比如它不支持新特性:metadata_csum。所以在PC上制作EXT4映像文件时,要去除这个特性。
5.1 使用Buildroot制作映像文件时
在Buildroot源码目录下执行make menuconfig,如下图添加选项即可:
5.2 使用mkfs.ext4制作映像文件时
我们有时候使用mkfs.ext4来制作EXT4映像,有些Linux系统的mkfs.ext4版本比较低,它本来就不支持metadata_csum特性,所以不需要加上特别的选项。经测试:1.43及以下版本的mkfs.ext4不需要做特别设置。
对于高于1.43的mkfs.ext4,制作映像文件时要加上参数“-O ^metadata_csum”,它是禁止metadata_csum的意思,比如:
dd if=/dev/zero of=rootfs.ext4 bs=1024 count=409600mkfs.ext4 -O ^metadata_csum rootfs.ext4sudo mount-t ext4 rootfs.ext4 /mntsudo tarxjf rootfs.tar.bz2 -C /mntsudo umount tmp
6. 100ASK_IMX6ULL_Flashing_tool使用说明
100ASK_IMX6ULL_Flashing_tool是uuu工具的GUI前端,操作更便利。从GITHUB下载工具后,在“100ask_imx6ull烧写工具”目录下双击运行“100ask_imx6ull_flashing_tool.exe”。
它有“基础版”、“专业版”两个页面。
“基础版”是专为100ASK_IMX6ULL设计的,点击一下即可完成某项烧写。
“专业版”功能更强大,特别是它可以上传文件到某个分区、某个目录。有些厂家的开发板,zImage和设备树是在第1个分区里的,而100ASK_IMX6ULL的zImage和设备树是在第2个分区里,所以这些厂家的开发板就无法使用基础版来烧写,需要使用专业版,指定分区、指定分区格式、指定路径,然后再上传文件。
注意:开发板必须设置为USB模式,如果要用SD/TF卡,必须先上电再插卡;
不能先插卡再上电,不能先插卡再上电,不能先插卡再上电!
6.1 基础版:专用于100ASK_IMX6ULL
接线、设置USB启动的方式如下:
注意:USB串口线可接可不接,接上只是为了观察烧写过程。
注意:设置为USB启动时,先不要接TF卡
板子复位或重新上电后,在APP里操作即可,一个图就可以列清楚所有步骤:
各按钮作用如下:
a. 烧写整个系统:把emmc.img烧到EMMC上,或是把sdcard.img烧到SD/TF卡上;
b. 更新内核:把zImage上传到根文件系统的/boot目录
c. 更新设备树:把100ask_imx6ull-14x14.dtb上传到根文件系统的/boot目录
d. 更新Uboot:把u-boot-dtb.imx烧写到EMMC或SD/TF卡;
e. 烧写裸机:把所选裸机文件,烧写到EMMC或SD/TF卡;
f. 上传文件:把所选用户文件,上传到根文件系统的/目录
6.2 专业版:更强大、更灵活、适合所有imx6ull开发板
专业版的强大在于烧写文件时可以选择任意文件,上传文件时可以指定分区、分区格式、目标路径。用法也很简单,一图足以说明:
有些开发板厂家把内核zImage、设备树放在第1个分区里,它通常是FAT分区。那么可以使用专业版来更新内核、更新设备树。
比如:
几乎所有的开发板的第2个分区都是EXT4格式,我们可以上传文件到它的任意目录下,比如:
7. 100ASK_IMX6ULL_Flashing_tool设计说明
7.1 基础版
7.1.1 判断设备是否连接:应该全程监测
执行命令:
结果中有"SDP" 或 "FB"
7.1.2 判断设备的固件是否已经在运行
执行命令:
结果中有"FB"
7.1.3 烧写整个系统
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
执行脚本
- ./bin/uuu scripts/basic//write_all.clst
复制代码
7.1.4 更新内核
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
执行脚本
- ./bin/uuu scripts/basic//write_kernel.clst
复制代码
7.1.5 更新设备树
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
执行脚本
- ./bin/uuu scripts/basic//write_dtb.clst
复制代码
7.1.6 更新Uboot
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
执行脚本
- ./bin/uuu scripts/basic//write_boot.clst
复制代码
7.1.7 烧写裸机
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
a. 根据用户选择,修改脚本,把要烧写的文件名替换进脚本里:
- scripts/basic//write_noos.clst
复制代码
b. 执行脚本
- ./bin/uuu scripts/basic//write_noos.clst
复制代码
7.1.8 上传用户文件到根目录
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
上传方法:
a. 先下载文件:
- ./bin/uuu FB: download -f
复制代码
b. 然后设置环境变量:
- ./bin/uuu FB: ucmd setenv TARGET_FILE <路径> // 根据用户选择设置目标路径
复制代码
c. 最后执行脚本
- ./bin/uuu scripts/pro//write_user_file.clst
复制代码
7.2 专业版
7.2.1 判断设备是否连接:应该全程监测
执行命令:
结果中有"SDP" 或 "FB"
7.2.2 判断设备的固件是否已经在运行
执行命令:
结果中有"FB"
7.2.3 运行固件/裸机
执行命令 :
file: 默认是 firmware/u-boot-dtb_fastboot_100ask.imx;用户可选择。
7.2.4 烧写boot/裸机
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
a. 根据用户选择修改脚本
- scripts/pro//write_boot.clst
复制代码
b. 执行脚本:
- ./bin/uuu scripts/pro//write_boot.clst
复制代码
7.2.5 烧写整个系统
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
烧写方法:
a. 根据用户选择修改脚本
- scripts/pro//write_all.clst
复制代码
b. 执行脚本:
- ./bin/uuu scripts/pro//write_all.clst
复制代码
7.2.6 上传任意文件
如果设备的固件未运行: 帮用户运行固件,然后再烧写。
如果设备的固件已经运行: 则可以直接烧写。
上传方法:
a. 先下载:
- ./bin/uuu FB: download -f
复制代码
b. 然后设置环境变量:
./bin/uuu FB: ucmd setenv SEL_DEV ./bin/uuu FB: ucmd setenv PART <1|2|...> // 根据用户选择设置分区./bin/uuu FB: ucmd setenv FSTYPE // 根据用户选择设置分区格式
c. 最后执行脚本
- ./bin/uuu scripts/pro//write_user_file.clst
复制代码
8. GUI的其他版本
我们的学员很厉害,我们刚发布第1版时,功能很简单,不能选择文件。是学员做出了QT版本的GUI,可以选择文件。
受此启发,我们才做出了专业版。
这位学员说,他正在Ubuntu下调试GUI,搞定后也会公开源码。
敬请期待。
-END-
联系我们
如果您对100ask_imx6ull开发板感兴趣或者对该烧写工具感兴趣,都可以加入韦东山微信群。进行技术讨论。
加群方式:
添加管理员微信13163769879(买过产品加"售后群",没买过加"粉丝群")
`