u-boot命令解析

前言
1/ 命令的创建
在uboot 中添加一条命令只需添加一个 对 U_BOOT_CMD 的调用 
//此时创建在了 .u_boot_cmd 段,具体地址根据链接顺序而定,段起始地址和结束地址分别是 __u_boot_cmd_start 和 __u_boot_cmd_end 
//命令的结构体类型为 cmd_tbl_t

2/命令的遍历
在 __u_boot_cmd_start 和 __u_boot_cmd_end  中间,根据 cmd_tbl_t 类型中的 name (例如 "tftp") 成员,找到一个变量.然后就找到 变量中的成员 cmd(函数指针)
然后调用 cmd ,就开始 执行 对应 这个 "tftp" 的 函数 do_tftp 

CMD sf

  • 使用方法

  • 命令定义
//cmd_sf.c
U_BOOT_CMD(
    sf, 
  	5,  
  	1,  
  	do_spi_flash,
    "SPI flash sub-system",
    
    "probe [bus:]cs [hz] [mode] - init flash device on given SPI bus\n"
    "                 and chip select\n"
    "sf read addr offset len    - read `len' bytes starting at\n"
    "                 `offset' to memory at `addr'\n"
    "sf write addr offset len   - write `len' bytes from memory\n"
    "                 at `addr' to flash at `offset'\n"
    "sf erase offset len        - erase `len' bytes from `offset'"
);

do_spi_flash 的实现,待填坑


CMD tftp

  • 使用方法

tftp 0x30008000 uImage
  
  • 命令定义

U_BOOT_CMD(
	tftp,	4,	1,	do_tftp,
	"tftp\t- download or upload image via network using TFTP protocol",
	"[loadAddress] [bootfilename] <upload_size>"
);

int do_tftp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
	return netboot_common (TFTP, cmdtp, argc, argv);
}

// 具体没解析,待看网络的时候填坑
do_tftpb
    netboot_common
        netloop (net.c)
            TftpStart (tftp.c)
                NetSetHandler()指定了全局量packetHandler为TftpHandler
                    eth_rx()->net_receive()->packetHandler()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值