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

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

前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...简洁的来说设备驱动程序的作用在于提供机制(需要提供什么功能),而不在于提供策略(这些功能怎么使用)。...驱动程序应当做到使硬件可用, 将所有关于如何使用硬件的事情留给应用程序。...另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准 Linux 的 ext3 文件系统,普遍使用的 FAT 文件系统,或者其他几个文件系统。

78641

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

如果怀疑自己所遇到的问题和ACPI相关,则可使用该选项。 CONFIG_DEBUG_DRIVER 在“Device drivers(设备驱动程序)”菜单中。...如果读者要针对输入设备编写驱动程序,则可使用该选项。注意该选项会导致的安全问题:它会记录你键入的任何东西包括密码。...设备驱动程序会经常使用 KERN_ERR 来报告来自硬件的问题。 KERN_WARNING 对可能出现问题的情况进行警告,但这类情况通常不会对系统造成严重问题。...6、打印设备编号 有时当从一个驱动程序打印消息时,我们会希望打印与硬件关联的设备编号。...在 Linux 系统中对 /proc 的使用很频繁。现代 Linux 发行版中的很多工具都是通过 /proc 来获取它们需要的信息,例如 ps、top 和 uptime。

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

Linux系统驱动之LCD驱动程序框架_使用设备

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 编程_LCD驱动程序框架_使用设备树 参考资料,GIT仓库里: 基于这个程序修改: IMX6ULL\source\03_LCD\03_lcd_drv_qemu_ok STM32MP157...\source\A7\03_LCD\03_lcd_drv_qemu_ok 参考:内核自带的示例驱动程序 Linux驱动源码:drivers/video/fbdev/simplefb.c 设备树:...说明 Linux驱动程序 = 驱动程序框架 + 硬件编程。 在前面已经基于QEMU编写了LCD驱动程序,对LCD驱动程序的框架已经分析清楚。...核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 本节课程我们基于设备树来编写驱动程序。 2. 入口函数注册platform_driver 3.

2.4K30

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

字符驱动的特殊文件由使用 ls -l 的输出的第一列的"c"标识,块设备也出现在 /dev 中,但是它们由"b"标识。 在Linux系统上输入:ls -l /dev 观察输出。...例如我们要操作某个设备,首先,我们要知道设备在/dev下的设备文件名。这个设备文件提供主设备号以及次设备号。然后内核通过设备文件提供的主设备找到设备驱动程序(操作设备驱动程序实现)。...最后通过主设备号和次设备构成的设备号找到正确的设备。有了操作的对象(设备)和操作的方法(驱动程序)那就可以完成了我们的要求。 一个驱动程序可以操作多个设备,所以不同的设备可以具有相同的主设备号。...成功调用申请设备编号的函数后,在系统的 /proc/devices 下就会包含设备以及设备设备号的信息。函数在中声明。字符设备不再使用时应该释放它们占用的编号。...其它的标志较少使用。特别地注意的是,读写权限的检查是使用 f_mode 而不是 f_flags 。所有的标量定义在头文件 中。

39241

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

Linux驱动程序注冊过程,大致分为两个步骤: 模块初始化 驱动程序注冊 以下以内核提供的演示样例代码pci-skeleton.c,具体说明一个pci设备驱动程序的注冊过程。...其它设备的驱动代码注冊过程基本同样,大家可自行查看。使用的内核代码版本号是2.6.38。 1....在介绍注冊函数之前,必需要具体说明下linux的总线设备驱动模型,否则以下的内容非常难描写叙述清楚。...事实上在linux内核中,全部设备的驱动的定义,都是以struct device_driver为基类,进行继承与扩展的。你没有看错,内核其中使用了非常多OO的思想。...当驱动匹配到了相应的设备之后,就会调用该函数来驱动设备。所以能够说这个函数才是驱动程序真正的入口。 remove:当驱动程序相应的设备被删除之后,使用这个函数来删除驱动程序

2.2K20

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

2、内核的并发 常见引起并发原因: linux 系统中通常正在运行多个并发进程,并且可能有多个进程同时使用我们的驱动程序。...大多数设备能够中断处理器,而中断处理程序异步运行,而且可能在驱动程序正试图处理其他任务时被调用。 linux 可以运行在多处理器上,因此可能同时有多个处理器在使用该进程。...不是严格要求的,但是你的模块确实应当指定它的代码使用哪个许可。...用户内存是可交换的,不象内核内存,一个不常使用的却有很大一个驱动的设备不会占据别的程序可以用到的 RAM,除了在它实际在用时。...一个精心设计的驱动程序仍然可以,如同内核空间驱动,允许对设备的并行存取。 如果你必须编写一个封闭源码的驱动,用户空间的选项使你容易避免不明朗的许可的情况和改变的内核接口带来的问题。

51641

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

这句话我的理解是,驱动只负责实现最基本的硬件功能,而谁使用此硬件,怎么使用,一般都不做考虑。...下面所述就是linux中对所有设备的一个分类,并描述了相互之间的简单区别。...linux设备和模块的分类: 字符设备:字符设备是能够像字节流(类似文件)一样被访问的设备,有字符设备驱动程序来实现这种特性。...linux可以让应用程序向字符设备一样读写块设备,允许一次传递任意多字节的数据。...Linux下的磁盘设备都是块设备,尽管在Linux下有块设备节点,但应用程序一般是通过文件系统及其高速缓存来访问块设备的,而不是直接通过设备节点来读写块设备上的数据。

3.2K100

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

内核代码是可抢占的;因此,我们的驱动程序代码可能在任何时候丢失对处理器的独占,而拥有处理器的进程可能正在调用我们的驱动程序代码。设备中断是异步事件,也会导致代码的并发执行。...在驱动程序使用 rwsem 的机会相对较少,但偶尔也比较有用。 使用 rwsem 的代码必须包括 。...每次向该设备的写入将导致一个读取操作结束,但是没有办法知道会是哪个进程。 completion 机制的典型使用是模块退出时的内核线程终止。...循环缓冲区的使用设备驱动程序中相当普遍。特别是网络适配器,经常使用循环缓冲区和处理器交换数据(数据包)。 2、原子变量 有时,共享的资源可能恰好是一个简单的整数值。...每个外出数据包都需要检查路由表,以便确定应该使用哪个接口。 使用 RCU 的代码应包含 。

23731

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

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。...控制 GPIO 设备使用 write 或者 ioctl 函数都可以达到目的,只是 ioctl 更灵活一些。...设备节点 由于在驱动程序的初始化函数中,使用 cdev_add 和 device_create 这两个函数,自动创建设备节点。

4.8K30

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

当你加载PCI驱动的时候,驱动程序会把系统中已经存在的设备的厂商号和设备号与驱动程序中的对比,如果一致,则会注册PCI总线驱动并进行下一步操作。...下面是我写的一个PCI总线的驱动程序,注意是PCI设备识别时的驱动程序,这里并没有实现具体的功能驱动。...PCI设备的驱动分成两个部分,一部分是总线的,就是PCI设备识别、调用驱动程序probe函数的部分,另一部分就是具体的功能驱动,比如网卡。... #include #include //设备相关 #define MY_VENDOR_ID 0x168c...如果是单功能设备,那么只需要用到INT A,多功能设备可以把INT A, B, C ,D 都用完。 对于多功能设备而言,上的的逻辑设备可以使用A, B, C ,D 中的任何一根。

2K21

字符设备驱动程序接口

major:主设备号(1 - 255),传递0则由内核自动分配一个合适的空闲的主设备号 **const char *name**:设备名称 字符设备驱动新接口 主次设备号 在老接口中使用register_chrdev.../* linux/kdev_t.h */ // 传入两个参数生成设备号(dev_t),分别为主设备号和次设备号 MKDEV(ma, mi) // 传入设备号(dev_t),返回主设备号 MAJOR(...dev) // 传入设备号(dev_t),返回次设备号 MINOR(dev) register_chrdev_region 事先知道要使用的主次设备号,需要cat /proc/devices查看未使用设备号...,则使用该接口来分配主次设备号。...struct cdev 内核使用cdev结构体来描述字符设备,在新接口中必须使用该结构体和file_operations结构体一起来描述一个字符设备驱动。

1.4K30

Linux驱动实践:一步一步编写字符设备驱动程序

目录 API 函数 编写驱动程序 编写应用程序 卸载驱动模块 小结 今天我们继续讨论: Linux 中字符设备驱动程序。 在上一篇文章中Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?...我们说过:字符设备驱动程序,有两套不同的API函数,并且在文中详细演示了利用旧的API函数来编写驱动程序。 这篇文章,我们继续这个话题,实际演示一下:字符设备驱动程序的另一套API函数的使用方法。...静态注册:由我们的驱动程序来指定主设备号,即参数1:from; 动态注册:由操作系统来分配,驱动程序提供一个变量来接收该设备号,即参数1: dev 指针; 另外,在Linux 2.6后期的内核版本中,引入了...void cdev_del(struct cdev *); 从系统中删除一个 cdev,注销字符设备,需要在驱动被卸载的时候调用。 后面在代码演示的时候,可以看到cdev结构是如何被使用的。...代码结构还是非常清晰的,这得益于Linux良好的驱动程序架构设计!这也是每一名架构师需要学习、努力模仿的地方。

3K30

Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?

这篇文章的实际操作部分,使用的是的 API 函数; 下一篇文章,再来演示新的 API 函数; 混乱的 API 函数 我在刚开始接触Linux驱动的时候,非常的困扰:注册一个字符设备,怎么有这么多的 API...这个动态分配的设备号,我们要把它记住,因为在其他的API函数中需要使用它。...,例如:起始次设备号是 0,count 为 10,表示驱动程序将会使用 0 ~ 9 这 10 个次设备号; 参数3 name:设备名称; alloc_chrdev_region 参数: 参数1 dev...,例如:起始次设备号是 0,count 为 10,表示驱动程序将会使用 0 ~ 9 这 10 个次设备号; 参数4 name:设备名称; 补充一下关于设备号的内容: 这里的结构体 dev_t,用来保存设备号...如何使用新的API函数来编写字符设备驱动程序,下一篇文章再详细讨论。 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。

1.8K20

通过Linux设备映射器使用持久内存设备

通过Linux设备映射器使用持久内存设备 IO Alignment Considerations 传统的存储设备例如HDD,SSD,nvme,SAN LUNS等以blocks为单位提供存储功能。...Newer设备通常是4K或者8K,但也可以选择逻辑/模拟的512字节的block。 持久内存设备可以通过虚拟内存系统访问,因此IO可以使用系统页大小进行对齐。...Linux支持两种页大小: Ø 默认页大小,通常4KB。Linux通常将其作为页表条目。 Ø 大页:需要内核支持配置CONFIG_HUBETLB_PAGE和CONFIG_HUGETLBFS。...通常称为页面中间目录(PMD),大页大小通常为2MB 页面大小是内存使用和速度之间的折中: Ø 大页造成空间浪费。...DDR和持久内存模块之间的容量差异相当大,由于上述原因,内存为TB级的系统上使用较小页面可能会对性能带来负面影响。

1.1K20

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

例如,USB类驱动程序为所有USB 设备提供了一个抽象的模型,并具有由所有客户驱动程序使用的定义好的接口。...USB是使用标准Windows系统USB类驱动程序访问USBDI(Windows USB驱动程序接口)的USB设备驱动程序。...USBD.sys就是Windows系统中的USB类驱动程序,它使用UHCD.sys来访问通用的主控制器接口设备,或者使用OpenHCI.sys访问开放式主控制器接口设备。...因此,每个设备需要两个驱动程序文件和一个INF文件。可将多个设备硬件描述信息放在一个INF文件中;多个设备使用同一个通用驱动程序;固件下载驱动程序设备不同而异。...5.2 WDM驱动程序的安装过程 驱动程序是根据INF文件中的指令来进行安装的。首先,Windows使用 Device 或 Interface描述符中的值来选择装入哪个驱动程序

1.5K20

Linux系统GIC驱动程序分析

视频观看 百问网驱动大全 第五章GIC驱动程序分析 资料下载 视频观看 1....可以使能、屏蔽中断 发生中断时,可以从GIC里判断是哪个中断 在内核里,使用gic_chip_data结构体表示GIC,gic_chip_data里有什么?...: 驱动程序注册platform_driver 它的of_match_table里有多个of_device_id,表示能支持多个设备 有多种版本的GIC,在内核为每一类GIC定义一个结构体of_device_id...GIC 在设备树中指定GIC,内核驱动程序根据设备树来选择、初始化GIC。...申请GIC中断 3.1 在设备树里指定中断 3.2 内核对设备树的处理 函数调用过程如下,使用图片形式可以一目了然: 函数调用过程如下,使用文字格式方便复制: 4.

4.1K21
领券