kyowill wrote:
I'm doing some work on JOS. The kernel base address is 0xF0000000 in JOS.
Which JOS? I recall at least three OSes by that name, and odds are the one you mean isn't any of those three. It even appears to be used as a generic name for the student OS projects in the
MIT Open Courseware Operating System Engineering course. You may need to post a link to the specific one you mean. Here are a few I found just on a quick DDG search:
Java Operating SystemJamesxX's JOSLeJOS LEGO Minstorms OSJeremy's OS for ArduinoJose's Operating SystemI am pretty sure that there was a mainframe OS called JOS back in the day, as well.
kyowill wrote:
I'm wondering what determine the KERNBASE value.
The whim of the primary developers, really.
Now, there are often good reasons for choosing a specific kernel base - for example, for a
Higher Half Kernel on a 32-bit platform, it is sometimes useful to put it at 0x10000000 - giving the kernel literally half of the address space - for a number of reasons (e.g., it ensures that the OS has plenty of room; it makes the user and kernel space sizes equal; it makes it easy to find it without a separate constant; it is easy to tell if a given address is in the kernel space or user space by checking the high bit - not that it comes up a lot, but still; etc.). However, different OSes have different purposes, and OS devs will have different priorities. What might seem like a good reason in one design for one group of developers may not make sense for something and someone else.
Unless it is explained in the documentation and/or code comments somewhere, you'd need to consult with whoever designed the kernel's memory layout to get the answer for a specific OS.
As for why it is causing problems, first off, how, when (e.g., at compile time, at link time, at run time, etc), and why are you trying to change it, and what actually happens when you do? If you could post any error messages or (if necessary) screenshots of the results, it might help a great deal.