一、简介
这是一款基于firehose和sahara传输协议开发的EDL烧写工具。
- Linux平台命令行工具,不用再去Windows上烧写啦!
- 支持双UFS:UFS0和UFS1。
- 支持sparse格式的镜像,不用切片啦!
- 支持回读镜像文件。
- 支持自动搜索设备,无需指定串口。
二、工具获取安装
2.1 下载edl
参见 EDL工具版本管理
2.2 添加执行权限
将edl放到/usr/sbin下,并添加执行权限。
sudo chmod +x /usr/sbin/edl2.3 关闭 modemmanager
请关闭或卸载 modemmanager 服务。
sudo apt remove modemmanager2.4 加入 dialout 组
将您的用户名添加至dialout组,然后重启系统。之后就不用每次输入sudo执行edl了。
sudo adduser $USER dialout三、工具的使用
如果您只是烧录,请直接跳到 4.2。
3.1 参数介绍
为了方便大家使用,给大家提供了简洁的命令。您可以使用help命令打印参数说明。为了避免每次都输入参数,可省略的参数具有默认值,您也可以使用命令,强制指定。
edl helpOptions:
-p|--port=<path> - 可省略,指定串口设备,没有指定会自动搜索
--slot=<numb> - 可省略,指定ufs,默认ufs0(--slot=0),若文件中和命令行同时指定了参数,命令行优先
-s|--search=<path> - 可省略,查找文件的路径,默认当前路径
-f|--firehose=<path> - 可省略,指定firehose镜像文件,默认prog_firehose_ddr.elf
-t|--storage=<name> - 可省略,指定存储名称,默认UFS
--start_sector=<numb> - 起始扇区
--num_sectors=<numb> - 扇区数量
--sector_size=<numb> - 扇区大小
--lun=<numb> - 物理分区
--set_active=<numb> - 设置启动分区,1 A,2 B
--verify - 需要回读校验
Commands:
provision <file> - 对UFS做provision
flash_xml <file> - 根据指定的xml文件,写UFS。
flash <img> - 烧写指定的镜像。
dump_xml <file> - 根据xml的配置,dump出UFS/emmc的内容。
dump <img> - dump出指定的位置的镜像。
erase <lun> - 擦除指定LU
-v|version - 打印当前版本信息
-h|help - 显示帮助信息3.2 执行过程说明
执行的时候,若没有指定串口设备,软件会自动搜索9008设备,然后匹配设备路径。所以当您连接了多个串口设备时,不用您自己去区分哪一个串口是烧录串口。但当电脑同时连接了多台进入了EDL的设备时,还是需要手动指定,如果没有指定则是默认搜索到的第一台。
设备进入EDL后处于Sahara模式,由Sahara模式转为firehose模式需要下载firehose固件到设备。现在不需要手动下载firehose固件到设备上,因为每条命令执行之前,都判断当前设备所在模式,当处于Sahara模式时,会自动下载Firehose固件文件到设备。firehose固件文件会在 --search= 指定的目录下搜索,若没有指定则在当前路径下搜索。
四、示例
4.1 配置UFS
edl --slot=0 provision provision_micron_3.1.xml执行结束:
17:05:43: INFO: _ (done)
17:05:43: INFO: | |
17:05:43: INFO: __| | ___ _ __ ___
17:05:43: INFO: / _` |/ _ \| '_ \ / _ \
17:05:43: INFO: | (_| | (_) | | | | __/
17:05:43: INFO: \__,_|\___/|_| |_|\___|
17:05:43: INFO: {All Finished Successfully}执行前,自动搜索连接设备的串口 → 判断当前的模式 → EDL工具会对xml文件做一个完整性判断。
您可以使用 --slot=1 指定操作第二块UFS,若您没有在firehose、xml文件所在的目录执行,需要使用 --search= 指定路径。
设备进行provision结束后需要重启,然后再进行镜像烧录等。
4.2 烧写镜像
按住金手指按钮重新给设备上电就可进入edl刷机模式。然后进行后续的操作。
4.2.1 烧写xml文件指定的镜像
您可以一次性指定多个rawprogram和patch文件,EDL工具会依次执行。
edl --slot=0 flash_xml rawprogram_all.xml,patch_all.xml4.2.2 烧写命令行指定镜像
edl --slot=0 flash --start_sector=24 --lun=0 system_la.img4.3 回读镜像
回读镜像会放在当前路径下的 fh_out 文件夹下。
4.3.1 根据xml文件回读镜像
edl --slot=0 dump_xml read.xml根据read.xml文件的配置,回读镜像。
<?xml version="1.0" ?>
<data>
<read SECTOR_SIZE_IN_BYTES="4096" filename="gpt_main0.bin" num_partition_sectors="6" physical_partition_number="0" start_sector="0"/>
</data>4.3.2 分段回读镜像
大镜像持续回读有1/10的概率会超时出错,建议您分段读取,然后使用cat命令进行拼接。
edl --slot=0 dump_xml read_part.xmlphysical_partition_number 是lun,start_sector 是起始位置,num_partition_sectors 是读取sectors数量。
<?xml version="1.0" ?>
<data>
<read SECTOR_SIZE_IN_BYTES="4096" filename="gpt_main0.bin.0" num_partition_sectors="2" physical_partition_number="0" start_sector="0"/>
<read SECTOR_SIZE_IN_BYTES="4096" filename="gpt_main0.bin.1" num_partition_sectors="4" physical_partition_number="0" start_sector="2"/>
</data>拼接:
cat gpt_main0.bin.0 gpt_main0.bin.1 > gpt_main0.bin4.2.3 回读命令行指定镜像
slot是指镜像所在UFS,LUN是镜像所在LU。
以dump UFS0 LUN0分区表为例:
edl --slot=0 dump --lun=0 --start_sector=0 --num_sectors=6 gpt_main0.bin4.4 擦除指定LUN
Erase后边数字0-7,分别代表LUN0-LUN7。
edl --slot=0 erase 14.5 重启(V1.1支持)
直接重启:
edl --reset执行完烧录指令后重启:
edl --slot=0 flash_xml --reset rawprogram_all.xml,patch_all.xml五、有用小贴士
5.1 没有金手指进入EDL的方法
方法一:DCD的B样可以通过Type-C进入QNX的串口控制台,在串口控制台上输入命令 reset -f,控制机器进入 fastboot 模式,然后擦除所有 xbl 再重启就自动进入EDL模式了。
fastboot erase xbl_a
fastboot erase xbl_b
fastboot erase xbl_bkup_a
fastboot erase xbl_bkup_b
fastboot reboot方法二:通过串口或在android中执行 busybox telnet 192.168.8.1 进入QNX,使用dd命令覆盖xbl分区,重启就可以进入EDL模式。
dd if=/dev/zero of=/dev/disk/xbl_a
dd if=/dev/zero of=/dev/disk/xbl_b
dd if=/dev/zero of=/dev/disk/xbl_bkup_a
dd if=/dev/zero of=/dev/disk/xbl_bkup_b
reset方法三:在QNX串口执行 reset -e(2023.2.27以后SOC的版本支持)
reset -e