随笔分类 - Linux 设备驱动
摘要:<背景> 内存会以分页方式组织内存,而且每页大小和计算机体系结构有关系,Linux中每个页都有对应的struct page{} 与之对应。 <分配连续的内存> a:void *kmalloc(int count,int flags)函数用于从zone_normal区域返回连续内存的分配的地址。 参数
阅读全文
摘要:<什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去。 <中断的分类> a:软中断 软中断时执行中断指令产生的,软中断不用施加中断请求信号,因此中断的产生的不是随机的而是由程序安排的。内核线程是实现软中断的助手。 b:硬中断 硬中断时由外部硬件产生
阅读全文
摘要:<临界区> a:对共享资源进行访问的代码称为临界区。 <原子操作> a:原子操作用于执行轻量级,仅仅执行一次的的操作比如修改计数器,有条件的增加值,设置某一位。所谓原子操作是指该操作在执行玩之前绝对不会被打断,原子操作的代码都是用汇编实现的,因为C语言无法实现这样的操作。 任何拥有锁的代码都必须是原
阅读全文
摘要:<背景> 在linux系统驱动程序中,因为要面临各种各样的硬件,字符设备,快设备,网络接口设备,USB设备,PCI设备,平台设备,混在设备 ,设备不同则所对应的驱动模型不同,这就导致我们要掌握众多的驱动模型,能从这些众多的驱动模型中找到共性,则是学号linux驱动的关键 <linux 驱动程序的编写
阅读全文
摘要:<访问流程> 驱动程序控制设备,其主要是通过访问设备中的寄存器来到达控制设备的目的,因此讨论如何访问硬件,其实质是研究如何访问寄存器。 <地址映射> 在linux系统中,无论是内核所使用地址还是应用程序所使用地址,都虚拟地址,然而芯片手册上锁给出的地址都是物理地址,因此驱动程序开发是第一步就是将物理
阅读全文
摘要:《linux内核简介》 <linux系统架构> 系统架构 用户部分: 应用程序:GNU C 库内核部分:系统调用接口、内核、体系结构相关代码(与硬件相关的代码) 划分原因:不同的运行空间所能访问的寄存器,访问的设备是不一样,其目的就是为了保护操作系统 两种状态的转换:系统调用和硬件中断可以完成两种模
阅读全文
摘要:<文件系统定义> 怎么将文件和文件目录加载到linux内核中,这一种加载的方式就叫做文件系统 《建立根文件系统目录和文件》 <创建目录> 1)在linux系统中使用命令mkdir rootfs 创建一个文件夹 2)进入该文件夹依次批量的创建文件夹 bin dev etc lib proc sbin
阅读全文
摘要:<内核模块代码> 1)内核模块内有main()函数 2)首先编写没内核模块相应的函数功能 3)内核模块的入口由一个宏(module_init(),module_exit()),来加载和卸载(实际是指明加载函数和卸载函数,这样内核才会认识) 4)头文件:<linux/init.h><linux/mod
阅读全文
摘要:《进程要素》 <进程与程序的区别> 程序: 存放在硬盘上一些列代码和数据的可执行映像,是一个静止的实体 进程: 是一个执行中的程序,是动态的实体 <进程4要素> 1)有一段程序供其执行,这段程序不一定是某个进程所专有,可以与其他进程所共用。 2)有进程所专用的内核空间堆栈 3)在内核中有task_s
阅读全文
摘要:<模块申明> MODULE_LICENSE (): 声明该模块遵守的许可证协议,如“GPL”“GPL V2” MODULE_AUTHOR(“姓名”) MODULE_DESCREPTION(“功能描述”) MODULE_VERSION(“版本号”) <使用方式> #include<linux/init
阅读全文
摘要:嵌入式软件的层次: bootloader +boot_parameter+kernel+ boot filesystem <uboot的编译> 1)将uboot压缩文件拷贝到 linux系统中并解压 2)解压后会得到一个uboot文件 3)进入uboot文件 4)vim Makefile 找到需要配
阅读全文
摘要:<const 关键字> 在嵌入式系开发中,const关键字就是“只读”的意思 <为什么要ARM需要进行C语言环境的初始化> 在汇编情况下,指令的跳转,保护现场需要保存的数据很少,并且可以直接访问寄存器,但是到了C语言环境中,函数的调用。 (1)无时无刻都需要保护现场,(2)并且无法直接访问寄存器,(
阅读全文
摘要:<总线模型概述> 随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔。跨平台移植性的要求越来越高,从Linux2.6内核开始提供全新的设备模型。将所有的驱动挂载到计算机的总线上(比如USB总线),当有设备连接到总线上的时候,总线能够感知到,这时系统就会把挂载到总线上是所有驱动和设备匹配。通过不同的
阅读全文
摘要:《《字符设备驱动程序》》 《设备控制理论》 <作用> 大部分驱动除了对外部设备提供读和写的基本功能以外,还需要对设备进行控制。 <应用程序接口> 在用户空间使用ioctl()系统调用来控制设备。 函数原型: int ioctl (int fd,unsigned long cmd,........)
阅读全文
摘要:全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT)。 (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄
阅读全文
摘要:<作用介绍> linux 系统可以分为内核空间和用户空间,当用户空间的一个函数的实现既不是在C库,也不是自己实现,而是在内核空间,这就是系统调用 实现体是内核空间,使用者是用户空间。 <流程分析> 从用户空间,到内核空间,并找到函数执行体。 软中断: 当用户空间使用系统调用的时候就会触发软中断。当要
阅读全文
摘要:《《混杂设备驱动模型》》 《混杂设设备的描述》 <混在设备的概念> 在linux系统中,存在一类字符设备,他们拥有相同的主设备号(10),但是次设备号不同,称这类设备为混在设备(missdevice),所有的混杂设备形成一个链表,对设备进行访问,根据次设备号在链表中查找相应的混杂设备。 注意:混杂设
阅读全文
摘要:《内核链表》 内核链表即,我么在一个链表中插入或删除一个数据,都需要自己编写代码,相当的麻烦,怎么解决这个问题呢,为了更加方便的解决这个问题,linux中就产生了内核链表,以后想要在链表中插入数据或删除数据时,只需要调用函数就可以了。 <链表对比> 链表是一种数据结构,他通过指针将一系列的数据节点连
阅读全文
摘要:<linux 内存管理模型> 下面这个图将Linux内存管理基本上描述完了,但是显得有点复杂,接下来一部分一部分的解析。 内存管理系统可以分为两部分,分别是内核空间内存管理和用户空间内存管理: ————内存管理子系统的职责是:进程请求内存时分配可用内存,进程释放内存后回收内存,以及跟踪系统内存使用情
阅读全文
摘要:<网络知识> a:网络模型 OSI模型 TCP模型 虽然OSI模型看着挺完美的,但是过于复杂,这样就会导致不实用,在Linux系统中用的是TCP模型。每一层都是一种协议,系统对要发送的数据进行层层数据封装,就像洋葱层层刨去还原数据。 <Linux网络驱动特点> a:对于网络接口的常用文件操作(读,写
阅读全文

浙公网安备 33010602011771号