u-boot中添加TFTP Server

时间:2022-05-26 10:02:42
我以前写过tftp server,这回要将其移到u-boot中,但是看了net部分的程式,就是不知道是如何接收和发送包的,里面好像最简化的socket都没有.请高手指点一下,如何写类似TftpSend()和TftpReceive()?

11 个解决方案

#1


暈,沒人頂

#2


帮你顶,,,,
是否可以参考uboot中的tftp客户端数据传送来做呢?

傻傻的问一下,,,把tftp server放在uboot中有什么用处?

#3


把tftp server放在uboot中???
亏你想得出来哦,U-BOOT不是多任务操作系统,你未必还在里面支持多线程??
在这种不带操作系统的BOOT程序中,什么都要自己写,你自己写协议栈都可以,实际上在BOOT仅封装了最原始的发包函数(最原始的网络以太网数据包,你需要自己构建更高一层的协议),如果你连tcp/ip协议栈不懂的话,劝你放弃这个想法

#4


是我没说清楚,
我是想实现一个简化的TFTP Server,用来更新flash中的内容.
现在问题是看不清楚他的包是如何发出来的,里面是有TFTP客户端,但是不是很明了,有谁做过类似的请指教一下.

#5


由于U-BOOT不支持多线程,所以要做TFTP Server,必须注意以下几点:
1.在其main函数最后等待用户键入命令的同时(实际上就是一个循环),要不停地接收网络数据并分析
2.底层只提供最原始的网络数据包发送与接收函数,所以上层的TFTP协议要自己写,所以要相当熟悉TFTP协议
3.由于你要响应网络上的TFTP请求,最好还要支持ICMP,ARP协议

综上所述,你想要在U-BOOT中实现FTFP协议,不仅要相当熟悉网络协议栈,还要熟悉U-BOOT中的程序流程,写出来相当麻烦,与其这样,还不如在U-BOOT使用USB或者串口(串口速度慢,关键是看自己的需求了)来更新flash中的内容,这样做要简单一些(U-BOOT中已经集成了对USB传输的支持).

#6



在u-boot中加入tftp功能是很有必要的,很多种情况下都会用到这个功能。但注意以下:

1, u-boot一般只做客户端,windows pc机做服务端。这样既解决了多线程的问题,又简化了u-boot的功能。

    其实,楼主想做的事情无非是想通过tftp获得文件,然后把文件烧到flash上,用客户端完全可行。

2, 要做带tftp的网络功能,其实也不是太难的事情。首先是网卡驱动,很容易从网上找到某个类型网卡驱动,
    接着就是必须处理arp协议,主要是arp请求和等待应答(因为做客户端)。最后
    就是Udp协议和tftp协议,两个都是简单的协议,从pdu(协议数据单元)读出数据到内存,烧到flash。
   
     注:可以不用socket层,读写数据直接操作skb封包。

#7


各位,我没想做那么复杂啊.
因为我已经有了PC端的tftp client,而且这部分是不能改的,要完全按照它的协议来完成二进制文件传输.
我要完成的tftp server可以利用u-boot中基本的网络部分,只要能接收和发送包就行了,
在u-boot似乎里有TFTP的client部分,但是对包的接收部分比较的隐晦,我有点力不从心.所以我想请做过类似的高手指导一下.

#8


日,那你看看网卡驱动里的中断处理函数,顺着这个就可以看到数据怎么接收的了。

#9


操,白忙了半天.
现在正在写,但还不知道能不能跑得起来.

#10


楼主加油

#11


好,加油 
谢谢各位了.

#1


暈,沒人頂

#2


帮你顶,,,,
是否可以参考uboot中的tftp客户端数据传送来做呢?

傻傻的问一下,,,把tftp server放在uboot中有什么用处?

#3


把tftp server放在uboot中???
亏你想得出来哦,U-BOOT不是多任务操作系统,你未必还在里面支持多线程??
在这种不带操作系统的BOOT程序中,什么都要自己写,你自己写协议栈都可以,实际上在BOOT仅封装了最原始的发包函数(最原始的网络以太网数据包,你需要自己构建更高一层的协议),如果你连tcp/ip协议栈不懂的话,劝你放弃这个想法

#4


是我没说清楚,
我是想实现一个简化的TFTP Server,用来更新flash中的内容.
现在问题是看不清楚他的包是如何发出来的,里面是有TFTP客户端,但是不是很明了,有谁做过类似的请指教一下.

#5


由于U-BOOT不支持多线程,所以要做TFTP Server,必须注意以下几点:
1.在其main函数最后等待用户键入命令的同时(实际上就是一个循环),要不停地接收网络数据并分析
2.底层只提供最原始的网络数据包发送与接收函数,所以上层的TFTP协议要自己写,所以要相当熟悉TFTP协议
3.由于你要响应网络上的TFTP请求,最好还要支持ICMP,ARP协议

综上所述,你想要在U-BOOT中实现FTFP协议,不仅要相当熟悉网络协议栈,还要熟悉U-BOOT中的程序流程,写出来相当麻烦,与其这样,还不如在U-BOOT使用USB或者串口(串口速度慢,关键是看自己的需求了)来更新flash中的内容,这样做要简单一些(U-BOOT中已经集成了对USB传输的支持).

#6



在u-boot中加入tftp功能是很有必要的,很多种情况下都会用到这个功能。但注意以下:

1, u-boot一般只做客户端,windows pc机做服务端。这样既解决了多线程的问题,又简化了u-boot的功能。

    其实,楼主想做的事情无非是想通过tftp获得文件,然后把文件烧到flash上,用客户端完全可行。

2, 要做带tftp的网络功能,其实也不是太难的事情。首先是网卡驱动,很容易从网上找到某个类型网卡驱动,
    接着就是必须处理arp协议,主要是arp请求和等待应答(因为做客户端)。最后
    就是Udp协议和tftp协议,两个都是简单的协议,从pdu(协议数据单元)读出数据到内存,烧到flash。
   
     注:可以不用socket层,读写数据直接操作skb封包。

#7


各位,我没想做那么复杂啊.
因为我已经有了PC端的tftp client,而且这部分是不能改的,要完全按照它的协议来完成二进制文件传输.
我要完成的tftp server可以利用u-boot中基本的网络部分,只要能接收和发送包就行了,
在u-boot似乎里有TFTP的client部分,但是对包的接收部分比较的隐晦,我有点力不从心.所以我想请做过类似的高手指导一下.

#8


日,那你看看网卡驱动里的中断处理函数,顺着这个就可以看到数据怎么接收的了。

#9


操,白忙了半天.
现在正在写,但还不知道能不能跑得起来.

#10


楼主加油

#11


好,加油 
谢谢各位了.