Linux驱动程序
文章平均质量分 69
驱动程序
Embedded攻城狮
这个作者很懒,什么都没留下…
展开
-
linux驱动 ---- i2c总线驱动(eeprom)
文章目录前言一、IIC驱动程序框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、IIC驱动程序框架分析内核中 I2C 的处理已经做好了,我们只需要做设备驱动程序相关的内容。总线处理好了 I2C 协议,即总线知道如何收发数据,而不知道数据的含义,我们要做的只是设备相关层的代码 , 例如提供设备的地址和要存取的数据和地址 。I2C 协议中,先发出 7bit“设备地址”,然后是 1 位“写”或“读”的标志位。然后接着是每发出 8 位数据有一个 ACK 位。总线层: .原创 2021-07-26 17:49:21 · 547 阅读 · 0 评论 -
linux驱动 ---- 网卡(虚拟)
文章目录前言一、网卡驱动程序框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、网卡驱动程序框架分析只要把上层的数据发给网卡,从网卡来的数据构造成包给上层即可。网卡只需要“socket”编程,不需要打开某设备。驱动程序都是以面向对象的思想写的,都有相关的结构体。。程序编写步骤:1,分配某结构体:net_device2,设置结构体。①,提供一个发包函数:hard_start_xmit()②,提供收包的功能 : net_interrupt(int ir.原创 2021-07-24 21:54:55 · 157 阅读 · 0 评论 -
linux驱动 ---- 块设备NorFlash
文章目录前言一、NorFlash驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、NorFlash驱动框架分析NorFlash可以和内存一样进行读,但写就比较麻烦需要先对一些地址发送命令,才可以进行写操作,在linux内核中对NorFlash驱动程序进行了封装,mtd层下主要是NorFlash和NandFlash,在上一篇NandFlash驱动中,有NandFlash协议,这个协议知道怎么发什么数据,发什么命令然后就可以进行读和写,但不知道怎么发,怎么发涉及底层硬件.原创 2021-07-23 18:35:22 · 430 阅读 · 1 评论 -
linux驱动 ---- 块设备NandFlash
文章目录前言一、NandFlash驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、NandFlash驱动框架分析NandFlash驱动的编写我们只需要编写底层的代码,例如开启时钟,设置与时钟频率相关的参数,怎么发数据或者命令,怎么判断发数据已经完成,选中芯片等等,这些底层的访问,内核无法进行封装,内核只对NandFlash的相关协议进行封装,知道发什么,但具体需要用哪些引脚或者是寄存器去发或者收,这些需要我们来编写,主要涉及两个结构体nand_chip和mtd_.原创 2021-07-21 14:38:50 · 251 阅读 · 0 评论 -
linux驱动 ----块设备驱动程序框架
文章目录前言一、块设备驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、块设备驱动框架分析块设备驱动程序不能和字符设备驱动程序一样读写,那样子会浪费很多时间和降低硬件的寿命,所以块设备的读写过程需要一个电梯算法来规划,把读写放入队列,一次性进行读,再写,或者写再读,不会出现读写读写交替出现。程序编写步骤:1,以面向对象的思想分配 gendisk 结构体。用 alloc_disk 函数。2,设置 gendisk 结构体:①分配/设置一个队列:reques.原创 2021-07-10 21:59:33 · 476 阅读 · 0 评论 -
linux驱动 ---- USB驱动框架
文章目录前言一、usb驱动框架分析二、源码实例分析(鼠标)三、实验结果前言本文基于S3C2440开发板。一、usb驱动框架分析USB 总线驱动程序,在接入 USB 设备时,会帮我们构造一个新的 usb_dev 注册到“usb_bus_type”里去。这部分是内核做好的。我们要做的是,构造一个 usb_driver 结构体,注册到“usb_bus_type”中去。在“usb_driver”结构体中有“id_table”表示他能支持哪些设备,当 USB 设备能匹配 id_table 中某一个.原创 2021-07-09 15:25:26 · 778 阅读 · 0 评论 -
linux驱动程序 ---- 触摸屏
文章目录前言一、触摸屏驱动二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、触摸屏驱动输入子系统其实就是一个文件input.c,Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,为了让上层app使用相同的方法获取不同的输入设备数据,引入了输入子系统的概念,input子系统解决了不同的输入类设备的输入事件与应用层之间的数据传输,使得应用层能够获取到各种不同的输入设备的输入事件,input输入子系统能够囊括所有的不同种类的输入设备,在.原创 2021-07-08 14:53:49 · 1751 阅读 · 0 评论 -
linux驱动 ----LCD驱动框架
文章目录前言一、lcd驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、lcd驱动框架分析所谓的lcd驱动框架,其实就是一个文件fbmen.c,这个文件里面封装了常用的lcd驱动程序框架,如注册驱动程序和与lcd相关的较为稳定的代码,这个框架,会创建设备类,但不会在该类下创建设备,这个需要有真正的设备内容,才能创建,这个真正的设备内容就是需要我们去编写的lcd驱动,想要在这个框架下写自己的驱动代码,也就是说想要用"fbmem.c"这一套代码时,就要按上图的框架来写.原创 2021-07-06 20:10:47 · 444 阅读 · 1 评论 -
输入子系统 ---- input.c
文章目录前言一、输入子系统分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、输入子系统分析输入子系统其实就是一个文件input.c,Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,为了让上层app使用相同的方法获取不同的输入设备数据,引入了输入子系统的概念,input子系统解决了不同的输入类设备的输入事件与应用层之间的数据传输,使得应用层能够获取到各种不同的输入设备的输入事件,input输入子系统能够囊括所有的不同种类的输入.原创 2021-07-06 16:57:19 · 262 阅读 · 0 评论 -
字符设备驱动 ---- bus总线,device和driver模型
文章目录前言一、bus总线分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、bus总线分析bus总线是一条虚拟总线,其实就是一种机制,把驱动程序进行封装,变得更容易移植和修改,linux内核提供这种机制,我们只需要实例化两个结构体platform_device xxx_device和platform_driver xxx_driver,再使用两个注册函数platform_driver_register(&xxx_driver)和platform_device_un.原创 2021-07-04 22:29:05 · 433 阅读 · 2 评论 -
字符设备驱动 ---- poll机制
文章目录前言一、poll机制分析二、用户程序到驱动程序的过程分析三、中断和poll的结合前言本文基于S3C2440开发板。一、poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用 open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。对于系统调用 poll 或 select,它们对应的内核函数都是 sys_poll。分析 sys_poll,即可理.原创 2021-07-01 17:17:43 · 108 阅读 · 0 评论 -
linux驱动程序 ---- 按键中断
文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序button_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#incl.原创 2021-06-30 19:03:06 · 184 阅读 · 0 评论 -
Linux 异常处理体系结构
文章目录前言一、Linux 异常的作用二、异常结构体系前言本文基于S3C2440开发板。一、Linux 异常的作用打断cpu的正常运行流程,做一些其他事情,比如中断,未定义指令,之前说的用户程序使用open.read,write等等函数打开字符设备,最终是引起swi异常,也就是软件中断指令,进入内核态,调用我们的驱动程序。二、异常结构体系①异常发生的时候,就会停止当前的正常流程,自动跳转到异常向量表。②异常向量就是一些被安放在固定位置的代码,发生异常时就会自动执行这些固定位置上的指令.原创 2021-06-30 18:34:06 · 168 阅读 · 0 评论 -
linux驱动程序 ---- 加强版led
文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序利用次设备号,分辨出是哪一个led,对单个led进行操作。led_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include .原创 2021-06-14 10:21:20 · 136 阅读 · 0 评论 -
linux驱动程序 ---- led
文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序led_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include &.原创 2021-06-13 19:46:13 · 105 阅读 · 0 评论 -
应用程序、库、内核、驱动程序的关系
文章目录前言一、Linux软件系统的层次关系二、各层软件系统之间的协作关系前言本文基于S3C2440开发板。一、Linux软件系统的层次关系从上到下,一个软件系统可以分为应用程序,库,内核,驱动程序。开发人员可以专注于自己熟悉的部分,相对于邻接层,只需要了解它的接口,不必关心它的实现细节。二、各层软件系统之间的协作关系应用程序使用库提供的open,read,write函数打开我们的设备文件。库根据open,read,write函数传入的参数执行"swi"指令,这条指令引发CPU异.原创 2021-06-09 16:40:36 · 351 阅读 · 0 评论 -
简单的Linux字符设备驱动程序框架
文章目录前言一、file_operations二、register_chrdev三、open函数四、led应用函数五、led在主函数的应用方法前言本文基于S3C2440开发板。一、file_operationsfile_operations是字符设备驱动程序中最重要的数据结构。它是一个结构体,这个结构体的内容包含很多东西,整体由函数指针构成,这里需要特别关注的就是 read write open 这三个函数指针,是整个驱动程序的核心。struct file_operations { .原创 2021-06-08 20:36:30 · 105 阅读 · 0 评论