随笔分类 -  linux驱动程序学习

1
摘要:串口驱动程序学习 本文主要实现对串口驱动程序初始化的分析 一、串口驱动中的数据结构 尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现tty_operations其中的成员函数,但是Linux已经在文件serial_core.c中实现了UART设备 阅读全文
posted @ 2016-04-09 17:14 for_learning 阅读(796) 评论(0) 推荐(0)
摘要:tty驱动程序框架 一、TTY概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1.1串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是 / 阅读全文
posted @ 2016-04-09 11:32 for_learning 阅读(497) 评论(0) 推荐(0)
摘要:平台总线程序设计 一、平台总线概述 平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。 通过平台总线机制开发设备驱动的流程如图: 平台总线的结构:platfor 阅读全文
posted @ 2016-04-08 19:08 for_learning 阅读(435) 评论(0) 推荐(0)
摘要:总线设备驱动模型学习 一、总线概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型。 总线:创建一条总线,跟按键一样,首先是描述总线结构,接着是注册总线,注 阅读全文
posted @ 2016-04-08 13:56 for_learning 阅读(476) 评论(0) 推荐(0)
摘要:linux按键驱动程序 包含内容定时器延时去抖动,阻塞型设备驱动设计 一、定时器延时去抖 按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总是伴有一连串的抖动的。按键去抖动的方法主要有两种,一种是硬件电路去抖动;另一种就 阅读全文
posted @ 2016-04-07 20:51 for_learning 阅读(690) 评论(0) 推荐(0)
摘要:按键驱动程序 本文学习主要包含按键硬件的实现、中断分层管理、按键定时器去抖、阻塞性驱动程序设计。这里面需要使用到混杂设备驱动和中断处理程序的内容。 一、创建按键混杂设备驱动模型 二、按键硬件的实现 首先是按键的初始化,按键的初始化可以选择在open函数,和模块的初始化函数当中完成硬件的初始化。下面我 阅读全文
posted @ 2016-04-07 19:48 for_learning 阅读(3046) 评论(0) 推荐(1)
摘要:linux中断处理程序 一、中断处理流程 在linux内核代码中进入entry-armv.S目录: linux统一的入口:__irq svc. 进入了统一的入口之后,程序跳到irq_handler标号(在同一个文件上面有说明): 而irq_handler实际上是调用上面的arch_irq_handl 阅读全文
posted @ 2016-04-06 17:33 for_learning 阅读(5181) 评论(0) 推荐(0)
摘要:混杂设备驱动模型 在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(数字10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的混杂设备。 一、设备描述 Linux中使用struct miscdevic 阅读全文
posted @ 2016-04-06 16:21 for_learning 阅读(328) 评论(0) 推荐(0)
摘要:驱动与硬件通信 驱动程序控制设备,主要是通过访问设备内的寄存器来达到控制目的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器了. 一、地址映射 在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者RAM地址则是物理地址,无法直接使用,因此,我们 阅读全文
posted @ 2016-04-06 15:15 for_learning 阅读(1090) 评论(0) 推荐(0)
摘要:led驱动程序编写 本文主要包含三部分,led驱动程序led.c编写,编译驱动程序的makefile的编写,以及使用驱动程序的应用程序led_app的编写 一、led.c编写 1.1控制led命令的编写 >led.h 二、编译led.c的Makefile的编写 三、应用程序的编写 在完成以上步骤之后 阅读全文
posted @ 2016-04-04 15:59 for_learning 阅读(1465) 评论(0) 推荐(0)
摘要:字符设备控制 一、设备控制理论 1.1作用 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力。比如: 改变波特率。 1.2设备控制-应用函数 在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cmd,...) 阅读全文
posted @ 2016-04-03 22:04 for_learning 阅读(302) 评论(0) 推荐(0)
摘要:应用程序如何访问驱动 应用程序主要是通过系统调用来访问驱动程序图。 接下来我们以read.c应用程序来分析: 源码: 我们知道read.c是个系统调用函数,系统调用之前,他是在我们的应用程序当中。实现是在内核当中,但是read.c是怎么找到内核的实现代码的呢: 一、进入代码分析阶段 1.1使用静态编 阅读全文
posted @ 2016-04-01 18:54 for_learning 阅读(921) 评论(0) 推荐(0)
摘要:字符设备驱动编程模型 在Linux系统中,设备的类型非常繁多,如:字符设备,块设备,网络接口设备,USB设备,PCI设备,平台设备,混杂设备… ,而设备类型不同,也意味着其对应的驱动程序模型不同,这样就导致了我们需要对应的驱动程序模型不同,这样就导致了我们需要去掌握众多的驱动程序模型。那么能不能从这 阅读全文
posted @ 2016-03-31 18:26 for_learning 阅读(378) 评论(0) 推荐(0)
摘要:字符设备驱动学习 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块。 一、编译安装字符设备驱动程序 memdev文件中:在这个文件里和真实的硬件无关,只是虚构了一个数组 该文件的Makefile文件中: 二、字符设备文件 阅读全文
posted @ 2016-03-31 15:21 for_learning 阅读(288) 评论(0) 推荐(0)
摘要:linux内核模块基础 一、定义 Linux 内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢: 方法 1:把所有的组件都编译进内核文件,即:zImage 或 bzImage,但这样会导致一个问题:占用内存过多. 2.有一种机制能让内核文件本身并不包含某组件,而是在该组件需要被使用的 阅读全文
posted @ 2016-03-31 10:57 for_learning 阅读(486) 评论(0) 推荐(0)
摘要:根文件系统挂载 根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式 Linux 应用中,主要的存储设备为 RAM 和 FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk 等。 一、使用Initramfs 1).进入 阅读全文
posted @ 2016-03-26 18:44 for_learning 阅读(714) 评论(0) 推荐(0)
摘要:根文件系统的制作 嵌入式系统包含多个文件系统但是第一个(根文件系统)是必须的。 一、创建目录 # mkdir rootfs # cd rootfs # mkdir bin dev etc lib proc sbin sys usr mnt tmp var # mkdir usr/bin usr/li 阅读全文
posted @ 2016-03-26 18:08 for_learning 阅读(201) 评论(0) 推荐(0)
摘要:内核配置与编译 一、内核清除 当我们拿到内核第一步需要做的就是先对内核进行清理,防止别人配置编译生成的中间文件对我们产生影响: 1.配置过程生成的 .config 2.编译生成 bzImage 中间文件(.o)和生成.ko 文件的中间文件(.o) make clean 清除.o 文件 make di 阅读全文
posted @ 2016-03-26 13:44 for_learning 阅读(728) 评论(0) 推荐(1)
摘要:ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的。 一、配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生成文件中 C. 执行 make distclean 和 make clean D. make for 阅读全文
posted @ 2016-03-25 22:14 for_learning 阅读(560) 评论(0) 推荐(0)
摘要:usb设备驱动 本章主要内容包含以下:USB总线介绍,USB协议分析,USB系统架构 一、USB总线介绍 1.1USB发展史 USB(Universal Serial Bus)通用串行总线,是一种外部总线标准用于规范电脑与外部设备的连接和通讯。USB是在1994年底由英特尔、康柏、IBM、Micro 阅读全文
posted @ 2016-03-17 22:29 for_learning 阅读(495) 评论(0) 推荐(0)

1