u-boot命令解析

版权声明:本文为博主原创文章,任何组织或者个人可以在任何媒介上发表或转载我的文章、图片等.且转载后必须注明出处和邮箱,博客地址(https://blog.csdn.net/u011011827),本人邮箱([email protected]) https://blog.csdn.net/u011011827/article/details/76522129
前言
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()

猜你喜欢

转载自blog.csdn.net/u011011827/article/details/76522129