首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux设备驱动程序(一)——设备驱动简介

前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。...简洁的来说设备驱动程序的作用在于提供机制(需要提供什么功能),而不在于提供策略(这些功能怎么使用)。...驱动程序设计要考虑的三个方面: 提供给用户尽可能多的选项 编写驱动程序要占用的时间 尽量保持程序简单避免产生过多的错误 二、内核功能的划分 内核功能可以主要划分为以下五个部分: 进程管理 内核负责创建和销毁进程

1.1K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PCI设备驱动程序「建议收藏」

    当你加载PCI驱动的时候,驱动程序会把系统中已经存在的设备的厂商号和设备号与驱动程序中的对比,如果一致,则会注册PCI总线驱动并进行下一步操作。...下面是我写的一个PCI总线的驱动程序,注意是PCI设备识别时的驱动程序,这里并没有实现具体的功能驱动。...PCI设备的驱动分成两个部分,一部分是总线的,就是PCI设备识别、调用驱动程序probe函数的部分,另一部分就是具体的功能驱动,比如网卡。...\n"); } /* 指明驱动程序适用的PCI设备ID */ static struct pci_device_id mypci_table[] __initdata = { { MY_VENDOR_ID...看到上面Probe 成功,说明系统找到了我的网卡,98000000正是系统PCI总线的物理起始地址。

    2.2K21

    字符设备驱动程序接口

    驱动模块操作命令 # 列出当前内核中已经安装的模块(list module) lsmod # 安装模块(install module) insmod xxx.ko # 打印模块的自带信息(module...返回值:成功返回主设备号, 失败返回一个负值 内核中有一个数组要来存储注册的字符设备驱动,register_chrdev注册的字符设备驱动的信息主要就存在这个数组的相应位置,该数组的下标就是主设备号,...(主次) count: 请求分配的连续设备的数量 name: 设备名称 返回值: 成功返回0, 失败返回负值 alloc_chrdev_region 动态分配主次设备号 /* linux/fs.h */...baseminor: 起始次设备号 count: 请求分配的连续设备的数量 name: 设备名称 返回值: 成功返回0, 失败返回负值 unregister_chrdev_region 注销主次设备号...(主次) count: 请求注册的连续设备的数量 返回值:成功返回0, 失败返回负值 cdev_del 注销字符设备驱动,并释放用cdev_alloc分配的内存 /* linux/cdev.h */ void

    1.4K30

    Linux设备驱动程序(四)——调试技术

    CONFIG_DEBUG_DRIVER 在“Device drivers(设备驱动程序)”菜单中。该选项打开驱动程序核心中的调试信息,它可以帮助跟踪底层支持代码中的问题。...如果读者要针对输入设备编写驱动程序,则可使用该选项。注意该选项会导致的安全问题:它会记录你键入的任何东西包括密码。...6、打印设备编号 有时当从一个驱动程序打印消息时,我们会希望打印与硬件关联的设备编号。...有些设备驱动程序也通过 iproc 导出信息,而我们自己的驱动程序当然也可以这么做。因为 /proc 文件系统是动态的,所以驱动程序模块可以在任何时候添加或删除其中的入口项。...对设备驱动程序来讲,它没有多少价值,这里包含该函数只是出于完整性考虑。

    70941

    Linux设备驱动程序(三)——字符驱动

    例如我们要操作某个设备,首先,我们要知道设备在/dev下的设备文件名。这个设备文件提供主设备号以及次设备号。然后内核通过设备文件提供的主设备找到设备驱动程序(操作设备驱动程序实现)。...最后通过主设备号和次设备构成的设备号找到正确的设备。有了操作的对象(设备)和操作的方法(驱动程序)那就可以完成了我们的要求。 一个驱动程序可以操作多个设备,所以不同的设备可以具有相同的主设备号。...成功调用申请设备编号的函数后,在系统的 /proc/devices下就会包含设备以及设备设备号的信息。...cdev_add 一返回,你的设备就是"活的"并且内核可以调用它的操作,因此,在驱动程序还没有完全准备好处理设备上的操作时,就不能调用 cdev_add。...如果想尝试比较简单的字符驱动实现,可以查看我的另一篇驱动开发之 hello 驱动程序实现的文章: 荔枝派Zero(全志V3S)驱动开发之hello驱动程序

    61641

    linux设备驱动第一篇:设备驱动程序简介

    驱动程序的任务是把这些标准化调用映射到实际硬件的设备特有操作上。 在编写驱动程序时,程序员应该特别注意下面这个概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略。...linux中设备和模块的分类: 字符设备:字符设备是能够像字节流(类似文件)一样被访问的设备,有字符设备驱动程序来实现这种特性。...字符设备驱动程序通常至少要实现open、close、read、write系统调用。...因而,块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符驱动程序相比,块驱动程序具有完全不同的接口。...内核和网络设备驱动程序间的通讯,完全不同于内核和字符以及块驱动程序之间的通讯,内核调用一套和数据包传输相关的函数而不是read,write。

    3.3K100

    Linux设备驱动程序(二)——建立和运行模块

    M= 这个 makefile 在一次典型的建立中要被读 2 次,当从命令行中调用这个 makefile,它注意到 KERNELRELEASE 变量没有设置,它利用这样一个事实来定位内核源码目录,即已安装模块目录中的符号连接指回内核建立树...2、内核的并发 常见引起并发原因: linux 系统中通常正在运行多个并发进程,并且可能有多个进程同时使用我们的驱动程序。...大多数设备能够中断处理器,而中断处理程序异步运行,而且可能在驱动程序正试图处理其他任务时被调用。 linux 可以运行在多处理器上,因此可能同时有多个处理器在使用该进程。...因此模块代码必须一直检查返回值,并且确认要求的操作实际上已经成功。...一个精心设计的驱动程序仍然可以,如同内核空间驱动,允许对设备的并行存取。 如果你必须编写一个封闭源码的驱动,用户空间的选项使你容易避免不明朗的许可的情况和改变的内核接口带来的问题。

    77141

    linux设备驱动程序注冊过程具体解释

    Linux的驱动程序注冊过程,大致分为两个步骤: 模块初始化 驱动程序注冊 以下以内核提供的演示样例代码pci-skeleton.c,具体说明一个pci设备驱动程序的注冊过程。...当一个struct device诞生,总线就会去driver链表找设备相应的驱动程序。假设找到就运行设备驱动程序,否则就等待。反之亦然。...当驱动匹配到了相应的设备之后,就会调用该函数来驱动设备。所以能够说这个函数才是驱动程序真正的入口。 remove:当驱动程序相应的设备被删除之后,使用这个函数来删除驱动程序。...驱动程序的probe函数開始运行了,驱动程序的注冊工作也就大功告成了。 3. 总结 我们来总结一下设备驱动程序初始化的几个步骤: 1....4.假设设备驱动程序匹配成功,则调用驱动程序的probe函数。probe函数的实现,须要依据驱动程序的功能来定,不属于本文的讨论范围。

    2.3K20

    Linux设备驱动程序(五)——并发和竞态

    内核代码是可抢占的;因此,我们的驱动程序代码可能在任何时候丢失对处理器的独占,而拥有处理器的进程可能正在调用我们的驱动程序代码。设备中断是异步事件,也会导致代码的并发执行。...为每个设备使用单独的信号量允许不同设备上的操作可以并行处理,从而可以提高性能。 信号量在使用前必须初始化。...不管 scull_write 是否能够成功完成其他工作,它都必须释放信号量。...循环缓冲区的使用在设备驱动程序中相当普遍。特别是网络适配器,经常使用循环缓冲区和处理器交换数据(数据包)。 2、原子变量 有时,共享的资源可能恰好是一个简单的整数值。...假定我们的驱动程序维护着一个共享变量 n_op,该变量的值表明有多少个设备操作正在并发地执行。通常,即使下面的简单操作也需要锁定: n_op++; 完整的锁机制对一个简单的整数来讲却显得有些浪费。

    35431

    Linux驱动实践:如何编写【 GPIO 】设备驱动程序

    目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...这篇文章,我们就以此为基础,写一个有实际应用功能的驱动程序: 在驱动程序中,初始化 GPIO 设备,自动创建设备节点; 在应用程序中,打开 GPIO 设备,并发送控制指令设置 GPIO 口的状态; 示例程序目标...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。...设备节点 由于在驱动程序的初始化函数中,使用 cdev_add 和 device_create 这两个函数,自动创建设备节点。...所以,此时我们在 /dev 目录下,就可以看到下面这4个设备节点: 现在,设备驱动程序已经加载了,设备节点也被创建好了,应用程序就可以来控制 GPIO 硬件设备了。

    5.1K30

    基于WDM的专用USB设备驱动程序开发

    设备插入主机时,由设备上EEPROM中存储的相关设备标识按照INF文件中的指令,首先安装固件下载驱动程序,将固件下载至EZ-USB芯片的内部RAM。...然后通过重新枚举,由固件中包含的设备标识按照INF文件中的指令安装通用驱动程序。这样就完成了整个驱动程序安装,主机即可对设备进行读写,实现与USB设备的通信。...然后,Windows会搜索处理这些兼容ID中某一个的安装文件。如果没有找到安装文件,它会提示用户安装新的设备驱动程序。选择的安装文件会指定要装入的设备驱动程序。并在Windows内部的注册表中注册。...如果没有找到匹配的INF文件,则在系统的提示下通过手工选择安装文件同样可以完成驱动程序的加载,而且,使用后的INF文件会自动复制到Windows下的INF子目录,这样,在下次插入USB设备时,系统无需提示会自动完成安装过程...l 在最后的[String]l 区段可以添加开发者的信息和该设备的名称。 7 驱动程序的打包 建立生成了上述驱动程序文件之后,需要将其打包制作安装盘,以便于分发使用。

    1.6K20

    TRICONEX 4200 具有集成用户界面的设备驱动程序

    TRICONEX 4200 具有集成用户界面的设备驱动程序图片然而,在未来,工业 4.0 和 NAMUR 开放架构 (NOA) 等衍生概念将专注于数字现场设备可以为诊断和资产管理提供的大量数据。...事实上,今天安装的所有传感器和定位器中至少有四分之三仍然配备了值得信赖的老式 4..20 mA 电流回路。因此,现场设备的标准型号通常具有模拟接口,通常辅以 HART 接口进行参数设置。...尽管如此,新的(通常是非常大规模的)生产系统也是围绕现场总线设计的,这意味着设备制造商必须确保他们也为这一领域提供产品。模拟电源接口和 HART 调制解调器也必须更换为数字现场总线接口。...虽然这种努力对于主要制造商来说可能是可以接受的,但这种方法对只销售少量现场总线设备的小型制造商没有吸引力。...commModule 和 commScripter的结合 使得 Foundation Fieldbus 和 PROFIBUS PA 能够轻松、经济且灵活地集成到现有现场设备和仍在开发中的设备中。

    56530

    设备驱动程序通知应用程序的几种方法

    为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并给出实现的部分核心代码。希望能够给设备驱动程序的设计者提供一些帮助。...设备驱动程序可以直接操作硬件,如果应用程序和设备驱动程序之间实现了双向通信,也就达到了应用程序控制底层硬件设备的目的。...如果加载成功,则调用DeviceIoControl()函数将Ring0事件句柄传给VxD;同时,创建一个辅助线程等待信号变成有信号状态,本身则可去干其它的事情。...加载成功后,通过调用DeviceIoControl()函数将窗体句柄传送给VxD,VxD利用这个句柄向窗体发消息。...当设备驱动程序文件创建成功后,创建一个初始态为无信号、需要手动复位的事件,并且将这个事件传给类型为OVERLAPPED的数据结构(如Overlapped)。

    1.9K21

    ABB REF601 集成用户界面的设备驱动程序

    ABB REF601 集成用户界面的设备驱动程序图片因此,上述情况让设备管理员迫切寻求一种具有成本效益且最重要的是用户友好的解决方案,以帮助减少现场设备调试、参数设置、操作和维护所需的工作量,这也就不足为奇了...Softing 的mobiLink是一款手机大小的设备,重量仅为 300 克,是第一款通过三种行业标准协议(HART、基金会现场总线和 PROFIBUS PA)之一提供与智能现场设备和在线工厂系统连接的电池供电工具...) 在单个设备系列中。...mobiLink 设备提供 HART 主站、FOUNDATION 现场总线主机和 PROFIBUS PA 主站的功能,使用户可以直接完成配置、管理或故障排除任务。...该系列中的设备还提供用于数据配置和集成到交钥匙解决方案的接口,以及符合 EDD、FDT/DTM 和 FDI 标准的连接。

    35810
    领券