Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Feb 2013 09:42:32 -0700
From:      Ian Lepore <ian@FreeBSD.org>
To:        Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>
Cc:        freebsd-hackers@FreeBSD.org
Subject:   Re: TFTP single file kernel load
Message-ID:  <1361637752.1185.99.camel@revolution.hippie.lan>
In-Reply-To: <alpine.BSF.2.00.1302231625440.42204@wojtek.tensor.gdynia.pl>
References:  <alpine.BSF.2.00.1302231625440.42204@wojtek.tensor.gdynia.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 2013-02-23 at 16:28 +0100, Wojciech Puchar wrote:
> can it be done?
> 
> converting ELF kernel (i don't use kld modules) to format that can be 
> loaded directly over TFTP - without intermediate stages like loader(8)?
> 
> just to have SINGLE FILE that tftp would load and run. no loader(8) etc.

The kernel build process for arm and mips create such a kernel as one of
the standard outputs from buildkernel.  That doesn't appear to be the
case for x86 kernels, but you could use sys/conf/makefile.arm as a
guide.

Basically what needs doing is to link the kernel with a modified
ldscript that doesn't add space for the program headers, and then run
the output of that link through "objcopy -S -O binary" to create a
kernel.bin file.  That file can be directly loaded to the address it was
linked for, and a jump to the load address launches the kernel.

Whether the kernel runs properly when launched that way is a different
question.  An arm kernel will run that way because we haven't had the
luxury of loader(8) in the arm world until recently.  The x86 kernel may
expect values in the environment that the loader obtained from the bios.
Without a loader you may need to modify the kernel to get that
information in some other way early in startup.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1361637752.1185.99.camel>