开篇 为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot源码的开发技术啦,可能u-boot官方开发人员、芯片原厂或者硬件板卡bsp开发人员会接触到这一块。
既然被我碰着了,那就皱眉一笑轻提笔,在此一文奉上。
对于u-boot来说,其核心功能是使用命令来执行对应的操作。在u-boot源码/cmd目录下则放置了关于u-boot所支持的所有命令,如下图所示:
(.o文件是编译后生成的)
一、基础 (1-1)命令定义 在实际开发中,我们可以创建新的命令结构,然后将命令添加到u-boot中。步骤大致如下:首先在命令描述文件中包含command.h,然后再使用u_boot_cmd()或u_boot_cmd_complete宏来填充struct cmd_tbl结构:
u_boot_cmd(name, maxargs, repeatable, command, usage, help)u_boot_cmd_complete(name, maxargs, repeatable, command, usage, help, comp) name:命令名称。注意:这不是一个字符串。 maxargs:此函数接受的最大参数值,包括命令本身。 repeatable:0 - 不允许自动重复;1 - 允许自动重复。 command:指向命令函数的指针。这是在u-boot命令行下发出命令时调用的函数。 usage:用于描述命令的提示信息。是一个字符串。 help:长描述。这是一个字符串。只有定义了config_sys_longhelp时,长描述才可用。 comp:指向补全函数的指针。可能是null。如果在输入命令参数以完成输入时按下tab键,则调用此函数。命令补全仅在定义了config_auto_complete时可用。 (1-2)命令函数 命令函数指针声明如下:
int (*cmd)(struct cmd_tbl *cmdtp, int flag, int argc, const char *argv[]); cmdtp:描述该命令的表条目。 flag:可以包含以下几种选项:cmd_flag_repeat - 重复执行最后一条命令;cmd_flag_bootd - 该命令由bootd命令调用;cmd_flag_env - 该命令由run命令调用。 argc:包括命令在内的参数的数目。 argv:参数。允许的返回值为:cmd_ret_success - 标志命令执行成功;cmd_ret_failure - 命令执行失败;cmd_ret_usage - 使用无效参数调用命令。这个值将显示用法字符串。 二、创建自定义的u-boot命令 在第一小节中,已经描述了关于u-boot命令的基础知识,本小节将来实现一个具体的u-boot命令。
这里假设这个命令命名为:showiriczhaoinfo。当我们在u-boot的命令行下输入这个命令后,将打印出“[iriczhao]:u-boot hello world!!!”。
(2-1)命令创建过程 (1)在u-boot的/cmd目录下创建一个文件,命名为command_test.c。
(2)添加头文件。在command_test.c文件中添加如下的头文件信息:
#include #include (3)定义showiriczhaoinfo的命令处理函数
static int do_showiriczhaoinfo(struct cmd_tbl *cmdtp, int flag, int argc ,char *const argv[]){ printf([iriczha]:u-boot hello world!!!); return 0;} (4)使用u_boot_cmd关联命令和命令处理函数
u_boot_cmd(showiriczhaoinfo,config_sys_maxargs,0,do_showiriczhaoinfo,do_showiriczhaoinfo,command ); (5)将command_test.c文件添加到makefile文件中,如下图所示:
(6)以snadbox方式编译u-boot源码(注:也可以编译其他架构下的u-boot)
(7)在宿主机终端中运行u-boot snadbox,效果如下:
从上图可见,当我们在u-boot的命令行上输入showiriczhaoinfo后,按下回车键,输出了[iriczhao]:u-boot hello world!!!信息,结果与预期效果一样。
三、总结 在u-boot的命令描述文件中,是按照模块来进行文件划分的。例如对于ext4文件系统的命令操作就会放到ext4.c文件中,在该文件中放置操作ext4的所有命令。在分析u-boot的命令源码时候,可根据该种思路来寻找具体的命令处理过程。
本文描述了u-boot命令行的定义过程,描述如何实现一个自定义命令并将其添加到u-boot中。
在u-boot源码中,其命令与命令处理函数的绑定过程是一个非常精彩的技术点,先留着点,下回分析啦!
一文看完智能座舱SoC国内外玩家及产品全览
音圈模组加持激光雷达技术的作用
玻璃基板制造商NEG预计今年3月底恢复正常生产 中国产能将增加5成
智能健康跨界示范馆燃爆广州国际照明展
挑战你的神经——可植入电子设备!
创建自定义的u-boot命令
恩智浦与菜鸟合作将共同研究射频识别技术与智能零售解决方案
Andes、TASKING与MachineWare合作推动RISC-V ASIL车用芯片开发
iQOO 7游戏性能测试:表现并不让人不满意
关于绝缘型反激式转换器的温度测量和损耗测量
数千万量级市场尚未开启,5G小站有望下半年迎来首个“春天”
m8002是什么继电器 原理和用法介绍
RSoft光子器件工具2023.03中的新增功能:扩展超透镜设计和多物理场仿真
建立对物联网的信任
LLC谐振转换器设计方案
2018年第三季度全球智能手机市场报告显示三星继续下滑华为增速最猛
Q1季度PC处理器排名公布,AMD拿下本季度消费级CPU性能冠军
“云+AI”成为本土EDA企业加速突进的核心“杀手锏”
变压器的阻抗变换关系
嵌入式Linux在工业控制领域中的应用