Date: Thu, 26 Oct 2006 22:52:30 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Ruslan Ermilov <ru@FreeBSD.org> Cc: freebsd-stable@FreeBSD.org, Stefan Bethke <stb@lassitu.de>, John Baldwin <jhb@FreeBSD.org>, Bruce Evans <bde@FreeBSD.org> Subject: Re: Still possible to directly boot without loader? Message-ID: <20061026222234.P2553@epsplex.bde.org> In-Reply-To: <20061026113922.GA932@rambler-co.ru> References: <3A8131D4-881E-4873-A682-543A1A88C063@lassitu.de> <20060911180915.GB33304@lor.one-eyed-alien.net> <20061026113922.GA932@rambler-co.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 26 Oct 2006, Ruslan Ermilov wrote: > On Mon, Sep 11, 2006 at 01:09:15PM -0500, Brooks Davis wrote: >> On Sun, Sep 10, 2006 at 09:10:26PM +0200, Stefan Bethke wrote: >>> I just tried to load my standard kernel from the boot blocks (instead >>> of using loader(8)), but I either get a hang before the kernel prints >>> anything, or a BTX halted. Is this still supposed to work in 6- >>> stable, or has it finally disappeared? >> >> You may be able to get this to work, but it is unsupported. I normally use it (with a different 1-stage boot loader) for kernels between ~4.10 and -current. I only boot RELENG_4 kernels for running benchmarks and don't bother applying my old fix for missing static symbols there. See another PR for the problem and patch. In newer kernels and userlands, starting some time in 5.0-CURRENT, sysutil programs use sysctls for live kernels so they aren't affected by missing static symbols. > I've been investigating this today. Here's what I've found: > > 1) You need hints statically compiled into your kernel. > (This has been a long time requirement.) Even though I normally use it, I once got very confused by this. Everything except GENERIC booted right (with boot loaders missing the bug in (3)). This is because GENERIC has had hints commented out since rev.1.272, and GENERIC also has no acpi (it's not very GENERIC). When there are no hints, except on very old systems, most things except isa devices work, but at least without acpi, console drivers on i386's are on isa so it is hard to see if things work. Hints are probably also needed for ata. I think a diskless machine with no consoles and pci NICs would just work. > 2) You can only do it on i386, because boot2 only knows > about ELF32, so attempts to load ELF64 amd64 kernels > will fail. (loader(8) knows about both ELF32/64.) I haven't got around to fixing this. > 3) It's currently broken even on i386; backing out > rev. 1.71 of boot2.c by jhb@ fixes this for me. > > : revision 1.71 > : date: 2004/09/18 02:07:00; author: jhb; state: Exp; lines: +3 -3 > : A long, long time ago in a CVS branch far away (specifically, HEAD prior > : to 4.0 and RELENG_3), the BTX mini-kernel used paging rather than flat > : mode and clients were limited to a virtual address space of 16 megabytes. > : Because of this limitation, boot2 silently masked all physical addresses > : in any binaries it loaded so that they were always loaded into the first > : 16 Meg. Since BTX no longer has this limitation (and hasn't for a long > : time), remove the masking from boot2. This allows boot2 to load kernels > : larger than about 12 to 14 meg (12 for non-PAE, 14 for PAE). > : > : Submitted by: Sergey Lyubka devnull at uptsoft dot com > : MFC after: 1 month The kernel is linked at 0xc0000000 but loade din low memory, so the high bits must be masked off like they used to be for the kernel to boot at all. This has nothing to do with paging AFAIK. Rev.1.71 makes no sense, since BTX isn't large, and large kernels are more unbootable than before with 1.71. There is an another PR about this. 4) Another rev. broke support for booting with -c and -d to save 4 bytes. -c is useful for RELENG_6 and -d is essential for debugging. If you always use loader(8) then you would only notice this if you try to set these flags in boot2. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061026222234.P2553>