首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM内核Oops页面错误代码

ARM内核Oops页面错误代码
EN

Stack Overflow用户
提问于 2012-11-09 04:17:23
回答 2查看 27.6K关注 0票数 4

Oops之后的错误代码会给出有关arm ex中的恐慌的信息。在这种情况下,Oops: 17 [#1] PREEMPT SMP 17给出了什么信息。在x86中它代表-

  • bit 0 == 0: no page found 1: protection fault
  • bit 1 == 0: read access 1: write access
  • bit 2 == 0: kernel-mode access 1: user-mode access
  • bit 3 == 1: use of reserved bit detected
  • bit 4 == 1: fault was an instruction fetch

但我在手臂上找不到任何信息。

谢谢顺蒂

EN

回答 2

Stack Overflow用户

发布于 2012-11-09 07:09:02

上面作为位的描述所打印的是页面错误描述,而不是Oops错误。

有关查找Linux崩溃分析的更多信息,请参见Linux的oops追踪

下面是您的Oops: 17 [#1] PREEMPT SMP arch/arm/内核/traps.c

代码语言:javascript
复制
    #define S_PREEMPT " PREEMPT"
    ...
    #define S_SMP " SMP"
    ...
    printk(KERN_EMERG "Internal error: %s: %x [#%d]" S_PREEMPT S_SMP S_ISA "\n", str, err, ++die_counter);

页面故障不需要使内核崩溃,而且并非所有内核崩溃都是页面错误。因此,很有可能Oops: 17与页面错误完全无关。(另外,我的猜测是,这是关于日程安排/只是听起来我很熟悉。)

票数 2
EN

Stack Overflow用户

发布于 2016-05-24 05:28:22

看起来您在询问ARM故障状态寄存器(FSR)位。我查找了内核代码(arch/arm/mm/fault.c),发现这实际上是作为Oops代码的一个参数传递的:

代码语言:javascript
复制
    static void
    __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
              struct pt_regs *regs)
    {
    [...]
        pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
             (addr < PAGE_SIZE) ? "NULL pointer dereference" :
             "paging request", addr);

        show_pte(mm, addr);
        die("Oops", regs, **fsr**);
   [...]
   }

所以,无论如何,我追踪到了ARM上的FSR寄存器(v4和以上?)嗯,嗯:

来源:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0438d/BABFFDFD.html

代码语言:javascript
复制
...
    [3:0]   FS[3:0] 
    Fault Status bits. This field indicates the type of exception generated. Any encoding not listed is reserved:
    b00001
       Alignment fault.
    b00100
       Instruction cache maintenance fault[a].
    b01100
       Synchronous external abort on translation table walk, 1st level.
    b01110
       Synchronous external abort on translation table walk, 2nd level.
    b11100
       Synchronous parity error on translation table walk, 1st level.
    b11110
       Synchronous parity error on translation table walk, 2nd level.
    b00101
       Translation fault, 1st level.
    b00111
       Translation fault, 2nd level.
    b00011
       Access flag fault, 1st level.
    b00110
       Access flag fault, 2nd level.
    b01001
       Domain fault, 1st level.
    b01011
       Domain fault, 2nd level.
    b01101
       Permission fault, 1st level.
    b01111
       Permission fault, 2nd level.
    b00010
       Debug event.
    b01000
       Synchronous external abort, non-translation.
    b11001
       Synchronous parity error on memory access.
    b10110
       Asynchronous external abort.
    b11000
       Asynchronous parity error on memory access.

..。

免责声明:我不知道这个信息是否仍然相关;文档声明它是针对ARM皮质A15的,并且页面被标记为已被取代。

也可以看到此页面:ARM926EJ-S故障地址和故障状态寄存器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13302046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档