ARM LINUX: linker script

Hi All,

I want to compile vanila kernel (2.6.23-14) for ARM920T MCU. It should b a XIP kernel. In menuconfig I have set 0x10020000 physical XIP address. After compiling I see, that my kernel binary is linked to 0xBF02000 address. Auto-generated linker script (arch/arm/kernel/vmlinux.lds) start with these lines:

SECTIONS { . = ((((0xc0000000)) - 16*1048576) + ((0x10020000) & 0x000fffff));

Where are this address calculation from? In memory definition header fil (include/asm-arm/memory.h) I found this:

#define TASK_SIZE UL(0xbf000000) #define TASK_UNMAPPED_BASE UL(0x40000000) #define TASK_SIZE_26 UL(0x04000000) #define PAGE_OFFSET UL(0xc0000000) #define MODULE_END (PAGE_OFFSET) #define MODULE_START (MODULE_END - 16*1048576) #define XIP_VIRT_ADDR(physaddr) (MODULE_START + ((physaddr)

0x000fffff))

How to generate correct linker script for my XIP kernel? Would be correct to change XIP_VIRT_ADDR(physaddr) definition to: #define XIP_VIRT_ADDR(physaddr) (physaddr) ??? How about .data section? Where is it linked to? Maybe there: __data_loc = ALIGN(4); /* location in binary */ . = (0xc0000000) + 0x00008000; .data : AT(__data_loc) { __data_start = .; /* address in memory */

But it is not correct memory address in my system, because it is out o physical boundary. I need some help with this linker script.

Darius.

Reply to
[LT] CodeC
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.