This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux:Linux/OMAP3352:未处理的故障:在0xb6f5c000处的非线性提取(0x1018)上外部中止

Guru**** 2478765 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/661041/linux-linux-omap3352-unhandled-fault-external-abort-on-non-linefetch-0x1018-at-0xb6f5c000

工具/软件:Linux

您好,

我正在使用mmap()映射OMAP_I2C1_BASE (0x4802A000),它是I2C1寄存器( 运行Linux的OMAP3352)的起点。如果我不访问任何寄存器,mmap工作正常。 但是当我尝试打印寄存器值时,我得到了

 未处理的错误:0xb6f5c000处的非线性提取(0x1018)上的外部异常中止

我看到过一些有相同问题的帖子,但我没有看到任何回复或解决方案。 如有任何帮助和建议,我们将不胜感激。

 

代码如下:

   fd = open ("/dev/mem",O_RDWR);
   IF (FD ==-1)
   {
      printf("open()失败!\n");
      返回-1;
   }

   mmap_addr = mmap (NULL,mem_size,PROT_READ|PROT_WRITE,MAP_SHARED,FD,mem_start);
   如果(mmap_addr == map_failed){
         printf("gpio mmap()失败!\n");
         出口(1);
   }

   PTR =(无符号int *)(mmap_addr);
   printf(" 0x%08x映射到%p (%p)\n",OMAP_I2C1_BASE,mmap_addr,PTR);
    
   PTR+=4;//从SCR寄存器开始打印寄存器值
   printf ("%p 0x08x\n",PTR,*PTR);PTR ++;    
   printf ("%p 0x08x\n",PTR,*PTR);PTR ++;   

   ...

 我尝试了类似的代码来映射GPIO寄存器,它工作正常,我可以对寄存器进行读/写操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jian:

    要读取/写入I2C1寄存器,您应该在设备PRCM寄存器中启用I2C1时钟。 有关更多信息,请参阅设备TRM。

    此致,
    Pavel
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Pavel

    感谢您的回复。 我已解决问题。 这对我很有帮助。

    此致
    Jian