Sathya,

Which hardware are you trying to run seL4 on? Is it per chance the rocket-chip 
for the zedboard? If so, that device only has 256MB of RAM. So its physical 
memory goes from 0x80000000 -> 0x90000000. By default, the kernel gets mapped 
at a 1GB offset from the physical address base.

This is actual a nice coincidence. DornerWorks recently uploaded a pull request 
that makes seL4 functional on the rocket-chip. Essentially it boils down to 
mapping the kernel window in 2MB blocks instead of 1GB blocks. The commits have 
just been merged into master this morning.

Essentially when you’re initializing the cmake build system, you simply need to 
call –DkernelPlatformSpikeRocketChip=ON in order to let the kernel know to load 
at 0x88000000 instead of 0xc0000000. You’ll also need to update the elf-loader 
to the tip of master, since that also updates the mappings.

Let me know if you have any questions. I’m happy to help.

Chris
From: Devel [mailto:[email protected]] On Behalf Of Sathya Narayanan N
Sent: Thursday, August 9, 2018 8:33 AM
To: [email protected]
Subject: Re: [seL4] Porting SEL4 on RISCV FPGA

CAUTION: This email originated from outside the organization. Do no click links 
or open attachments unless you recognize the sender and know the content is 
safe.
Hi,

I am porting SEL4 on RISCV FPGA. I am stuck midway in the kernel elf loader.

The function stuck is memcpy. I have added prints and I am not progressing 
after the last memcpy call in unpack_elf_to_paddr(). All kinds of input 
appreciated.


Function under review:
static void unpack_elf_to_paddr(void *elf, paddr_t dest_paddr)

        /* Parse size/length headers. */
        dest_vaddr = elf_getProgramHeaderVaddr(elf, i);
        data_size = elf_getProgramHeaderFileSize(elf, i);
        data_offset = elf_getProgramHeaderOffset(elf, i);

        /* Load data into memory. */

        memcpy((char *)dest_vaddr + phys_virt_offset,
               (char *)elf + data_offset, data_size);
printf("loaded data into memory \n");                 -----> Stuck Here !
     }

}

Can anyone give me a clue on whatsoever to check here ? It worked perfectly in 
spike simulation.

RISCV FPGA configuration - It supports IMAFD. It has already booted linux. 
Kernel is loaded at physical address 80 million.


Snap shot

ELF-loader started on
  paddr=[80200000..8060dc17]
elfFile->e_phnum = 1
elfFile->e_phnum = 1
elfFile->e_phnum = 1
elfFile->e_phnum = 1
ELF-loading image 'kernel'
  paddr=[c0000000..c002dfff]
  vaddr=[ffffffff80000000..ffffffff8002dfff]
  virt_entry=ffffffff80000000
elf file is valid
image is aligned
phy range valiidngetting size of image
elfFile->e_phnum = 1
elfFile->e_phnum = 1
memset each segment in the elf file
loading each segment in the elf file 2d018
elfFile->e_phnum = 1
loading data into memory
char *)dest_vaddr + phys_virt_offset = ffffffffc0000000  (char *)elf + 
data_offset, = ffffffff8020a694
----- ?




--
 regards,
Sathya


_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to