电子说
为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot源码的开发技术啦,可能u-boot官方开发人员、芯片原厂或者硬件板卡BSP开发人员会接触到这一块。
既然被我碰着了,那就皱眉一笑轻提笔,在此一文奉上。
对于u-boot来说,其核心功能是使用命令来执行对应的操作。在u-boot源码/cmd目录下则放置了关于u-boot所支持的所有命令,如下图所示:
(.o文件是编译后生成的)
在实际开发中,我们可以创建新的命令结构,然后将命令添加到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)
命令函数指针声明如下:
int (*cmd)(struct cmd_tbl *cmdtp, int flag, int argc, const char *argv[]);
在第一小节中,已经描述了关于u-boot命令的基础知识,本小节将来实现一个具体的u-boot命令。
这里假设这个命令命名为:showIriczhaoInfo
。当我们在u-boot的命令行下输入这个命令后,将打印出“[iriczhao]:u-boot hello world!!!”。
(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源码中,其命令与命令处理函数的绑定过程是一个非常精彩的技术点,先留着点,下回分析啦!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !