什么是U-Boot API?其可提供哪些功能支持?
U-Boot v2021.01
Enable U-Boot API 配置项详解 具体定义
这个配置项控制是否编译进U-Boot对外提供的跨架构稳定 standalone 应用接口——注意这不是U-Boot内部供自身命令、驱动调用的内部函数接口,是专门为独立于U-Boot本体运行的 standalone 程序设计的服务封装层。开启后相关API实现代码会被编入U-Boot固件,同时编译时会生成对应的头文件、调用约定参考文件,供外部独立程序编译链接使用。
这套API从设计上就做了架构解耦,不管是ARM、RISC-V还是x86架构的板卡,同一版本API的调用逻辑、参数定义完全一致,上层应用不需要针对不同CPU架构写适配代码。
可提供的功能与能力
开启该选项后,外部standalone程序可以通过固定入口调用以下几类能力:
- 系统信息查询:支持获取U-Boot版本号、板卡DRAM布局、CPU参数、板卡唯一序列号、时钟配置等板级基础信息,不需要直接读硬件寄存器做探测。
- 内存操作:提供安全的内存读写、内存拷贝、内存校验接口,直接操作物理地址空间的内存数据,接口自带越界检查,不会误改U-Boot自身运行的保留内存区域。
- 存储与文件系统访问:直接复用U-Boot已适配的所有存储驱动和文件系统驱动,不需要单独写驱动就能读写SD卡、eMMC、SPI Flash、NAND Flash等存储介质,也支持直接操作FAT、ext4、SquashFS等U-Boot支持的文件系统,完成文件读写、目录遍历、文件属性查询操作。
- 输入输出交互:封装了串口、控制台的输入输出能力,上层程序可以直接调用接口打印日志、接收串口用户输入,不需要自己适配不同板卡的串口寄存器配置。
- 外设访问:封装了U-Boot驱动模型的基础调用能力,可以直接操作已经被U-Boot驱动的I2C/SPI外设、GPIO、网络接口、显示设备,比如读写I2C挂载的传感器数据、控制GPIO电平、发送UDP网络报文、往帧缓冲写数据显示图像。
- 启动流程控制:支持读取、修改U-Boot环境变量,触发U-Boot执行预设的启动命令,或者直接跳转到指定内存地址运行其他固件/内核镜像,不需要退回U-Boot命令行手动操作。
补充说明:这套API和U-Boot的shell命令接口、UEFI运行时接口是完全独立的,开启后不会影响原有U-Boot命令行的功能。API的入口地址、调用约定在同主版本的U-Boot中保持稳定,只要主版本号不变,提前编译好的standalone程序不需要重新编译就能在对应板卡的U-Boot上运行。该选项默认在多数板卡配置中是关闭的,会增加10KB左右的固件体积,只有需要在U-Boot阶段运行独立调试工具、自定义预启动逻辑的时候才需要开启。
内容的提问来源于stack exchange,提问作者Caglayan Dokme
相关产品推荐
相关产品推荐

