随笔分类 - Linux设备驱动
摘要:I2C总线驱动相关知识点,一位博主在博客里写的很好,这里就直接贴上链接: Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 Exynos4412 IIC总线驱动开发(二)—— IIC 驱动开发 Exynos4412 IIC 总线驱动开发相关问题总结 1、i2c子系统
阅读全文
摘要:一、IIC基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IIC总线最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置
阅读全文
摘要:输入子系统的工作原理和代码分析 目的: a,学会如何分析内核中子系统的代码,从而可以举一反三 b,整体把握框架思想,理解分层中各层的配合方式 c,掌握子系统,增强排错能力 分析代码 1、input核心层:input.c 1 subsys_initcall(input_init); //优先级比mod
阅读全文
摘要:目录: 输入子系统的作用与框架 输入子系统的编程方式 一、输入子系统的作用与框架 1、输入设备 按键、鼠标、触摸屏:gt811,ft56xx 有多个输入设备需要驱动的时候,假如不考虑输入子系统 a, gt811 注册设备号,创建设备文件,硬件初始化,实现fop,阻塞 b, ft56xx 注册设备号,
阅读全文
摘要:回顾一下之前的字符设备驱动编程: 1,实现入口函数 xxx_init()和卸载函数 xxx_exit() 2,申请设备号 register_chrdev_region (与内核相关) 3,注册字符设备驱动 cdev_alloc、cdev_init、 cdev_add (与内核相关) 4,利用udev
阅读全文
摘要:目录 1、为什么会有平台总线? 2、平台总线三要素 3、平台总线编程接口 4、编写能在多平台下使用的led驱动 1、为什么会有平台总线? 1 用于平台升级:三星: 2410, 2440, 6410, s5pc100 s5pv210 4412 2 硬件平台升级的时候,部分的模块的控制方式,基本上是类似
阅读全文
摘要:引入: 在之前的基础上,我们已经可以写出一个功能比较完备的字符设备驱动,但是还是存在一些问题: 1)设备和驱动没有分离; 2)没有类似于WINS的设备管理器,不可以方便的查看设备和驱动信息; 3)不能自动创建设备节点 4)不能自动加载驱动; ....... 以上问题的解决都依托Linux设备驱动模型
阅读全文
摘要:按键驱动方式对比 查询:一直读,耗资源 中断: 没有超时机制,当没有中断,read函数一直休眠 poll机制,加入超时机制 以上3种,都是让应用程序主动去读,本节我们学习异步通知,它的作用就是当驱动层有数据时,主动告诉应用程序,然后应用程序再来读, 这样,应用程序就可以干其它的事情,不必一直读。 当
阅读全文
摘要:多路复用 1、概念 假设:在单进程与单线程情况下,应用程序要同时处理多路IO流(多个设备) 如果在应用程序中采用while(1) { read() ... }进行处理,那么每次只能处理一个设备,其他设备有请求时,则会被延迟,甚至丢失数据。如果在一个设备处理中阻塞,则不会接着执行,也不能处理其他设备的
阅读全文
摘要:我们使用中断的目的,就是为了在中断发生时,才去读操作,避免像查询一样一直read,从而占据大量的CPU。 一、阻塞: 当进程在读取外部设备的资源(数据),资源没有准备好,进程就会休眠。 linux应用中,大部分的函数接口都是阻塞 scanf(); read(); write(); accept();
阅读全文
摘要:目录: 1、中断号 2、获取中断号 3、实现中断处理 4、中断编程—实现字符设备驱动框架 5、驱动实现将硬件数据传递给数据 6、示例 1、中断号 中断号是系统分配给每个中断源的代号,以便识别和处理。在采用向量中断方式的中断系统中,CPU必须通过它才可以找到中断服务程序的入口地址,实现程序的转移。 在
阅读全文
摘要:目录: 1、驱动与应用程序的设计思想 2、字符设备驱动编写步骤与规范 3、操作寄存器地址:readl / writel 4、实例:实现LED灯闪烁 1、驱动与应用程序的设计思想 用户态:应用程序 玩策略: 怎么去做 1, 一闪一闪 2,10s闪一次,也可以1s闪一次 3,一直亮 4,跑马灯 控制权是
阅读全文
摘要:目录·: 1、概述 2、设备号、设备节点 3、字符设备驱动框架 4、申请设备号 5、创建设备节点 6、实现文件IO接口--fops 7、应用程序控制驱动 8、驱动程序控制外设 1、概述: linux中一切皆文件,设备也如此,并且以操作文件即文件IO的方式访问设备。 应用程序只能通过库函数中的系统调用
阅读全文
摘要:设备节点被创建在/dev下,是连接内核与用户层的枢纽,就是设备是接到对应哪种接口的哪个ID 上。 相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息在Linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是Linux内核对设备的抽象,一个设备节点就是
阅读全文
摘要:目录: 1、Linux软件系统的层次关系 2、驱动程序的分类 3、驱动程序的开发步骤 1、Linux软件系统的层次关系 软件系统可分为:应用程序、库、操作系统(内核)、驱动程序 以点亮LED为例,分析各层间的写作关系 1)应用程序调用库提供的open函数打开代表LED的设备文件; 2)库根据open
阅读全文
摘要:目录: 1、驱动模块开发 编写驱动hello.c 编写Makefile insmod加载KO模块 lsmod查看系统加载的模块 rmmod卸载模块 2、模块ko参数传递 3、ko模块符号导出 新建math.c math.h 修改Makefile hello.c 调用模块符号 1、驱动模块开发 驱动代
阅读全文
摘要:黑盒移植 两种方式 1. 驱动编译进内核 选则源码目录 修改Makefile 修改Kconfig 2. 将驱动编译成独立的模块 配置为模块方式 通过修改Kconfig 使用make modules 编译为模块 装载模块 insmod xxx.ko 创建设备结点 mknod /dev/xxx c xx
阅读全文
摘要:黑盒移植,即在不用理解驱动程序的细节基础上进行移植 驱动移植的主要流程如下: 一、黑盒移植 1、将驱动编译进内核 如果内核中已经有了已经支持的驱动,那直接在menu上选配即可。若没有,则需要第三方的驱动或者自己写一个驱动,移植进内核。 1)将第三方驱动放到linux源码的driver目录中 拷贝LE
阅读全文
摘要:目的:通过学习,掌握如何移植、编写DM9000C网卡驱动 一、概述: DM9000是一款高度集成低功耗快速以太网处理器,该芯片集成了MAC和PHY。DM9000可以和CPU直接连接,支持8位、16位和32位数据总线宽度。该芯片支持10M和100M自适应以太网接口,内部有16K的FIFO以及4K双字节
阅读全文
摘要:1.概述 网卡驱动与硬件相关,主要负责收发网络的数据包,将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。 网卡设备与字符设备,块设备不同,网络设备驱动程序不依赖与 /dev 或 /sys 来与用户空间通信,应用程序是通过网络接口(如作为第一个网络接口的e
阅读全文