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/OMAP3530:未处理的故障:在0x400248a4上的非线性蚀刻(0x1018)上的外部中止

Guru**** 2558250 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/624023/linux-omap3530-unhandled-fault-external-abort-on-non-linefetch-0x1018-at-0x400248a4

器件型号:OMAP3530

工具/软件:Linux

您好!

我使用 mmap()来映射 ULPI 寄存器(0x480648A4),这是 ULPI 寄存器(运行 Linux 的 OMAP35xx)的起点。 如果我不访问任何寄存器、mmap 工作正常。 但是、当我尝试访问或打印我得到的寄存器值时
以下总线错误

未处理的故障:在0x400248a4上的非线性获取(0x1018)上的外部中止

注意:只有在没有此 HRT 功能的情况下在 Linux 中启用 HRT (高分辨率计时器)后、此问题才会出现。以下代码工作正常。

更多信息:
此代码在 OMAP 35xx 的 Cortex A8上运行
我正在使用 CodeSourcery c/c++编译器运行 Linux
在用户空间中运行代码时、它会被占用。

源代码:
int writeUlpiMem( tUlpipBus *ulpiMem)

   Int FD、RET;
   void *map_base、*virt_addr;
   unsigned long read_result、writeval;
   off_t 目标;
   target = ulpiMem->target;

   if (((fd = open ("/dev/mem、O_RDWR | O_sync))=-1) fatal;
   //printf ("/dev/mem 已打开。\n");
   fflush (stdout);
   
   /*映射一页*/
   MAP_BASE = mMAP (0、MAP_SIZE、PROT_READ | PROT_WRITE、MAP_SHARED、FD、 Target &~map_mask);
   if (map_base =(void *)-1) fatal;
   printf ("在地址%p.\n"、map_BASE 映射的内存);
   fflush (stdout);
   
   virt_addr = map_BASE +(target & map_mask);
   read_result =*((unsigned long *) virt_addr);
   printf ("地址0x%X (%p)上的值:0x%X\n"、target、virt_addr、read_result);
   fflush (stdout);
   //如果发生 HealthCheck、我们不需要向 ULPI 寄存器写入任何值、我们只需从此处读取并返回。
   if (ulpiMem->HealthCheck)
   {
      if (read_result== USB_port_bad)
      {
         RET = 1;
      }
      其他
      {
         RET = 0;
      }
   
  }
  其他
  {
      writeval = ulpiMem->writeval;
        *((unsigned long *) virt_addr)= writeval;
        read_result =*((unsigned long *) virt_addr);
        printf ("写入0x%X;回读0x%X\n"、writeval、read_result);
      fflush (stdout);
        RET = 0;
   }
   if (munmap (map_BASE、map_size)==1) fatal;
   关闭(FD);
   回程;    


提前感谢。

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

    此致、
    Yordan