U-Boot命令解析
第一节 U-Boot中命令的定义方式
uboot中使用U_BOOT_CMD来定义命令,宏U_BOOT_CMD定义在文件include/command.h中,定义如下:
| #define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help) \ U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL) |
U_BOOT_CMD命令以dhcp命令为例:
| dhcp命令宏定义 U_BOOT_CMD(dhcp,3,1,do_dhcp,”boot image via network using DHCP/TFTP protocol”,”[localAddress] [[hostIPaddr:]bootfilename]”); |
展开以后的模样:
| dhcp命令展开 U_BOOT_CMD(dhcp,3,1,do_dhcp,”boot image via network using DHCP/TFTP protocol”,”[localAddress] [[hostIPaddr:]bootfilename]”); 1.将U_BOOT_CMD展开后为: U_BOOT_CMD_COMPLETE(dhcp,3,1,do_dhcp,”boot image via network using DHCP/TFTP protocol”,”[localAddress] [[hostIPaddr:]bootfilename]”,NULL); 2.将U_BOOT_CMD_COMPLETE展开后为: ll_entry_declare(cmd_tbl_t,dhcp,cmd) = \ U_BOOT_CMD_MKENT_COMPLETE(dhcp,3,1,do_dhcp,”boot image via network using DHCP/TFTP protocol”,”[localAddress] [[hostIPaddr:]bootfilename]”,NULL); 3.将ll_entry_declare和U_BOOT_CMD_MKENT_COMPLETE展开后为: cmd_tbl_t u_boot_list_2_cmd_2_dhcp __aligned(4) \ __attribute__((unused,section(.u_boot_list_2_cmd_2_dhcp))) \ { dhcp,3,1,do_dhcp,”boot image via network using DHCP/TFTP protocol”,”[localAddress] [[hostIPaddr:]bootfilename]”,NULL} |
最终展开结果:
| dhcp命令最终结果 1 cmd_tbl_t u_boot_list_2_cmd_2_dhcp __aligned(4) \ 2 __attribute__((unused,section(.u_boot_list_2_cmd_2_dhcp))) \ 3 { dhcp,3,1,do_dhcp, \ 4 ”boot image via network using DHCP/TFTP protocol”, \ 5 ”[localAddress] [[hostIPaddr:]bootfilename]”, \ 6 NULL} |
第1行定义了一个cmd_tbl_t类型的变量,变量名为u_boot_list_2_cmd_2_dhcp,此变量4字节对齐。
第2行,使用__attribute__关键字设置变


462

被折叠的 条评论
为什么被折叠?



