启用UBOOT TFTP上传功能

需积分: 34 20 下载量 26 浏览量 更新于2024-07-21 1 收藏 101KB DOC 举报
"uboot tftp上传功能的实现与修改" 在嵌入式系统中,U-Boot(统一引导加载程序)是一个广泛使用的开源引导加载程序,它支持多种网络协议,包括TFTP(Trivial File Transfer Protocol)。TFTP通常用于在开发过程中传输固件和配置文件到目标设备。默认情况下,U-Boot提供了TFTP下载功能,但并不包含上传功能。如果你需要在U-Boot环境中使用TFTP进行文件上传,就需要对源代码进行一些修改。 1. **修改common/cmd_net.c** 在默认情况下,`do_tftpb` 函数是用于处理TFTP命令的,它只实现了下载功能。为了添加上传功能,你需要首先在`cmd_net.c` 文件中找到 `do_tftpb` 函数,并将其注释掉,避免与新的TFTP命令冲突。同时,添加一个新的函数 `do_tftp`,这个函数将处理TFTP的上传和下载。 ```c // 原来的do_tftpb函数被注释 /* int do_tftpb(cmd_tbl_t* cmdtp, int flag, int argc, char* argv[]) { ... } */ // 新添加的do_tftp函数 int do_tftp(cmd_tbl_t* cmdtp, int flag, int argc, char* argv[]) { return netboot_common(TFTP, cmdtp, argc, argv); } // 更新U_BOOT_CMD以支持do_tftp U_BOOT_CMD( tftp, 4, 1, do_tftp, "tftp\t-download or upload image via network using TFTP protocol\n", "[loadAddress][bootfile]" ); ``` 2. **调整命令解析** 修改后的 `do_tftp` 函数会根据传入的参数来决定执行下载还是上传操作。当提供四个参数时,第四个参数应该是上传的文件名,这将触发上传功能。例如: ```bash tftp50400000xx.bin10000 TFTPtoserver192.168.0.30;ourIPaddressis192.168.0.152 UploadFilename'xx.bin'. Uploadfromaddress:0x50400000,0.064MBtobesend Uploading: %#[Connected]0.064MB upload ok. ``` 这条命令指示从地址0x50400000开始,长度为0x10000的数据(0.064MB)将被上传到TFTP服务器,服务器IP为192.168.0.30,文件名为xx.bin。 3. **实现上传逻辑** 在 `netboot_common()` 函数中,你需要添加TFTP上传的代码逻辑。这部分通常涉及与网络堆栈的交互,包括设置TFTP客户端、连接到服务器、读取本地内存中的数据并发送到服务器等步骤。这一步的实现可能需要参考TFTP客户端的相关代码,并确保正确处理错误情况。 4. **测试和验证** 完成修改后,编译U-Boot并烧录到目标硬件上。在U-Boot命令行中,尝试使用新的TFTP命令进行上传操作,确保一切按照预期工作。记得在服务器端配置TFTP服务,允许接收上传文件,并检查上传是否成功。 请注意,上述过程是一个概述,实际的代码实现可能会根据具体的U-Boot版本和你的需求有所不同。务必仔细阅读U-Boot的源代码,理解其工作原理,并根据需要进行适当的调整。在进行任何修改之前,最好先备份原始代码,以防止意外问题发生。此外,由于不同的U-Boot分支可能存在差异,确保你的修改适用于你的特定版本。在2008.10及以后的版本中,这个功能可能已经被实现或有更优雅的解决方案。