Ubuntu下编译最新版本全志开源FEL模式工具sunxi-tools

发布时间 2023-10-31 15:15:05作者: zxddesk

1、sunxi-tools介绍

sunxi-tools是一组用于全志SoC系列芯片的开源命令行工具,全志的SoC一般以sun开头,x为数字,以i结尾。对于sun4i,sun5i,sun6,sun8i,sun9i.等等系列都可以使用这个工具。比如手上的这个板子是H616,它的名字是sun50i-H616。

sunxi-tools是一组工具集,这组工具可以用于对全志SoC进行片上程序的封装、FEX和二进制转换、PIO配置、FEL工厂工程模式等等一系列有用的工具。
比如我们这次要用到的这个工具集中的sunxi-fel工具没,我们需要编译一个最新的版本,就需要用到最新的工具包源码,进行一个最新版本的编译。

但是由于下载的编译好的版本貌似并不支持H616的uboot,因此需要编译新一个sunxi-tools版本。

2、构建说明

Ubuntu 18.04需要先安装以下依赖包

 sudo apt install pkg-config libusb-1.0-0-dev zlib1g-dev binutils libfdt-dev
 

接下来拉取代码

git clone https://github.com/linux-sunxi/sunxi-tools.git
 

编译需要使用到libusb-1.0的头文件和库,将会成为sunxi-fel的依赖。
要配置这个库的依赖,可以考虑显性的配置一个变量LIBUSB_CFLAGS
和LIBUSB_LIBS ,不过还是推荐通过pkg-config的去自动编译这个依赖。

3、编译

cd sunxi-tools
 

开始默认的编译

make
 

 

不过推荐参考以下make参数,去编译目标。

  • make tools 可以构建一些有用的工具,和make作用相同。
  • make target-tools 构建工具可以使用交叉编译链进行编译到目标平台上。可以通过指定变量的方式指定交叉编译链前缀,比如make target-tools CROSS_COMPILE=arm-none-eabi-
  • make all 会同时构建以上两种。
  • make install-tools 构建工具和安装到一个指定的文件系统位置上,这个位置可以通过DESTDIRPREFIXBINDIR指定。
  • make misc 构建主机上各种各样的实用工具。例如phoenix_infosunxi-nand-image-builder.

4、工具

1、FEX格式

FEX是全志芯片特有的一种SoC工作参数文件,包含了对外设接口的一切配置参数,包括GPIO、DRAM、显示屏等等各种参数。记录格式是传统INI格式,包含[节],每个[节]下面包含 键 = 值 格式的配置行。
类似

[product]
version = "1.0"
machine = "A10-EVB-V1.2"
 
  • 1
  • 2
  • 3
2、sunxi工具包

sunxi-fexc是一个用于转换fex和二进制描述的文件的程序,可以双向转换fex和bin描述文件。这个工具编译完成后还有两个快捷链接,bin2fex和fex2bin,功能如同链接文件名称。

3、sunxi-pio

操作各种PIO设置,比如GPIO配置等等。
可以用于对PIO寄存器进行dump操作或者通过直接的mmap进行直接硬件访问。
可能用到的不多。

4、sunxi-tools
5、sunxi-fel

这个程序提供了用于和全志SoC进行通讯和控制的脚本接口,除非指定–dev或者–sid,否则工具会访问第一个全志FEL模式的设备。可以通过sunxi-fel --list --verbose 来查看FEL设备列表。

FEL 是一种利用主机USB与全志SoC 的Boot ROM进行通讯的一种低级别手段。被用于最初始的片上编程活动以及设备恢复的手段。

进入FEL模式,根据不同的板子可能有不同的进入方法。有的可以进行boot0或boot1初始化,有的不行。
如果你打算使用FEL模式去获取设备信息,可以考虑选取一种方法初始化到boot1状态。不同的板子可能有好几种方法,包括不限于:

  • 1、如果你的板子上有个专门的按钮,可以通过开机时保持按住这个按钮,可以进入FEL模式
  • 2、有可能通过VOL+或其他按钮在开机时保持按住,进入boot1
  • 3、通过串口控制台UART
    ……
    等等

对于Orange Pi Zero 2 (H616),只要在不插TF卡的状态下,USB连接,既可以进入FEL模式。

在Ubuntu或其他Linux发行版情况下可以通过libusb库直接连接设备。
在Windows上需要Zadig安装WinUSB驱动来实现。
在这里插入图片描述

6、usb-boot

已经废弃的遗留的USB启动程序。

7、fel-pio

可以在FEL模式下启用IO寄存器访问。这个程序不应该直接使用。

8、fel-sdboot

一个用于ARM本地启动代码,用来强制进入FEL模式,可以直接启动到FEL模式而无需按任何按钮。

9、jtag-loop

jtag模式

10、sunxi-bootinfo

从 Allwinner 设备中拉取启动文件(boot0/boot1)

11、meminfo

这是一个设备端工具,可以读取寄存器信息并且打印所有需要添加到uboot的设备支持。这个工具要求静态编译,以便也可用于Android系统。

12、script-extractor

设备端工具,用于读取RAM中魔法地址0x4300000中的script.bin数据并且保存到文件中,这个工具需要静态编译,可用于Android设备中。不过要注意的是这个文件只能用于基于FEX的内核中,在基于主线内核的设备树没有任何作用。

13、phoenix-info

读取通过 phoenixcard工具创建的SD卡镜像信息并且从隐藏分区中释放嵌入式启动代码和固件文件,不过对于LiveSuit 的镜像没有用。

14、sunxi-nand-part

sunxi-nand-part 是专门为sunxi 的NAND设备重新分区的工具。应当以设备的架构交叉编译,而且需要对内核打一个特别的补丁,为将整个NAND作为一个块设备暴露使用。

4、运行uboot

通过以下命令可以在开发板上运行我们编译好的uboot

./sunxi-fel uboot u-boot-sunxi-with-spl.bin
 
  • 1

参考文献:
1.Sunxi-tools
2.BROM
3.FEL/USBBoot
4.Github:sunxi-tools
5.FEL
6.LiveSuit images