
On Thu, 30 Oct 2014 08:08:44 +0100 Gilles Chanteperdrix gilles.chanteperdrix@xenomai.org wrote:
On Wed, Oct 29, 2014 at 03:49:15PM +0100, Wolfgang Denk wrote:
Dear Madhu,
In message 23c3598d8b87452eb6a3d1f52afb8a34@SG2PR01MB0394.apcprd01.prod.exchangelabs.com you wrote:
We are looking for FTP client command in U-boot commands, So that, we can boot the O.S kernel-image through ftp-client(instead of tftpboot over network).
It would have been usful if you had told us whyyou thing the existing network protocols (TFTP, NFS) are not sufficient for your use cases?
Hi Wolfgang,
if you do not mind me interfering, I have started using HTTP with pxelinux recently, and I can answer this question: for large files (such as large initramfs files, which are practical nowadays since even some embedded boards have gigabytes of RAM), TCP based protocols are much, much faster than TFTP. That is because TFTP is a request/response protocol, which takes one round trip time for every packet asked. TCP based protocols, on the other hand benefit from sending several packets before getting an acknowledge, which means there is a "pipelining" effect.
Hmm.
low speed of TFTP protocol in U-boot is not a problem of TFTP protocol itself, but problem of TFTP protocol setup.
Here is a trivial 16 MiB file transfer benchmark via GbE network. I use tftp client from busybox package on my linux host.
$ time busybox tftp -g -r antony/16M -l 16M tftpserver antony/16M 100% |******************************************| 16384k 0:00:00 ETA
real 0m6.724s user 0m0.076s sys 0m0.532s
$ time busybox tftp -g -r antony/16M -l 16M berta -b 64000 antony/16M 100% |******************************************| 16384k 0:00:00 ETA
real 0m0.229s user 0m0.000s sys 0m0.040s
$ ls -la 16M -rw-r--r-- 1 antony antony 16777216 Oct 31 12:17 16M
So default busybox tftp setup give us only 2.3 MiB while huge transfer block setup give us nearly 70 MiB!
Why doesn't the U-boot support FTP client ?
FTP is based on TCP/IP, but U-Boot implements just a very minimal set of UDP based protocols.
Can we implement/add the FTP client protocol code to U-boot sources and customize. if so, how much work activity involved in this ?
Is this just need to write a small ftp-client program file by using TCP stream sockets (as like in Linux) ? Or do we need to write up anything more like TCP/IP network stack..
Right, in the first step you would need to implement a full-blown TCP/IP stack, which would most probably require some other deep-goig changes (keep for example in mind that U-Boot is [intentionally] strictly single-threaded; many implementations don't even support interrupts).
The big question is: why should we do that? U-Boot is a boot loader. If you need OS functionality like a full-blown network stack, than just boot an OS ...
It seems some bootloader or x86 PXE (I do not know where it is implemented) have TCP support. So, that may not be that uncommon after all, and there is maybe even some code to take from these implementations, because they are also most probably single threaded and not using interrupts.
Regards.
-- Gilles. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot