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