linux驱动开发
文章平均质量分 95
围绕着三大设备驱动类型展开,讲解每种设备驱动的开发方式。
kaka的卡
这个作者很懒,什么都没留下…
展开
-
linux驱动开发 - 12_platform 平台驱动模型
platform 驱动框架分为总线、设备和驱动,其中总线不需要去管理,这个是 Linux 内核提供的,编写驱动的时候只要关注于设备和驱动的具体实现即可。在没有设备树的 Linux 内核下,需要分别编写并注册 platform_device 和 platform_driver,分别代表设备和驱动。在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就不需要去编写了,只需要实现 platform_driver 即可。原创 2023-05-03 21:35:35 · 1144 阅读 · 0 评论 -
linux驱动开发 - 11_Linux 下的驱动分离与分层
以input子系统 为例,input 子系统负责管理所有跟输入有关的驱动,包括键盘、鼠标、触摸等,最底层的就是设备原始驱动,负责获取输入设备的原始值,获取到的输入事件上报给 input 核心层。可以看出,每种平台下都有一个主机驱动和设备驱动,左边的主机驱动是必要的,不同平台的控制器不同。最好每个平台的I2C控制器都提供一个统一的接口(也叫做主机驱动),每个设备的也只提供一个驱动程序(设备驱动),每个设备通过统一的 I2C接口驱动来访问,这样就可以大大简化驱动文件。在实际的驱动开发中,原创 2023-05-03 21:30:17 · 1220 阅读 · 0 评论 -
linux驱动开发 - 10_阻塞和非阻塞 IO
当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞 IO 访问示意图,应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。非阻塞 IO 访问示意图,原创 2023-05-03 21:26:07 · 538 阅读 · 0 评论 -
linux驱动开发 - 09_中断
裸机里面中断的处理方法:①、使能中断,初始化相应的寄存器。②、注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数②、中断发生以后进入 IRQ 中断服务函数,在 IRQ 中断服务函数在数组 irqTable 里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。在 Linux 内核中也提供了大量的中断相关的 API 函数。原创 2023-05-03 21:24:41 · 898 阅读 · 1 评论 -
linux驱动开发 - 08_内核定时器
Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(叫系统频率),比如 1000Hz, 100Hz 等等说的就是系统节拍率。系统节拍率是可以设置的,单位是 Hz选中“Timer frequency”原创 2023-05-03 20:35:30 · 1078 阅读 · 0 评论 -
linux驱动开发 - 07_pinctrl 和 gpio 子系统实战
此函数获取 GPIO 编号,因为 Linux 内核中关于 GPIO 的 API 函数都要使用 GPIO 编号,此函数会将设备树中类似**的属性信息转换为对应的 GPIO 编号**,此函数在驱动中使用很频繁!对于驱动开发人员,设置好设备树以后就可以**使用 gpio 子系统提供的 API 函数来操作指定的 GPIO, gpio 子系统向驱动开发人员屏蔽了具体的读写寄存器过程。此函数用于设置某个 GPIO 的值,此函数是个宏,定义如下。原创 2023-04-20 20:19:04 · 559 阅读 · 0 评论 -
linux驱动开发 - 06_设备树下的 LED 驱动
可以看出, alpahled 这个节点找到了,并且 compatible 属性值为“atkalpha-led”,status 属性值为“okay”, reg 属性的值为“0X20C406C 0X4 0X20E0068 0X4 0X20E02F4 0X4 0X209C000 0X4 0X209C004 0X4”,这些都和我们设置的设备树一致。编写测试 APP, led 驱动加载成功以后手动创建/dev/led 节点,应用 APP 通过操作/dev/led文件来完成对 LED 设备的控制。原创 2023-04-17 21:20:59 · 468 阅读 · 0 评论 -
linux驱动开发 - 05_设备树常用OF操作函数
Linux 内核提供了一系列的函数来获取设备树中的节点或者属性信息,这一系列的函数都有一个统一的前缀“of_”,所以在很多资料里面也被叫做 OF 函数。of_iomap 函数用于直接内存映射,以前会通过 ioremap 函数来完成物理地址到虚拟地址的映射,采用设备树以后就可以直接通过 of_iomap 函数来获取内存地址所对应的虚拟地址,不需要使用 ioremap 函数了。of_find_node_by_type 函数通过 device_type 属性查找指定的节点,函数原型如下。原创 2023-04-13 22:00:01 · 874 阅读 · 0 评论 -
linux驱动开发 - 04_Linux 设备树学习 - DTS语法
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等在图中,树的主干就是系统总线,IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接到系统主线上的分支。原创 2023-04-13 21:58:06 · 2035 阅读 · 0 评论 -
linux驱动开发 - 03_新字符设备驱动
字符设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。学习一下如何编写新字符设备驱动,并且在驱动模块加载的时候自动创建设备节点文件。原创 2023-04-10 21:38:10 · 523 阅读 · 0 评论 -
linux驱动开发 - 02_简单Linux LED 驱动开发
Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU 访问的都是虚拟地址。比 如 I.MX6ULL 的 GPIO1_IO03 引 脚 的 复 用 寄 存 器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 的地址为 0X020E0068。对于 32 位的处理器来说,虚拟地址范围是 2^32=4GB,开发板上有 512MB 的 DDR3,这 512MB 的内存就是物理内存,经过 MMU 可以将其映射到整个 4GB 的虚拟空间。如果点亮的话 说明驱动工作正常。原创 2023-04-06 21:20:31 · 481 阅读 · 0 评论 -
linux驱动开发 - 01_字符设备驱动开发
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实现对硬件的操作。 linux 下的应用程序是如何调用驱动程序的。原创 2023-04-05 17:37:10 · 608 阅读 · 0 评论