Porting to an x86 with no BIOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Folk,

I'm in the midst of porting Linux 2.6 to a fairly old hardware
platform we have at my place of business. I won't get into all the
reasons why we're making the port at this time, except that it seems
to make sense. :-)

For reasons lost in the misty depths of time, these embedded systems
are based on an x86-alike processor (STPC Consumer II), but don't use
a BIOS. We have our own little bootloader that does a bare minimum of
system setup and then jumps to an application, either loaded from
Flash or brought into memory via a serial-port download.

Anyway: for the most part, my port of the Kernel appears to function
-- boots, DHCPs, NFS-mounts a root, gives me a shell.

But I'll reach a certain point -- usually fairly early -- when I will
get a kernel panic. The stack trace of the panic happens in different
places depending on exactly what I've done to trigger it, but it
always includes:

 [<c0125469>] cache_init_objs+0x38/0x119
 [<c0125685>] cache_grow+0xd7/0x13b
 [<c0125b26>] cache_alloc_refill+0x1aa/0x1de
 [<c0125e9b>] kmem_cache_alloc+0x44/0x5e

I'm setting up memory by hand (since I don't have a real E820 map to
go by)  in setup_arch_post.h, snippet posted below. I'm 99.9% positive
about the memory map (which, despite the lack of BIOS, follows a
typical x86 mapping - RAM to 64k, video and stuff from 0xA0000 to
0x100000, then RAM again to 0x02000000 -- so, 31K extended memory).

At this point, I'm looking for any ideas anyone can give me as to why
things are crapping out the way they are. If this is really not the
right forum for this, I would appreciate a pointer to someplace more
appropriate.

Thanks in advance,
Mike Shappe
Image Sensing Systems

-------- snippet from setup_arch_post.h

static char * __init machine_specific_memory_setup(void)
{
	char *who;

	dbgbyte(0x1F);

	who = "Cyclops";
	e820.nr_map = 0;
	add_memory_region(0, LOWMEMSIZE(), E820_RAM);
	add_memory_region(HIGH_MEMORY, 31 * 1024 * 1024, E820_RAM);
	return who;
}

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux