我正在开发运行Linux 2.6.37的ARM设备.我试图尽可能快地切换IO引脚.我制作了一个小内核模块和一个用户空间应用程序.我尝试了两件事:
ioremap.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) 我有一个自定义硬件设备发送视频流.
如何使这个流可用于QuickTime应用程序?
长话:在Windows上,我创建了一个DirectShow过滤器,因此任何与DirectShow兼容的应用程序都可以从我的设备流式传输.我想在Mac OS X上做同样的事情.我想QuickTime是要走的路,但我无法在苹果开发者网站上找到准确的答案.
我已经使用InstallJammer一段时间了,但它的开发现已停止.有谁知道它的好继承者?