开篇
为什么会有这篇文章,因为小生被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)(structcmd_tbl*cmdtp,intflag,intargc,constchar*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的命令处理函数
staticintdo_showIriczhaoInfo(structcmd_tbl*cmdtp,intflag,intargc,char*constargv[])
{
printf("[iriczha]:u-boothelloworld!!!");
return0;
}
(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源码中,其命令与命令处理函数的绑定过程是一个非常精彩的技术点,先留着点,下回分析啦!
审核编辑:汤梓红
-
u-boot
+关注
关注
0文章
121浏览量
38439 -
命令
+关注
关注
5文章
705浏览量
22215
原文标题:自定义u-boot命令,有意思!
文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
u-boot命令之EMMC和SD卡操作命令详解
U-boot的基本介绍

飞凌全志T527开发板U-Boot添加自定义菜单
【OK210试用体验】u-boot篇 -- u-boot初体验(续)
【OK210试用体验】u-boot篇 -- 自定义单板
具有自定义phy的自定义板的u-boot错误怎么解决?
Porting U-Boot to the Control
u-boot简介
U-Boot命令介绍
详解U-Boot引导内核分析

评论