[U-Boot] Need FTP client support in U-Boot

Gilles Chanteperdrix gilles.chanteperdrix at xenomai.org
Thu Oct 30 08:08:44 CET 2014


On Wed, Oct 29, 2014 at 03:49:15PM +0100, Wolfgang Denk wrote:
> Dear Madhu,
> 
> In message <23c3598d8b87452eb6a3d1f52afb8a34 at 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.

> 
> > 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.


More information about the U-Boot mailing list