Linux API/linux
Unhandled fault: external abort on non-linefetch
구차니
2021. 5. 25. 15:00
mmap()으로 특정 메모리 영역을 접근하는데
이상한 순서로 에러 메시지가 뒤죽박죽 되어 나와서 겨우겨우 복구(?) 해봤더니 더 멘붕오는 듯한 용어만 잔뜩 -_-
Unhandled fault: external abort on non-linefetch (0x1818) at 0x70000000 pgd = cdbbc000 Error: [70000000] *pgd=0dbc3831, *pte=70000743, *ppte=70000c33 |
ppte는 약어를 못 찾음 (느낌은 pte에 대한 pointer 아닐까 싶긴 하지만..)
PGD : Page Global Directory PTE : Page Table Entries |
[링크 : https://www.kernel.org/doc/gorman/html/understand/understand006.html]
(0x1818) 음.. 딱 적절한 나의 마음을 나타내는 값은 ifsr 레지스터 라는데
The values in parenthesis are the ifsr (instruction fault status) register |
[링크 : https://stackoverflow.com/questions/15889483/what-do-these-kernel-panic-errors-mean]
레지스터값의 의미를 요약하면 다음과 같은데
AXI Slave error로 인해서 abort가 발생, write access가 abort를 발생 D1 domain? precise external abort, nontranslation |
도대체 무슨 말이야!!!
SD Indicates whether an AXI Decode or Slave error caused an abort. This bit is only valid for external aborts. For all other aborts this bit Should Be Zero: 0 = AXI Decode error caused the abort, reset value 1 = AXI Slave error caused the abort. RW Indicates whether a read or write access caused an abort: 0 = read access caused the abort, reset value 1 = write access caused the abort. Domain Indicates which one of the 16 domains, D15-D0, is accessed when a data fault occurs. This field takes values 0-15. Status Indicates the type of exception generated. To determine the data fault, bits [12] and [10] must be used in conjunction with bits [3:0]. The following encodings are in priority order, 1 is the highest: 0b000001 alignment fault 0b000100 instruction cache maintenance fault 0bx01100 L1 translation, precise external abort 0bx01110 L2 translation, precise external abort 0b011100 L1 translation precise parity error 0b011110 L2 translation precise parity error 0b000101 translation fault, section 0b000111 translation fault, page 0b000011 access flag fault, section 0b000110 access flag fault, page 0b001001 domain fault, section 0b001011 domain fault, page 0b001101 permission fault, section 0b001111 permission fault, page 0bx01000 precise external abort, nontranslation 0bx10110 imprecise external abort 0b011000 imprecise error, parity or ECC 0b000010 debug event. |
[링크 : https://developer.arm.com/documentation/.../c5--data-fault-status-register]
[링크 : https://github.com/brgl/busybox/blob/master/miscutils/devmem.c]