xenomai驱动开发-RTDM设备驱动-PCI驱动分析

设备驱动程序和实时驱动程序模型

• RTDM: unified interface for users and developers of RT drivers
• Adopted as the Xenomai driver programming interface
• Also used by the Real Time Application Interface (RTAI)
• Politecnico de Milano, Italy
• RTDM devices are found under /dev/rtdm
• Register IRQ handler functions
• Register devices (open / close / read / write / ioctl / select etc.)

典型用例–PCI设备

获取PCI设备的所有权(按供应商id/设备id对)

点击查看代码
pci_enable_device( pci_dev *dev )
pci_request_regions( pci_dev *dev, const char *res_name )
pci_resource_start( pci_dev *dev, int bar ) // base address register
pci_ioremap_bar( pci_dev *dev, int bar )

设置中断回调设置中断回调

点击查看代码
rtdm_irq_request( …. dev->irq, rtdm_irq_handler_t handler …. )

注册RTDM设备驱动

点击查看代码
fpga_class = class_create( THIS_MODULE, “fpga” )
rtdm_drv_set_sysclass( &fpga_driver, fpga_class )
rtdm_dev_register( &fpga_device )

• The RTDM device structure references the driver structure:

点击查看代码
struct rtdm_device fpga_device = {
.driver = &fpga_driver
.label = “fpga/control”
}

image

# Create a POSIX-Compatible Clock

Populate xnclock struct, including operations for:

read_raw (hardware ticks) and read_monotonic (nanoseconds)
set_time (given current time in nanoseconds)
ns_to_ticks, ticks_to_ns, and ticks_to_ns_rounded
program_local_shot, program_remote_shot (to set interrupt time)

Call xnclock_tick(struct xnclock *clock) from interrupt handler

Register with cobalt_clock_register(struct xnclock *clock, …. )

Returns POSIX clockid_t
Use clockid_t for timer_create, timer_settime, clock_nanosleep, …

posted @   相对维度  阅读(897)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示