u-boot 6、命令
来源:互联网 发布:录屏软件fast 编辑:程序博客网 时间:2024/04/26 13:53
在上一章里,在u-boot的第二阶段,分析u-boot执行到main_loop(),此时,就相当于我们看到的u-boot倒数界面:
(1)没按下任何键,将启动内核:
s = getenv("bootcmd");
run_command(s....);
(2)按下键,进入u-boot界面:
s = getline();
run_command(s...);
U-Boot中每个命令都通过U_BOOT_CMD宏来定义,格式如下:U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help")
各项参数的意义为:
① name:命令的名字,注意,它不是一个字符串(不要用双引号括起来)。
② maxargs:最大的参数个数
③ repeatable:命令是否可重复,可重复是指运行一个命令后,下次敲回车即可再次运行。
④ command:对应的函数指针,类型为(*cmd)(struct cmd_tbl_s *, int, int, char *[])。
⑤ usage:简短的使用说明,这是个字符串。
⑥ help:较详细的使用说明,这是个字符串。
宏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}
Struct_Section也是在include/command.h中定义:
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
比如对于bootm命令,它如此定义:
U_BOOT_CMD(
bootm,CFG_MAXARGS,1,do_bootm,
“string1”,
“string2”
);
宏U_BOOT_CMD扩展开后就是:
cmd_tbl_t __u_boot_cmd_bootm __attribute__ ((unused,section (".u_boot_cmd"))) = {“bootm”, CFG_MAXARGS, 1, do_bootm, “string1”, “string2”};
对于每个使用U_BOOT_CMD宏来定义的命令,其实都是在".u_boot_cmd"段中定义一个cmd_tbl_t结构。连接脚本u-boot.lds中有这么一段:
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
程序中就是根据命令的名字在内存段__u_boot_cmd_start~__u_boot_cmd_end找到它的cmd_tbl_t结构,然后调用它的函数(请参考common/command.c中的find_cmd函数)。
- u-boot 6、命令
- u-boot的boot命令
- u-boot之命令分析(6)
- 常用U-Boot命令
- U-Boot命令手册
- u-boot 命令
- U-Boot命令手册
- 添加u-boot命令
- U-boot命令(部分)
- u-boot命令解释
- U-Boot命令手册
- U-Boot命令帮助
- U-Boot命令详解
- u-boot命令详解
- 添加U-Boot命令
- U-Boot命令详解
- u-boot命令
- u-boot命令配置
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- memcached-session-manager使用总结
- JNI-->Java调用C语言
- Arcgis for Js之加载wms服务
- Largest Submatrix
- u-boot 6、命令
- poj 1845 Sumdiv
- php图片处理类
- 排序集合
- Java遍历文件夹的两种方法(非递归和递归) .
- Matrix Swapping II
- java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
- 蓝桥杯——前缀表达式
- Quartz2D详解