Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I am running ltib Linux on P1022RDK (P1022 Core) platform. I have 512 MB = 0x20000000 memory. I want my Linux kernel to use the second half of the board memory (i.e from 256 MB to 512 MB) and want the first half of memory to be reserved for some other purpose.

For this I am building the Linux kernel using ltib, and setting the following kernel configuration. Please suggest if I am doing it the right way.

CONFIG_LOWMEM_SIZE = 0x10000000 # 256 MB 
CONFIG_PHYSICAL_START = 0x10000000 # Starting from 256MB (second half of memory)

On the Uboot I am loading the kernel the following way:

setenv loadaddr 0x11000000 # Kernel base = 0x10000000 + 0x01000000 (offset) 
setenv fdtaddr 0x10c00000 # Kernel base = 0x10000000 + 0x00c00000 (offset) 
bootm $loadaddr - $fdtaddr My kernel Load address is 0x10000000 & kernel entry point is 0x10000000

Using the above configuration/steps my kernel is stuck at the following on Uboot:

Booting kernel from Legacy Image at 11000000 ...

Image Name: Linux-2.6.32.13 
Image Type: PowerPC Linux Kernel Image (gzip compressed) 
Data Size: 3352851 Bytes = 3.2 MB 
Load Address: 10000000 
Entry Point: 10000000 
Verifying Checksum ... OK

Flattened Device Tree blob at 10c00000

Booting using the fdt blob at 0x10c00000 
Uncompressing Kernel Image ... OK

It should uncompress FDT here & continue

Any thoughts?

share|improve this question
add comment

2 Answers

I think you're going to have to do it the other way around, and leave the top 256MB unused. CONFIG_PHYSICAL_START doesn't do what you seem to think it does. It controls where the kernel is loaded, not which physical pages the kernel uses.

share|improve this answer
add comment

To add detail to David Schwartz's answer, by specifying the kernel boot parameter to set the amount and start address used by the kernel, you can do what you want.

For example, add the following command to your kernel boot args: mem=256M@0x80000000

Will indicate the kernel should use 256M starting at 0x80000000, which is what you require.

You should revert the CONFIG settings to their original values, and verify your kernel will boot correctly in its default configuration (with no mem= setting).

You can first try out mem= by specifying mem=256M which will give you a reduced memory area starting at 0, with the top 256M being unused. Once that is seen to work, use the 256M offset as above.

Take care also where in RAM you load the initial compressed image by uBoot, to ensure it does not conflict with the eventual kernel memory area.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.