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.

 [sathya] I am running on Shakti core configured on FPGA. Shakti is an
internally developed core based on RV64. Currently, It has memory
addressing from
0x80000000 to 0x8fffffff. It has SV39 mmu.


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.

[sathya] Thanks a lot. I tried your changes on ours. There seems to be some
problem with page table mappings.



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.

[sathya] I did this. I hard-coded the PHY address LOAD to 0x88000000. We
are stuck after kernel mapping. The address ranges looked good. Can you
please tell, what is your page table configuration (2 level or 3 level) ?



regards,

sathya





On Thu, Aug 9, 2018 at 6:34 PM, Chris Guikema <[email protected]
> wrote:

> 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
>
>
>
>



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

Reply via email to