![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动开发
吴守春的春天
我一个普普通通的农民一个普普通通的打工者
展开
-
linux驱动学习--第五天:第四章 Linux 内核模块 之 Linux 内核模块简介
知识点1--模块Module简介:模块的理解得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码可被动态地加载到内核中。 两个特点: 模块本身不被编译入内核映像,从而控制了内核的大小。 模块一旦被加载,它就和内核中的其他部分完全一样。知识点2--模块结构:一个 Linux 内核模块主要由以下几个部分组成。1) 模块加载函数(必须)原创 2013-06-08 21:23:27 · 534 阅读 · 0 评论 -
linux驱动学习--第十六天:第十章 Linux 中断与时钟 (一)概念、流程和框架
中断与定时器 所谓中断是指 CPU 在执行程序的过程中,出现了某些突发事件时CPU 必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU 又返回原程序被中断的位置并继续执行。根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自CPU 内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助CPU 内部的软件中断),外部中断的中断源来原创 2013-06-19 22:31:50 · 519 阅读 · 0 评论 -
linux驱动学习--第十七天:第十章 Linux 中断与时钟 (二)概念、流程和框架(2013-06-19 22:31)
硬中断、软中断和信号的区别: 硬中断是外部设备对CPU 的中断, 软中断通常是硬中断服务程序对内核的中断, 而信号则是由内核(或其他进程)对某个进程的中断。 Linux 的中断处理分为两个半部,顶半部处理紧急的硬件操作,底半部处理不紧急的耗时操作。tasklet和工作队列都是调度中断底半部的良好机制,tasklet 基于软中断实现。内核定时器也依靠软中断实原创 2013-06-20 22:53:58 · 593 阅读 · 0 评论 -
linux驱动学习--第十八天:CPU 与内存和I/O(一):
11.1 节讲解内存和I/O 的硬件机制,主要涉及内存空间、I/O 空间和MMU。11.2 节讲解Linux 的内存管理、内存区域的分布、常规内存与高端内存的区别。11.3 节讲解Linux 内存存取的方法,主要涉及内存动态申请以及通过虚拟地址存取物理地址的方法。 小结:今天看到了 内存池的相关概念,这个对于我来说,是一个要重点学习的东西。其实也就几个函数:原创 2013-06-21 23:58:06 · 484 阅读 · 0 评论 -
linux驱动学习--第十九天:第十一章:CPU 与内存和I/O(二):设备I/O 端口和I/O 内存的访问
11.4 节讲解设备I/O 内存和I/O 端口的访问流程,这一节对于编写设备驱动意义非常重大,设备驱动使用此节的方法访问物理设备。 设备通常会提供一组寄存器来用于控制设备、读写设备和获取设备状态,即控制寄存器、数据寄存器和状态寄存器。这些寄存器可能位于I/O 空间,也可能位于内存空间。当位于I/O 空间时,通常被称为I/O端口,位于内存空间时,对应的内存空间被称为I/O 内存。原创 2013-06-23 22:36:13 · 591 阅读 · 0 评论 -
linux驱动学习--第二十一天:第十二章:Linux 字符设备驱动综合实例(一) 键盘驱动
按键的设备驱动 在嵌入式系统中,按键的硬件原理比较简单,通过一个上拉电阻将处理器的外部中断(或GPIO)引脚拉高,电阻的另一端连接按钮并接地即可实现。如图12.1 所示,当按钮被按下时,EINT10、EIN13、EINT14、EINT15 上将产生低电平,这个低电平将中断CPU(图中的CPU 为S3C2410),CPU 可以依据中断判断按键被按下。但是,仅仅依据中断被产生就原创 2013-06-25 21:22:44 · 626 阅读 · 0 评论 -
linux驱动学习--第二十天:第十一章:CPU 与内存和I/O(三):I/O 内存静态映射 和 DMA
I/O 内存静态映射在将Linux 移植到目标电路板的过程中,通常会建立外设I/O 内存物理地址到虚拟地址的静态映射,这个映射通过在电路板对应的map_desc 结构体数组中添加新的成员来完成, DMADMA 是一种无须CPU 的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU 从实际的I/O 数据传输过程中摆脱出来,从而大大提原创 2013-06-24 23:02:23 · 666 阅读 · 0 评论 -
linux驱动学习--第二十二天:第十二章:Linux 字符设备驱动综合实例(二) 触摸屏的设备驱动 和 linux输入子系统
触摸屏的硬件原理 按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为 4 种:电阻式、电容感应式、红外线式以及表面声波式。电阻式触摸屏利用压力感应进行控制,包含上下叠合的两个透明层,通常还要用一种弹性材料来将两层隔开。在触摸某点时,两层会在此点接通。四线和八线触摸屏由两层具有相同表面电阻的透明阻性材料组成,五线和七线触摸屏由一个阻性层和一个导电层组成。 Linu原创 2013-06-26 23:33:37 · 666 阅读 · 0 评论 -
linux驱动学习--第二十二天:第十二章:Linux 字符设备驱动综合实例(三)DSP HPI 的设备驱动
DSP HPI 的设备驱动 TI 公司的一些DSP 提供了一个典型的主机并行接口(HPI)供外部CPU 通过存储总线读取和写入DSP的内存。通过HPI 接口,DSP 可以与外部CPU 通信,甚至包括DSP 所用的程序也可以直接由CPU 通过HPI 下载到DSP 的内存中。 HPI 接口设备驱动中数据结构1 typedef struct2 {3 struct se原创 2013-06-27 23:35:49 · 651 阅读 · 0 评论 -
linux驱动学习--第二十三天:第十二章:Linux 字符设备驱动综合实例(三)NVRAM 设备驱动 和 看门狗设备驱动
NVRAM驱动 NVRAM 设备驱动的数据结构 NVRAM 设备驱动的模块加载与卸载函数 NVRAM 设备驱动读写函数 NVRAM 设备驱动的seek 函数 看门狗设备驱动 看门狗硬件原理看门狗(watchdog)分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零原创 2013-06-28 21:48:37 · 983 阅读 · 0 评论 -
linux驱动学习--第二十五天:第十三章:Linux 块设备驱动(二):gendisk(通用磁盘) 结构体
gendisk 结构体 在 Linux 内核中,使用gendisk(通用磁盘)结构体来表示1 个独立的磁盘设备(或分区)。gendisk 结构体1 struct gendisk2 {3 int major; /* 主设备号 */4 int first_minor; /*第1 个次设备号*/5 int minors; /* 最大的次设备数,如果不能分区,则为1*/原创 2013-06-30 22:57:48 · 5159 阅读 · 0 评论 -
linux驱动学习--第二十四天:第十三章:Linux 块设备驱动(一):块设备的 I/O 操作特点 和 block_device_operations 结构体
块设备的 I/O 操作特点字符设备与块设备 I/O 操作的不同如下。(1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作。(2)块设备对于I/O 请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无须缓冲且被直接读写。对于存储设备而言调整读写的顺序作用巨大,因为在读写连续的扇原创 2013-06-29 23:50:53 · 1723 阅读 · 0 评论 -
linux驱动学习--第十五天:第九章 Linux 设备驱动中的异步通知与异步I/O
总结本章主要讲解了Linux 中的异步I/O,异步I/O 可以使得应用程序在等待I/O 操作的同时进行其他操作。使用信号可以实现设备驱动与用户程序之间的异步通知,总体而言,设备驱动和用户空间要分别完成以下工作:用户空间设置文件的拥有者、FASYNC标志及捕获信号,内核空间响应对文件的拥有者、FASYNC标志的设置,并在资源可获得时释放信号。Linux 2.6 内核包含对AIO原创 2013-06-18 22:15:48 · 400 阅读 · 0 评论 -
linux驱动学习--第四天:第三章 linux内核以及内核编程 之 在Linux内核中新增程序的方法
这一章当中我最感兴趣的就是这个知识点。需要好好的理解和学习。因为这部分还是一个例子说明,再加上编译一遍内核可能需要五六个小时,所以不好实验。在后面的具体碰到的时候,在做详细的解释。这些部分先过一遍。原创 2013-06-07 21:21:50 · 492 阅读 · 0 评论 -
linux驱动学习--第十四天:第八章 Linux 阻塞与非阻塞I/O
小结:这一章,理论比较多。暂时先看一遍,后面慢慢消化。阻塞与非阻塞访问是I/O 操作的两种不同模式,前者在I/O 操作暂时不可进行时会让进程睡眠。在设备驱动中阻塞 I/O 一般基于等待队列来实现,等待队列可用于同步驱动中事件发生的先后顺序。使用非阻塞I/O 的应用程序也可借助轮询函数来查询设备是否能立即被访问,用户空间调用select()和poll()接口,设备驱动提供po原创 2013-06-17 22:50:42 · 388 阅读 · 0 评论 -
linux驱动学习--第六天:第四章 Linux 内核模块 之 Linux 内核模块编译
模块加载函数 Linux 内核模块加载函数一般以_ _init 标识声明1 static int _ _init initialization_function(void)2 {3 /* 初始化代码 */4 }5 module_init(initialization_function);模块卸载函数Linux 内核模块卸载函数一般以_ _exit 标识声原创 2013-06-09 21:59:26 · 584 阅读 · 0 评论 -
linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
5.1.1 文件操作的相关系统调用:Linux 的文件操作系统调用(在Windows 编程领域,习惯称操作系统提供的接口为API)涉及创建、打开、读写、关闭文件。1.创建int creat(const char *filename, mode_t mode);参数mode 指定新建文件的存取权限,它同umask 一起决定文件的最终权限(mode&umask),其中umask原创 2013-06-10 22:26:56 · 517 阅读 · 0 评论 -
linux驱动学习--第八天:第五章 Linux 文件系统与设备文件系统(二) 之 Linux 文件系统
5.2.1 Linux 文件系统目录结构进入 Linux 根目录(即“/”,Linux 文件系统的入口,也是处于最高一级的目录),运行“ls –l”命令,可以看到Linux 系统包含以下目录。1./bin 包含基本命令,如ls、cp、mkdir 等,这个目录中的文件都是可执行的。2./boot Linux 系统的内核及引导系统程序所需要的文件,原创 2013-06-11 23:25:08 · 511 阅读 · 0 评论 -
linux驱动学习--第九天:第五章 Linux 文件系统与设备文件系统(三) 之 file 结构体 和 inode 结构体
应用程序和 VFS 之间的接口是系统调用,而VFS 与磁盘文件系统以及普通设备之间的接口是file_operations结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制的一系列成员函数。由于字符设备的上层没有磁盘文件系统,所以字符设备的 file_operations 成员函数就直接由设备驱动提供了,file_operations 正是字符设备驱动的核心。 而对于原创 2013-06-13 00:05:32 · 767 阅读 · 0 评论 -
linux驱动学习--第一天:设备驱动概述(一)之基础知识
前言:工作有5年了,但是依然没有自己的特色。废话不多说,从今天开始,坚持学习完《linux设备驱动开发详解》这本书。根据自己的浅薄的C语言的基础,实现自己有一技之长的梦想。当中肯定会遇到很多麻烦和很多疑惑,如有朋友能够跟我一起学习和进步,我将很高兴与他一起分享经验和快乐。我会记录学习的点点滴滴,希望经过三年的学习,在我三十而立之年能够让自己有自己的成功之路。在这里再次感谢华原创 2013-06-04 23:38:58 · 746 阅读 · 0 评论 -
linux驱动学习--第二天:设备驱动概述(二)之安装虚拟环境用VmWare 搭建两台虚拟机
虚拟机搭建安装两台虚拟机没有遇到什么困难,就是在配置串口为管道通信的时候,没有找到串口。找了半天,百度搞定。需要自己添加一个串口。解决办法:手动添加串口,然后按照说明书上的配置来进行选择。原创 2013-06-05 21:04:05 · 495 阅读 · 0 评论 -
linux驱动学习--第十一天:第六章 Linux 字符设备驱动(一) 之 Linux 字符设备驱动结构
6.1.1 cdev 结构体在 Linux 2.6 内核中使用cdev 结构体描述字符设备,cdev 结构体的定义如代码清单6.1 所示。代码清单6.1 cdev 结构体1 struct cdev2 {3 struct kobject kobj; /* 内嵌的kobject 对象 */4 struct module *owner; /*所属模块*/5 struct fi原创 2013-06-15 01:52:35 · 778 阅读 · 0 评论 -
linux驱动学习--第十天:第五章 Linux 文件系统与设备文件系统(四) 之 设备文件系统 devfs 和 udev
udev设备文件系统devfs(设备文件系统)是由Linux 2.4 内核引入的,引入时被许多工程师给予了高度评价,它的出现使得设备驱动程序能自主地管理它自己的设备文件。具体来说,devfs 具有如下优点。 1、可以通过程序在设备初始化时在/dev 目录下创建设备文件,卸载设备时将它删除。 2、设备驱动程序可以指定设备名、所有者和权限位,用户空间程序仍可以修改所有者和权限位。原创 2013-06-13 22:24:15 · 1063 阅读 · 0 评论 -
linux驱动学习--第十二天:第六章 Linux 字符设备驱动(二) 之 globalmem 设备驱动
小结:【问题一】这一部分的代码,我参考了这个博客里面的源码 http://blog.csdn.net/zimingjushi/article/details/6575777。但是无法编译 .KO文件,然后我又找到了这个博客,参考了里面的Makefile文件 http://www.360doc.com/content/08/1204/14/36491_2051147.shtml原创 2013-06-16 00:41:32 · 543 阅读 · 0 评论 -
linux驱动学习--第十三天:第七章 Linux 设备驱动中的并发控制
小结:四个知识点: 中断屏蔽 、 原子操作 、 信号量 、 自旋锁; 主要信号量 和 自旋锁 使用的场景遵循三个原则: 1 、获取锁的时间长得时候使用信号量、短的时候使用自旋锁。 2、要保护的代码中含有阻塞操作的代码块的时候,必须使用信号量。因为自旋锁加上阻塞引起死锁。 3、信号量用于进程之间。自旋锁存在于中断和软中断的情况下。原创 2013-06-16 23:05:05 · 470 阅读 · 0 评论 -
linux驱动学习--第三天:驱动设计的硬件基础
总结:本章简单地讲解了驱动工程师必备的硬件基础知识,包括处理器、存储器的分类、原理与用途,并分析了常见的外围设备接口与总线的工作方式。此外,本章还讲解了原理图、硬件时序分析方法以及万用表、示波器和逻辑分析仪的使用方法。这一章节里面的几个原理图可以着重的了解,对于你的硬件知识是个好的指导的开始。我个人在硬件方面不怎么了解,看完这一章以后,我的理解是:硬件对外有很多引脚,每原创 2013-06-06 22:36:51 · 769 阅读 · 0 评论 -
基于flex和bison的C语言代码分析器统计圈复杂度程序设计图
原创 2016-05-15 19:29:24 · 1061 阅读 · 0 评论