加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 如何获得Linux角色设备的结构设备

发布时间:2020-12-13 22:57:07 所属栏目:Linux 来源:网络整理
导读:我有一个实现字符设备驱动程序的 Linux内核模块.我已经阅读了 Linux Device Drivers 并阅读了几个教程.此时,我有一个简单的模块,提供打开,发布和写入文件操作. 我正在尝试使用通用DMA层来创建流式DMA映射.我对LDD的以下摘录感到困惑: Many of the functions
我有一个实现字符设备驱动程序的 Linux内核模块.我已经阅读了 Linux Device Drivers并阅读了几个教程.此时,我有一个简单的模块,提供打开,发布和写入文件操作.

我正在尝试使用通用DMA层来创建流式DMA映射.我对LDD的以下摘录感到困惑:

Many of the functions below require a struct device. This structure
is the low-level representation of a device within the Linux device
model. It is not something that drivers often have to work with
directly,but you do need ot when using the generic DMA layer.
Usually,you can find this structure buried inside the bus specific
that describes your device. For example,it can be found as the dev
field in struct pci_device or struct usb_device.

我进一步阅读了Linux设备模型,并遇到了以下情况:

At the lowest level,every device in a Linux system is represented by
an instance of struct device.

如何为我的角色设备获取结构设备?是否有一个在幕后为我创建,或者我是否需要创建它?

我尝试使用class_create()手动创建一个类,然后使用它创建一个带有device_create()的设备,但是当我使用该设备设置DMA映射时,我想我只是得到了一个伪造的地址.这是正确的方法吗?

有关我的平台的更多信息,我正在研究Altera SoCFPGA平台(ARM),因此我的设备不是真正的硬件设备,如USB或PCI设备,而是在FPGA中实现的逻辑.

我在Chapter 14 of LDD发现了很多我认为可能相关的信息(公共汽车,设备,司机等),但我不确定何时或如何使用它.对我来说,似乎该章正在讨论所有设备和驱动程序使用的大量数据结构,但我很困惑,因为我没有必要使用它.

解决方法

我最终创建了一个平台驱动程序和平台设备.平台设备结构具有与平台总线相关联的自己的结构设备,这是一种“伪总线”,专为此类设计而设计.官方 documentation平台驱动程序在这里很有帮助.

最后,我的模块最终实现了平台驱动程序和字符设备驱动程序.给我带来最多麻烦的部分是创建一个平台设备并将其与我的平台驱动程序相关联.我首先使用platform_device_alloc和platform_device_register手动创建设备(在模块安装时).一旦我完成这项工作,我最终删除了手动设备创建,而是依靠设备树条目来创建我的设备.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读