• 只要等一等就能多“等”出8600万美元! 2019-01-23
  • 长颈鹿在中国高纬度地区成功繁育 小鹿刚出生一米八 2019-01-23
  • 18100573浙江11选5体彩:聊聊Linux用户态驱动设计

    3d开奖结果走势图连线 www.fwrl.net

    这也是为什么众神会难以战胜,大家都是同级别的强者,但是众神的小宇宙却高级很多,所以往往能轻而易举的灭杀同级别的圣斗士。

    电脑上怎么赚点小钱

    看到她身上魂环闪亮,唐三顿时吃了一惊。要知道。一旦被蓝银草上附带毒素麻痹之后,是无法继续调动魂力地,这也是为什么说蓝银草现在的控制能力已经很强的重要原因,而眼前孟依然既然能够催动两个魂环,那么,她就一定没有中毒。
    比克不愧是龙珠里面有着让魔人布欧都垂涎不已要吸收他作为战斗的大脑的人,智慧十分的厉害。

    他之所以这么做,其实是因为昨天晚上的那个噩梦,因此他想把气氛搞得活跃一点,这样自己一天就能够保持一个好心情。

    聊聊Linux用户态驱动设计


    序言

    设备驱动可以运行在内核态,也可以运行在用户态,用户态驱动的利弊网上有很多的讨论,而且有些还上升到政治性上,这里不再多做讨论。不管用户态驱动还是内核态驱动,他们都有各自的缺点。内核态驱动的问题是:系统调用开销大;学习曲线陡峭;接口稳定性差;调试困难;bug致命;编程语言选择受限;而用户态驱动面临的挑战是:如何中断处理;如何DMA;如何管理设备的依赖关系;无法使用内核服务等。对此,《User-Space Device Drivers in Linux: A First Look》?一文有较详细描述。

    可能是为了性能优化,或者为了故障隔离,或者为了逃避开源许可证的约束,不管是基于何种目的,linux已有多种用户态驱动的实现,如UIO,VFIO、USB用户态驱动等。它们在处理中断、DMA、设备依赖管理等方面的设计方案和实现细节上各有千秋,这是《User-Space Device Drivers in Linux: A First Look》 没有提到的,也是本文的重点。

    UIO

    ?

    UIO 框架导出sysfs和/dev/uioX 2套用户态接口,用户对设备节点/dev/uioX进行设备控制,mmap()接口用于映射设备寄存器空间,write()接口用于控制中断关闭/打开,read()接口用于等待一个设备中断。

    因为对于设备中断的应答必须在内核空间进行,所以在内核空间有一小部分代码用来应答中断和禁止中断,其余的工作全部留给用户空间处理。如果用户空间要等待一个设备中断,它只需要简单的阻塞在对 /dev/uioX的read()操作上。 当设备产生中断时,read()操作立即返回。UIO 也实现了poll()系统调用,你可以使用 select()来等待中断的发生。select()有一个超时参数可以用来实现有限时间内等待中断。

    UIO的几个特点:

    • 一个UIO设备最多支持5个mem和portio空间mmap映射。?
    • UIO设备的中断用户态通信机制基于wait_queue实现。
    • 一个UIO设备只支持一个中断号注册,支持中断共享。

    总的来说,UIO框架适用于简单设备的驱动,因为它不支持DMA,不能支持多个中断线,缺乏逻辑设备抽象能力。

    VFIO

    ?

    ?上文提到,UIO不支持DMA,所以通过DMA传输大流量数据的IO设备,如网卡、显卡等设备,无法使用UIO框架,VFIO做为UIO的升级版,主要就是解决了这个问题。通过用户态配置IOMMU接口,可以将DMA地址空间映射限制在进程虚拟空间中。这对高性能驱动和虚拟化场景device passthrough尤其重要。

    在VFIO框架中,有几个核心概念或对象:IOMMU、/dev/vfio、container、iommu_group。

    • IOMMU是一个硬件单元,它可以把设备的IO地址映射成虚拟地址,为设备提供页表映射,设备通过IOMMU将数据直接DMA写到用户空间。之所以不共用MMU单元,是为了保证和进程的页表相互独立,防止设备访问进程的任意地址空间。所以VFIO的IOMMU功能保障了安全的非特权级别的用户态设备驱动机制。
    • ?/dev/vfio是一个设备文件,作为一个IOMMU设备的用户态呈现。
    • container是内核对象,表示一个IOMMU设备,是一个IOMMU设备的内核态呈现。所以在VFIO中,container是IOMMU操作的最小对象。
    • 在虚拟化场景下,一个物理网卡可能要虚拟成几个虚拟网卡,或者说虚拟功能设备(VF),这几个VF共用一个IOMMU,所以VFIO模型增加一个iommu_group的概念,用来表示共享同一个IOMMU的一组device。

    VFIO的几个特点:

    • VFIO设备支持多中断号注册。
    • 设备的中断用户态通信机制基于eventfd/irqfd实现。用户通过/dev/vfio设备select/poll/epoll,从而实现中断从内核态到用户态的异步事件通知。
    • 支持对物理设备进行逻辑抽象。
    • 仅支持pci intx中断共享,其他类型中断不支持共享。
    • VFIO仅支持特定IOMMU设备,如x86与PowerPC平台的PCI设备和ARM平台的platform设备。

    USB用户态驱动

    usbfs(USB file system)提供了一些在用户空间下操作USB设备的函数接口和数据结构, 在开发用户态驱动时, 可以直接利用这些函数接口来实现对 USB 设备的控制和数据传输。
    libusb对usb file system提供的函数接口和数据结构进行了封装, 可以有效减少程序中函数和数据结构使用不当造成的错误。Libusb 对 USB 设备的访问提供了两种机制, 同步访问和异步访问。
    khubd是内核后台线程,用来管理监视USB HUB的状态, 一旦发生热插拔就会唤醒这个线程, 进而添加或者移除设备,并发送netlink消息传递给用户态空间。

    USB 用户态驱动框架的几个特点:

    • 设备的中断用户态通信机制基于netlink实现。
    • USB设备以usbdevfs (后改名为usbfs)文件系统的形式(如/proc/bus/usb/BBB/DDD)对用户态呈现。
    • 对usb的所有访问通过usbfs?ioctl实现,如control transfer, bulk transfer, reset等。
    • 仅支持USB设备

    参考资料

    Linux Kernel v4.4

    User-Space Device Drivers in Linux: A First Look

    User-Mode Driver Framework

    VFIO Introduction

    Linux iommu和vfio概念空间解构

    当前文章://www.fwrl.net/news_47900.html

    发布时间:2019-01-24 06:35:40

    有没有不交押金的兼职 北京兼职工作 游戏代玩日赚 问道如何获得金钱 大学生兼职赚钱方法 靠一台电脑如何赚钱 玩什么手机游戏赚钱软件 投资来年小本挣钱好项目

    编辑:顺纯

      

    Comments are closed.

  • 只要等一等就能多“等”出8600万美元! 2019-01-23
  • 长颈鹿在中国高纬度地区成功繁育 小鹿刚出生一米八 2019-01-23