what linear address is the virtual address 0xc000 0000 respondable to ? the highest 10 bits 0x300 is pde , which means the 0x300th entry of the page dir. As I know ,at boot stage , that pde has not been ever filles . then how does the kernel code been addressed? 2013/3/1 Prabhu nath <gprabhunath@xxxxxxxxx>: > In principle, the linker will associate the kernel code/data to the Kernel > virtual address space i.e. between 0xC000_0000 to 0xFFFF_FFFF and > the same linker will associate the Application's code/data to the user > virtual address space i.e. between 0x0000_0000 to 0xBFFF_FFFF. > > Linker itself cannot distinguish between the kernel code/data and user > code/data but it is the linker script that will guide the linker to > associate the code/data to the respective addresses. > > What you are seeing is the linker script provided to the linker with -T > option when building the kernel. > > To build the user application the linker uses its default linker script > which you get it by executing > $ ld --verbose. > > To compare between the two just juxtapose the readelf output of both kernel > executable (vmlinux) and any user application executable (a.out) > > $ readelf -a vmlinux > $ readelf -a a.out > > Just inspect the section header and program header of both the outputs you > will get the difference. > > Regards, > Prabhu > > > > On Fri, Mar 1, 2013 at 11:07 AM, Arun KS <getarunks@xxxxxxxxx> wrote: >> >> Hi Horseriver, >> >> On Sun, Feb 24, 2013 at 7:26 AM, horseriver <horserivers@xxxxxxxxx> wrote: >> > On Sun, Feb 24, 2013 at 04:00:37PM +0700, Mulyadi Santosa wrote: >> >> On Sat, Feb 23, 2013 at 6:45 AM, horseriver <horserivers@xxxxxxxxx> >> >> wrote: >> >> > hi: >> >> > >> >> > I have built vmlinux at the top dir of kernel source ,then I use >> >> > objdump to look into >> >> > its section information.I find the statup_32 which is the start >> >> > routine of kernel , >> >> > locats at 0xc0100000. I know the 0x100000 is the defined address >> >> > for locating >> >> > protect-mode code .But which I can not understand is the 0xc prefix >> >> > .where does it come from? >> >> >> >> If my guess is right, that's because kernel mode code start at >> >> 0xc000000 a.k.a a bit above 3 GiB on x86 32 bit machine >> > >> > I have find this answer . >> > It is defined in lds script file . >> > >> > here is the code : >> > SECTIONS >> > { >> > . = 0xC0000000 + 0x100000; >> > /* read-only */ >> > _text = .; /* Text and read-only data */ >> > >> > >> > why use 0xC0000000 as its start ? why not just use 0x100000 only ? >> > if use 0xC0000000,every linked symbole will be prefixed by 0xc , what >> > is the purpose ? >> >> Usually, user kernel space split is 3G:1G. >> ie 1G for kernel space. And this starts from 0xC000_0000 till 0xFFFF_FFFF >> >> All the address below 0xC000_0000(ie 3G from 0x0 to 0xBFFF_FFFF) is >> used for user space. >> >> Thanks, >> Arun >> > >> > thanks! >> > >> > >> > >> > -- >> >> regards, >> >> >> >> Mulyadi Santosa >> >> Freelance Linux trainer and consultant >> >> >> >> blog: the-hydra.blogspot.com >> >> training: mulyaditraining.blogspot.com >> > >> > _______________________________________________ >> > Kernelnewbies mailing list >> > Kernelnewbies@xxxxxxxxxxxxxxxxx >> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@xxxxxxxxxxxxxxxxx >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies