没有合适的资源?快使用搜索试试~ 我知道了~
首页如何在UBOOT中添加命令的方法
如何在UBOOT中添加命令的方法
5星 · 超过95%的资源 需积分: 50 93 下载量 82 浏览量
更新于2023-03-03
评论 1
收藏 80KB DOC 举报
此文档简单的介绍了如何在UBOOT中添加命令,例子是实现快捷菜单命令menu,在命令提示中输入menu就执行menu命令,进入自己设定的快捷菜单
资源详情
资源评论
资源推荐
下面以添加 menu 命令为例分析 U-Boot 添加命令的方法。
(1) 在 common 目录下新建 cmd_menu.c 文件
习惯上把通用命令源代码放在 common 目录下,与开发板专有命令源代码则放在
board/<board_dir>目录下,命名方式只是习惯而已。为了方便阅读和查询习惯以“cmd_<
命令名>.c”为文件名。
(2) 定义“menu”命令
在 cmd_menu.c 中使用如下的代码定义“menu”命令:
U_BOOT_CMD(
menu, 3, 0, do_menu,
"menu - display a menu, to select the items to do something",
" - display a menu, to select the items to do something"
);
其中 U_BOOT_CMD 命令格式如下:
U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
各个参数的意义如下:
name:命令名,非字符串,但在 U_BOOT_CMD 中用“#”符号转化为字符串
maxargs:命令的最大参数个数
rep:是否自动重复(按 Enter 键是否会重复执行)
cmd:该命令对应的响应函数
usage:简短的使用说明(字符串)
help:较详细的使用说明(字符串)
在内存中保存命令的 help 字段会占用一定的内存,通过配置 U-Boot 可以选择是否保
存 help 字段。若在 include/configs/mini2440.h 中定义了 CONFIG_SYS_LONGHELP 宏,
则在 U-Boot 中使用 help 命令查看某个命令的帮助信息时将显示 usage 和 help 字段的内容,
否则就只显示 usage 字段的内容。
U_BOOT_CMD 宏在 include/command.h 中定义:
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd,
usage, help}
“##”与“#”都是预编译操作符,“##”有字符串连接的功能,“#”表示后面紧接着的是一个字
符串。
其中的 cmd_tbl_t 在 include/command.h 中定义如下:
struct cmd_tbl_s {
char *name; /* 命令名 */
int maxargs; /* 最大参数个数 */
int repeatable; /* 是否自动重复 */
int (*cmd)(struct cmd_tbl_s *, int, int, char *[]); /* 响应函数 */
char *usage; /* 简短的帮助信息 */
#ifdef CONFIG_SYS_LONGHELP
char *help; /* 较详细的帮助信息 */
#endif
#ifdef CONFIG_AUTO_COMPLETE
/* 自动补全参数 */
int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);
#endif
};
typedef struct cmd_tbl_s cmd_tbl_t;
一个 cmd_tbl_t 结构体变量包含了调用一条命令的所需要的信息。
其中 Struct_Section 在 include/command.h 中定义如下:
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
凡是带有__attribute__ ((unused,section (".u_boot_cmd"))属性声明的变量都将被存放
在".u_boot_cmd"段中,并且即使该变量没有在代码中显式的使用编译器也不产生警告信息。
在 U-Boot 连接脚本 u-boot.lds 中定义了".u_boot_cmd"段:
. = .;
__u_boot_cmd_start = .; /*将 __u_boot_cmd_start 指定为当前地址 */
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .; /* 将__u_boot_cmd_end 指定为当前地址 */
这表明带有“.u_boot_cmd”声明的函数或变量将存储在“u_boot_cmd”段。这样只要将
U-Boot 所有命令对应的 cmd_tbl_t 变量加上“.u_boot_cmd”声明,编译器就会自动将其放在
“u_boot_cmd”段,查找 cmd_tbl_t 变量时只要在__u_boot_cmd_start 与
__u_boot_cmd_end 之间查找就可以了。
因此“menu”命令的定义经过宏展开后如下:
cmd_tbl_t __u_boot_cmd_menu __attribute__ ((unused,section (".u_boot_cmd"))) =
{menu, 3, 0, do_menu, "menu - display a menu, to select the items to do something\n", " -
display a menu, to select the items to do something"}
实质上就是用 U_BOOT_CMD 宏定义的信息构造了一个 cmd_tbl_t 类型的结构体。编
译器将该结构体放在“u_boot_cmd”段,执行命令时就可以在“u_boot_cmd”段查找到对应的
cmd_tbl_t 类型结构体。
(3) 实现命令的函数
即 U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)中的 cmd 参数
在 cmd_menu.c 中添加“menu”命令的响应函数的实现。具体的实现代码略:
int do_menu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
/* 实现代码略 */
}
(4) 将 common/cmd_menu.c 编译进 u-boot.bin
在 common/Makefile 中把目标代码 cmd_menu.o 也加入一起编译:
在 include/configs/mini2440.h 加入如代码:
#define CONFIG_BOOT_MENU 1
重新编译下载 U-Boot 就可以使用 menu 命令了
(5)menu 命令执行的过程
在 U-Boot 中输入“menu”命令执行时,U-Boot 接收输入的字符串“menu”,传递给
run_command 函数。run_command 函数调用 common/command.c 中实现的 find_cmd 函
数在__u_boot_cmd_start 与__u_boot_cmd_end 间查找命令,并返回 menu 命令的
cmd_tbl_t 结构。然后 run_command 函数使用返回的 cmd_tbl_t 结构中的函数指针调用
menu 命令的响应函数 do_menu,从而完成了命令的执行。
(6)例子:TFTP 下载,命令很简单。
#include <common.h>
#include <command.h>
/**功能:等待键盘输入***/
static char awaitkey(unsigned long delay, int* error_p)
{
int i;
剩余18页未读,继续阅读
kuishanpark
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论16