本文共 1387 字,大约阅读时间需要 4 分钟。
1/ 命令的创建在uboot 中添加一条命令只需添加一个 对 U_BOOT_CMD 的调用 //此时创建在了 .u_boot_cmd 段,具体地址根据链接顺序而定,段起始地址和结束地址分别是 __u_boot_cmd_start 和 __u_boot_cmd_end //命令的结构体类型为 cmd_tbl_t2/命令的遍历在 __u_boot_cmd_start 和 __u_boot_cmd_end 中间,根据 cmd_tbl_t 类型中的 name (例如 "tftp") 成员,找到一个变量.然后就找到 变量中的成员 cmd(函数指针)然后调用 cmd ,就开始 执行 对应 这个 "tftp" 的 函数 do_tftp
//cmd_sf.cU_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 的实现,待填坑
tftp 0x30008000 uImage
U_BOOT_CMD( tftp, 4, 1, do_tftp, "tftp\t- download or upload image via network using TFTP protocol", "[loadAddress] [bootfilename]");
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()
转载地址:http://zxigi.baihongyu.com/