随笔分类 -  Linux 设备驱动

摘要:<作用> 电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信。 <IIC总线结构> IIC总线只有两条线,一条是串行数据线(SDA),另外一条是串行时钟线(SCL). 注:每一个连接到总线上的设备都有一个唯一的地址可以访问(这一点有点像USB设备) 阅读全文
posted @ 2018-03-17 14:40 流浪的Coder 阅读(1998) 评论(0) 推荐(0)
摘要:字符设备之混杂设备: 定义混杂设备: struct misdevice{ int minor; //为什么这里只有次设备号,因为混杂设备是一种在 /////////////////////////Linux系统默认主设备号为10 的特殊字符设备。 const char *name; const st 阅读全文
posted @ 2018-03-17 14:09 流浪的Coder 阅读(475) 评论(0) 推荐(0)
摘要:<什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去。 <中断的分类> a:软中断 软中断时执行中断指令产生的,软中断不用施加中断请求信号,因此中断的产生的不是随机的而是由程序安排的。内核线程是实现软中断的助手。 b:硬中断 硬中断时由外部硬件产生 阅读全文
posted @ 2018-03-17 14:09 流浪的Coder 阅读(3589) 评论(0) 推荐(0)
摘要:<背景> 在linux系统驱动程序中,因为要面临各种各样的硬件,字符设备,快设备,网络接口设备,USB设备,PCI设备,平台设备,混在设备 ,设备不同则所对应的驱动模型不同,这就导致我们要掌握众多的驱动模型,能从这些众多的驱动模型中找到共性,则是学号linux驱动的关键 <linux 驱动程序的编写 阅读全文
posted @ 2018-03-17 14:08 流浪的Coder 阅读(899) 评论(0) 推荐(0)
摘要:<背景> PCI设备有许多地址配置的寄存器,初始化时这寄存器来配置设备的总线地址,配置好后CPU就可以访问该设备的各项资源了。(提炼:配置总线地址) <配置寄存器> (1)256字节的PCI配置空间分为64字节的头标区和192字节的设备相关区两部分。头标区的各个寄存器用来唯一地识别设备;设备相关区则 阅读全文
posted @ 2018-03-17 14:07 流浪的Coder 阅读(4315) 评论(0) 推荐(0)
摘要:<字符设备> 字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供(一般字符设备都会实现相应的fops集),因此file_operations 也就成为了字符设备驱动的核心。 <块设备> 对于块设备而言,ext2,jiffs2,fat等文件系统 阅读全文
posted @ 2018-03-17 14:07 流浪的Coder 阅读(1232) 评论(0) 推荐(0)
摘要:<linux系统7大子系统> a:SCI(system call interface) ————用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和 阅读全文
posted @ 2018-03-17 14:07 流浪的Coder 阅读(1493) 评论(0) 推荐(0)
摘要:<设备驱动模型> 注:几乎所有的设备结构体都包含"strcut kobject kobj"和"srtuct list_head list"该结构体。 struct kobject kobj: 该结构体用于构建Linux设备驱动模型的模型建立 struct list_head { struct lis 阅读全文
posted @ 2018-03-17 14:06 流浪的Coder 阅读(546) 评论(0) 推荐(0)
摘要:Linux驱动框架分析(一) 事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构 阅读全文
posted @ 2018-03-17 14:06 流浪的Coder 阅读(3033) 评论(0) 推荐(0)
摘要:<背景> 内核线程类似于用户进程,通常用于并并发处理性质的任务,并且可以抢占调度。不同于用户进程,内核线程位于内核空间,并且可以访问内核函数和内核数据。 <创建内核线程> a:ret = kernel_thread(mythread,null,CLONE_FS | CLONE_FILES | CLO 阅读全文
posted @ 2018-03-17 14:05 流浪的Coder 阅读(1333) 评论(0) 推荐(0)
摘要:<背景> 内存会以分页方式组织内存,而且每页大小和计算机体系结构有关系,Linux中每个页都有对应的struct page{} 与之对应。 <分配连续的内存> a:void *kmalloc(int count,int flags)函数用于从zone_normal区域返回连续内存的分配的地址。 参数 阅读全文
posted @ 2018-03-17 14:04 流浪的Coder 阅读(246) 评论(0) 推荐(0)
摘要:《《混杂设备驱动模型》》 《混杂设设备的描述》 <混在设备的概念> 在linux系统中,存在一类字符设备,他们拥有相同的主设备号(10),但是次设备号不同,称这类设备为混在设备(missdevice),所有的混杂设备形成一个链表,对设备进行访问,根据次设备号在链表中查找相应的混杂设备。 注意:混杂设 阅读全文
posted @ 2018-03-17 14:03 流浪的Coder 阅读(1127) 评论(0) 推荐(0)
摘要:mini2440的地址怎么分配。mini2440处理器的地址怎么分配。 S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址为连接外设的地址空间。>1G的地址空间 分配给处理器的其他模块使用。 还有一部分为CPU内部使用的特殊功能寄存器地址空间(地址范围为0x4800 000 阅读全文
posted @ 2018-03-17 14:03 流浪的Coder 阅读(450) 评论(0) 推荐(0)
摘要:全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT)。 (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄 阅读全文
posted @ 2018-03-17 14:02 流浪的Coder 阅读(1581) 评论(0) 推荐(0)
摘要:注意:为什么要进行C语言环境的初始化?在没有进行C语言环境的初始化之前的初始化工作都是用汇编进行初始化的。比如核心初始化,和内存初始化 栈:栈帧:一个进程中一般会有多个函数,每一个函数都需要在内存中开辟一个栈空间来使用,每一个函数所占用栈叫做栈帧。pclrspfp这四个数据。 栈帧之空间的界定:fp 阅读全文
posted @ 2018-03-17 14:01 流浪的Coder 阅读(3321) 评论(0) 推荐(0)
摘要:<前言> 嵌入式开发是一个交叉开发的模式,需要将宿主机上的文件烧写到目标机上。 方式: JTAG USB 串口 网络 <tftp下载> 首先需要将宿主机架成一个TFTP的服务器,其次开发板需要具有从tftp服务下载数据的能力。一般可以用串口调试工具进行调试 <tftp交互过程> (1)客户机向服务器 阅读全文
posted @ 2018-03-17 14:00 流浪的Coder 阅读(1696) 评论(0) 推荐(0)
摘要:当一个程序工作于不同的ARM工作模式下,程序处所能调用的ARM 指令是不一样的,可以访问的寄存器也是不一样的 ARM总共有7中不同的工作模式。 user 模式 usr 普通用户模式 0b10000 FIQ 模式 fiq 处理终端是以一种快速中断的模式 0b10001 IRQ 模式 irq 就是以一最 阅读全文
posted @ 2018-03-17 14:00 流浪的Coder 阅读(679) 评论(0) 推荐(0)
摘要:电容的分类: DRAM:基本原件是电容,需要定时刷新,存储速度较慢 DRAM又分为:SRAM(同步动态随机存储器synchronous dynamic random access memory) DDR(双倍速率同步动态随机存储器double data rate sdram) DDR2(在ddr的基 阅读全文
posted @ 2018-03-17 13:58 流浪的Coder 阅读(1741) 评论(0) 推荐(0)
摘要:<网络模型> OSI七层模型 特点:过于复杂 应用层——表示层——会话层——传输层——网络层——数据链路层——物理层 作用:数据传输的时候按照每层的协议对数据进行封装 Linux四层模型 特点:相对来说简单 (应用层/表示层/会话层) ———传输层———网络层————(数据链路层/物理层) 应用层— 阅读全文
posted @ 2018-03-17 13:58 流浪的Coder 阅读(334) 评论(0) 推荐(0)
摘要:异常处理 总共有七中的异常情况: 1:reset 2:undefined instruct(不支持命令异常) 3:软件中断 4:指令预取失败异常 5:数据读取失败异常 6:中断 7:快速中断(比一般的中断处理速度快一些) 中断向量: 当中断发生时,处理器就会跳转到一个固定的地址去处理指令 .glob 阅读全文
posted @ 2018-03-17 13:58 流浪的Coder 阅读(234) 评论(0) 推荐(0)