摘要:
驱动开发之输入子系统: 输入子系统 事件处理层:drivers/input/evdev.c 给应用层提供统一的交互接口 核心层:drivers/input/input.c 承上启下(提供的接口会被设备驱动调用,调用后会访问事件处理层) 设备驱动层:自己实现,操作硬件 xxx子系统意义: 内核实现的, 阅读全文
摘要:
驱动开发之I2C总线: I2C:数据线和时钟线。 起始信号:时钟线为高电平,数据线由高到低跳变。 结束信号:时钟线为高电平,数据线由低到高跳变。 应答信号:第九个时钟周期,时钟线保持为高电平,数据线为低电平,此时为成功应答。 读写位:站在主机的角度考虑。 0代表主机给从机发送数据。 1代表主机接收从 阅读全文
摘要:
驱动开发之ADC驱动与通用设备树: 通用设备树: 让驱动去操作设备树,可以选择platform架构,也可以不选择platform架构。 vi -t /arch/arm/boot/dts/exynos4412-fs4412中: 接口: >此时内核还不认识这些引脚编号么 > 参考代码LED: 1 #in 阅读全文
摘要:
驱动开发之select与中断下半部分: 中断上半部、下半部: 1、已知中断应该尽快完成,但是很多时候不能保证中断代码一定会及时完成。2、当不能保证中断尽快完成时,内核将曾经的一个中断处理函数分成了两个中断处理函数 其中中断上半部用来处理紧急事件 中断下半部用来处理非紧急事件3、什么是紧急事件: 直接 阅读全文
摘要:
驱动开发之阻塞与按键驱动: 同步和互斥: 当前的os是运行在多核cpu上。 宏观和微观都可以同时执行多个任务。 如何避免资源竞争? 1.中断屏蔽:只适用于单核cpu 2.原子操作:不可拆分操作 3.互斥锁 4.信号量 5.自旋锁 列如: while(1);//一直执行,一直在占用cpu(此时cpu不 阅读全文
摘要:
驱动开发之platform总线与设备树: platform总线 实现设备和驱动的分离,为了提高驱动的通用性。 实现分离后出现三种文件: 驱动代码(自己实现) 设备代码(自己实现) 虚拟总线代码(内核实现) 追内核源码(设备): 追内核源码(驱动): platform总线接口: test: 1 str 阅读全文
摘要:
驱动开发之read/write: 系统中一切的读写都是站在用户空间的角度来考虑(把你自己当做用户空间)什么是输入/读?数据从内核空间流向用户空间什么是输出/写?数据从用户空间流向内核空间 read: 应用层: 参数1:文件描述符 参数2:存放读取到的数据的空间首地址 参数3:空间大小(不是读到的数据 阅读全文
摘要:
字符设备框架: 框架: 通用的接口(主体是由linux社区的内核维护者实现的,小部分由某些厂家实现的) 1.字符设备框架 每次读写数据都是按照字节的方式,对应的设备文件类型是c 常见的字符设备——鼠标、显示器、摄像头、按键、蜂鸣器、adc2.块设备框架 每次读写是一个块的大小,每个块是512字节或者 阅读全文
摘要:
驱动开发一: 概要: 1、模块、外部编译2、字符设备框架(函数接口和结构体的关系)3、字符设备框架、platform框架4、设备树、led驱动、蜂鸣器驱动5、内核中断子系统,按键驱动,中断上下半部。6、adc驱动,内核的IO模型(阻塞、非阻塞、异步通知、多路复用)7、I2C总线驱动、I2C设备驱动8 阅读全文
摘要:
系统移植第一天 1 基础理论 1.1 什么是嵌入式 以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 可裁剪(软硬件) 1.2 什么是系统 1.2.1 硬件系统 冯诺依曼结构: 控制器,运算器,输入,输出, 存储器 传统的硬件 阅读全文