dornerworks / sel4-armv8-vmm-manifest

A manifest that allows one to build virtualized seL4 for zcu102 and i.MX8
Other
7 stars 2 forks source link

vm fault on data at XXX on sel4-armv8-vmm start #3

Closed lydmcu closed 4 years ago

lydmcu commented 4 years ago

hi, I am a newer to seL4 vmm. I compile zynqmp sel4-armv8-vmm. But I execute in my environment, I meet below problem:

>bootelf 0x10000000

Starting application at 0x10000000 ... ELF-loader started on CPU: ARM Ltd. Cortex-A53 r0p4 paddr=[10000000..1105ffff] ELF-loading image 'kernel' paddr=[0..233fff] vaddr=[ff8000000000..ff8000233fff] virt_entry=ff8000000000 ELF-loading image 'sel4arm-vmm' paddr=[234000..447cfff] vaddr=[400000..4648fff] virt_entry=410930 Enabling hypervisor MMU and paging Jumping to kernel-image entry point...

Warning: gpt_cnt_tval 33333000, expected 100000000 Bootstrapping kernel SMMU ID0: 0x7c013e30 SMMU ID1: 0x30000010 SMMU ID2: 0x5555 SMMU ID3: 0x0 SMMU ID4: 0x0 SMMU ID5: 0x0 SMMU ID6: 0x0 SMMU ID7: 0x21 Total 16 IOASID set up Booting all finished, dropped to user space

CPIO: 4 files found. 0) linux- 0x447ae8, 16044544 bytes 1) linux-1-dtb 0x1394d64, 4658 bytes 2) linux-2-dtb 0x1396014, 4021 bytes 3) communication-server 0x1397050, 504344 bytes

Loading Linux: 'linux-1' dtb: 'linux-1-dtb' map_device vm_addr=0xf9010000, size=0x1000, vm_v=0x4544ec8, vmm_v=0x4547d10, num_page=0x1, vka=0x4547cb0 Caught cap fault in send phase at address 0x0 while trying to handle: vm fault on data at address 0x1004e004 with status 0x93c88061 in thread 0xff807bfc6200 "rootserver" at address 0x42dc08 With stack:

---------seL4 kernel had been started, but when map gic, get the address can't be access, can you give me some advice how to fix the problem.
                                                                  thank you very much.  
chengshuyi commented 4 years ago

It's a alignment fault,

For 0x93c88061, the high six bit to show that is a data abort. The low six bit to show that is a Alignment fault.

Alignment fault is just like to store 64 bit number to memory which is splited into two 64bit memory.For example

memory address: 0x00000000-0x00000008 0x00000008-0x00000010

The 64bit number is 0x0004000000000001

write 0x00040000 into 0x00000004-0x00000008, and write 0x00000001 into 0x000000008 - 0x0000000c which number are splited.

lydmcu commented 4 years ago

Thank you very much!