加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在U-boot中添加加命令

发布时间:2020-12-15 06:20:26 所属栏目:百科 来源:网络整理
导读:最近想再U-boot中加一个USB下载文件的命令,就研究啦一下U-Boot中的命令工作原理! 并且在VC里面建了一个工程,对里面的一些和硬件不相关的程序做了测试,下面写出来,也许对大家有用! 原理: 每个命令都有一个命令结构体 struct cmd_tbl_s { char*name; in

最近想再U-boot中加一个USB下载文件的命令,就研究啦一下U-Boot中的命令工作原理! 并且在VC里面建了一个工程,对里面的一些和硬件不相关的程序做了测试,下面写出来,也许对大家有用! 原理: 每个命令都有一个命令结构体 struct cmd_tbl_s { char*name; intmaxargs; intrepeatable; int (*cmd)(struct cmd_tbl_s *,int,char *[]); char*usage; char*help; }; 去定义它。Cmd为要调用的命令函数!name为该命令名字符串。 在u-boot里面有这样的宏 #define Struct_Section __attribute__ ((unused,section (".u_boot_cmd"))) #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name,help} 宏U_BOOT_CMD(name,help)就是将 cmd_tbl_s{ name,help }这样的一个命令结构体放入内存.u_boot_cmd这个区域,.u_boot_cmd这个域在board/smdk2410/u-boot.lds中定义!在U-boot中的shell中,根据用户输入的命令,就会在.u_boot_cmd这个内存区域中查找,当.u_boot_cmd中某一个cmd_tbl_s命令结构体的cmd_tbl_s.name和输入的命令字符串相符时,就调用该命令 结构体的cmd_tbl_s.cmd( ….)函数! 怎样添加命令函参数! 下面以添加USB下载命令为例! a 在include/configs/smdk2410.h中的CONFIG_COMMDNDS中增加一项: CFG_CMD_USBLOAD,#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | CFG_CMD_NET | CFG_CMD_ENV | CFG_CMD_FLASH | CFG_CMD_PING | CFG_CMD_NAND | CFG_CMD_REGINFO | CFG_CMD_DATE | CFG_CMD_USBLOAD | CFG_CMD_ELF) b 在include/cmd_confdefs.h中加入命令标志位 #define CFG_CMD_USBLOAD0x00000055ULL (可以是其它值,不冲突就好) c 在common下面加入usbload.c 框架如下 #If(CONFIG_COMMANDS & CFG_CMD_USBLOAD) Int usb_load(cmd_tbl_t *cmdtp,int flag,int argc,char *argv[ ] ) { …………………. } U_BOOT_CMD{ Usbload,2,1,usb_load,“usb load img file”,“This is a test” }; #endif d 在common/Makefile 添加要编译的目标文件 e 重新编译u-boot,就OK啦!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读