小编Jul*_*ien的帖子

mmap比ioremap慢

我正在开发运行Linux 2.6.37的ARM设备.我试图尽可能快地切换IO引脚.我制作了一个小内核模块和一个用户空间应用程序.我尝试了两件事:

  1. 使用直接从内核空间操作GPIO控制寄存器ioremap.
  2. mmap() GPIO控制寄存器无需缓存并从用户空间使用它们.

两种方法都有效,但第二种方法比第一种方法慢3倍(在示波器上观察).我想我禁用了所有缓存机制.

当然,我想要充分利用这两个领域:从内核空间的速度来看,用户空间的灵活性和易开发性.

有谁知道为什么mmap()可能比这慢ioremap()

这是我的代码:

内核模块代码

static int ti81xx_usmap_mmap(struct file* pFile, struct vm_area_struct* pVma)
{
  pVma->vm_flags |= VM_RESERVED;
  pVma->vm_page_prot = pgprot_noncached(pVma->vm_page_prot);

  if (io_remap_pfn_range(pVma, pVma->vm_start, pVma->vm_pgoff,
                          pVma->vm_end - pVma->vm_start, pVma->vm_page_prot))
     return -EAGAIN;

  pVma->vm_ops = &ti81xx_usmap_vm_ops;
  return 0;
}

static void ti81xx_usmap_test_gpio(void)
{
  u32* pGpIoRegisters = ioremap_nocache(TI81XX_GPIO0_BASE, 0x400);
  const u32 pin = 1 << 24;
  int i;

  /* I should use IO read/write functions instead of pointer deferencing, 
   * but portability isn't …
Run Code Online (Sandbox Code Playgroud)

linux kernel mmap gpio

12
推荐指数
1
解决办法
6004
查看次数

为自定义视频输入硬件添加对QuickTime的支持

我有一个自定义硬件设备发送视频流.

如何使这个流可用于QuickTime应用程序?

长话:在Windows上,我创建了一个DirectShow过滤器,因此任何与DirectShow兼容的应用程序都可以从我的设备流式传输.我想在Mac OS X上做同样的事情.我想QuickTime是要走的路,但我无法在苹果开发者网站上找到准确的答案.

video quicktime stream

5
推荐指数
1
解决办法
1063
查看次数

InstallJammer的继任者?

我已经使用InstallJammer一段时间了,但它的开发现已停止.有谁知道它的好继承者?

deployment installer multiplatform

5
推荐指数
1
解决办法
2233
查看次数

标签 统计

deployment ×1

gpio ×1

installer ×1

kernel ×1

linux ×1

mmap ×1

multiplatform ×1

quicktime ×1

stream ×1

video ×1